
Tenho três máquinas que estou tentando coordenar por meio de uma conexão TUN.
FREEBSD
caixa executando o servidor OpenVPN (tun)
10.0.200.21/24 na sub-rede local
10.0.202.1/24 na VPN
REMOTE
IP público
10.0.202.6/24 em VPN
WEBSERVER
10.0.200.31/24 na sub-rede local
Posso acessar REMOTE
a VPN FREEBSD
via OpenVPN e a conexão está boa, mas está configurada incorretamente. Quando tento conectar- REMOTE
me WEBSERVER
digitando WEBSERVER
o endereço IP de REMOTE
no navegador, WEBSERVER
fica inacessível. É acessível se eu me conectar REMOTE
diretamente à sub-rede local.
Aprendi o seguinte durante a solução de problemas.
REMOTE
pode fazer pingFREEBSD
e até mesmo SSH para ele.- Uma captura de pacotes configurada na
FREEBSD
porta Ethernet de não captura pacotes de ou paraREMOTE
o IP VPN de 10.0.202.6. Portanto, os pacotes do REMOTE não estão chegando à sub-rede local. - Oopenvpn.logfile on
FREEBSD
tem a seguinte linha:GET INST BY VIRT: 10.0.200.31 [failed]
Portanto, parece que o OpenVPN não está encaminhando pacotes recebidos no dispositivo TUN para FREEBSD
o adaptador Ethernet e para a sub-rede local.
Eu tenho a seguinte linha no meu arquivo server.conf.
push "route 10.0.200.0 255.255.255.0"
Tentei adicionar esta linha, mas não ajudou.
route 10.0.200.0 255.255.255.0
Aqui está a tabela de roteamento emFREEBSD
Tabelas de roteamento Internet: Sinalizadores de gateway de destino Refs usam Netif Expire padrão 10.0.200.1 UGS 0 4306 re0 10.0.200.0 link#9 U 0 61582 re0 10.0.200.21 link#9 UHS 0 41 lo0 10.0.201.0 10.0.200.1 UGS 0 0 re0 10.0.202.0 10.0.202.2 UGS 0 0 tun0 10.0.202.1 link#12 UHS 0 0 lo0 10.0.202.2 link#12 UH 0 0 tun0 link do host local#11 UH 0 193743 lo0
Eu li online sobre a GET INST BY VIRT: 10.0.200.31 [failed]
mensagem e foi recomendado que máquinas Linux executassem o seguinte comando.
echo 1 > /proc/sys/net/ipv4/ip_forward
Tenho medo de rodar porque não entendo e não quero entrar FREEBSD
em uma configuração estranha. Eu também prefiro fortemente uma solução que modifique o arquivo server.conf para criar automaticamente a configuração necessária para que seja gerenciado e desmontado adequadamente quando o OpenVPN for fechado.
Qual é a solução para este problema?
Responder1
Encontrei o problema. Acontece que o FreeNAS, o software do dispositivo NAS baseado no FreeBSD e ao qual estou me referindo FREEBSD
acima, tem o net.inet.ip.forwarding
valor definido como 0. Isso pode ser visualizado usando o comando sysctl -a | grep net.inet.ip.forwarding
. Para encaminhar os pacotes, tive que fazer um arquivo sysctl net.inet.ip.forwarding=1
.
Essa alteração não persiste durante as reinicializações. Acho que talvez seja necessário usar o arquivo /etc/rc.conf e set gateway_enable="YES"
, mas até agora descobri que essa configuração não é processada até a reinicialização e, infelizmente, no FreeNAS, o rc.conf parece ser substituído a cada reinicialização. Pode ser possível gravar esta variável em /etc/defaults/rc.conf, que supostamente armazena os padrões do sistema e é substituída por configurações personalizadas em rc.conf, mas o /etc/defaults/rc.conf arquivo tem um aviso na parte superior para não editá-lo.
Então, esse problema não está totalmente resolvido, mas pelo menos descobri quais parecem ser os problemas. Agora que entendi isso, estou percebendo um problema ao fazer login em dispositivos de gerenciamento da web https na sub-rede local. Esse será outro problema a resolver.
Responder2
Ok, então seu cliente VPN tem uma rota para chegar à 10.0.200.0/24
rede e seu servidor VPN tem uma rota. Mas a questão é: o seu servidor web 10.0.200.31
tem uma rota para chegar à 10.0.202.0/24
rede?
Faça um tcpdump na caixa do freebsd. Suspeito que você verá o tráfego do seu 10.0.202.6
host sendo encaminhado, mas não verá nenhum tráfego de retorno.