Script PHP para ativar/desativar a VPN IPSEC dependendo do status do link Ponto a Ponto.
-
Boa tarde.
A release que estou trabalhando do pfsense é a 2.4.4-RELEASE-p3 (amd64)
Fiz algumas adaptações no script php criado no tópico abaixo.
https://forum.netgate.com/topic/38142/usar-rotas-de-vpn-como-backup-no-pfsense
O problema que eu estou passando é que quando o script desabilita a VPN os processo de SPD's e SAD's ainda permanecem ativos.
Dentro do script original a função vpn_ipsec_refresh_policies(); gera o erro abaixo pra mim e por isso tive de remove-la. E esta função é a que faz o processo de encerrar os processos SPD's e SAD's
Error :
Link offline, Enabling Tunnel!Fatal error: Uncaught Error: Call to undefined function vpn_ipsec_refresh_policies() in /usr/local/www/check_pap_v2.php:83
Stack trace:
#0 {main}
thrown in /usr/local/www/check_pap_v2.php on line 83
PHP ERROR: Type: 1, File: /usr/local/www/check_pap_v2.php, Line: 83, Message: Uncaught Error: Call to undefined function vpn_ipsec_refresh_policies() in /usr/local/www/check_pap_v2.php:83
Stack trace:
#0 {main}Segue o script que estou usando no momento:
<?php /* Este script tem como funcao habilitar ou desabilitar tuneis de VPN para serem usados como backup em caso de falhas em linhas dedicadas ou links ponto-a-ponto. Este script deve ser instalado no diretorio /usr/local/www, ter permisao de execucao e devera ser chamado atraves do cron na peridiocidade desejada. O script recebe como parametro o IP de origem para determinar a interface pela qual o teste sera realizado, o IP de destino que sera verificado se esta on-line ou n## e o nummero da VPN. No caso o numero da VPN e obtido contando-se apenas os itens de Fase 1 na configuracao do IPSec do pfSense de cima para baixo comecando do 0. Exemplos: php -q /usr/local/www/check_pap.php <ip de="" origem=""><ip a="" ser="" testado=""><numero da="" vpn="" ipsec=""> /usr/local/bin/php -q /usr/local/www/check_pap.php 10.22.245.30 10.22.245.40 0 */ require_once("util.inc"); require_once("functions.inc"); require_once("pkg-utils.inc"); require_once("globals.inc"); require_once("filter.inc"); require_once("shaper.inc"); require_once("ipsec.inc"); require_once("vpn.inc"); $VPN_ID=array_pop($argv); $a_phase1 = &$config['ipsec']['phase1']; $a_phase2 = &$config['ipsec']['phase2']; $ikeid = $a_phase1[$VPN_ID]['ikeid']; $host=array_pop($argv); if (! is_ipaddr($host)){ print "invalid ip address!\n"; exit(1); } array_shift($argv); $args=implode(" ", $argv); exec("/sbin/ping -c 1 -t 1 -S $args $host",$ret,$exit1); if ($exit1 == 0) exec("/sbin/ping -c 1 -t 1 -S $args $host",$ret,$exit2); if ($exit2 == 0) exec("/sbin/ping -c 1 -t 1 -S $args $host",$ret,$exit3); $exit = ($exit1 + $exit2 + $exit3); if ($exit == 0){ #link online if (! isset($a_phase1[$VPN_ID]['disabled'])) { print "Link online, Disabling Tunnel!\n"; $a_phase1[$VPN_ID]['disabled']=""; if (is_array($a_phase2) && (count($a_phase2))) { foreach ($a_phase2 as &$phase2) { if ($phase2['ikeid'] == $ikeid) { $phase2['disabled']=""; } } } write_config(); vpn_ipsec_configure(); filter_configure(); } else print "Link online, Tunnel already Disabled!\n"; } else{ if (isset($a_phase1[$VPN_ID]['disabled'])){ print "Link offline, Enabling Tunnel!\n"; unset ($a_phase1[$VPN_ID]['disabled']); if (is_array($a_phase2) && (count($a_phase2))) { foreach ($a_phase2 as &$phase2) { if ($phase2['ikeid'] == $ikeid) { unset ($phase2['disabled']); } } } write_config(); vpn_ipsec_configure(); filter_configure(); } else print "Link offline, Tunnel already Enabled!\n"; } ?>
Galera do PHP e IPSEC conseguem me dar uma força ?