Ping em um servidor externo através do túnel OpenVPN não funciona

1

Eu tenho um servidor OpenVPN e um cliente, e eu quero usar este túnel para acessar não apenas 10.0.8.0/24 , mas toda a Internet. Até agora, o ping do servidor pelo cliente através da interface tun0 funciona e vice-versa.

No entanto, o ping de www.google.com do cliente até tun0 não funciona (todos os pacotes são perdidos).

Eu imaginei que eu deveria configurar o servidor para que qualquer pacote vindo de tun0 no destino da Internet fosse encaminhado, então eu criei esta linha de configuração do iptables:

interface_connecting_to_the_internet='eth0'
interface_openvpn='tun0'
internet_ip_address='ifconfig "$interface_connecting_to_the_internet" | sed -n s'/.*inet \([0-9.]*\).*//p''

iptables -t nat -A POSTROUTING -o "${interface_connecting_to_the_internet}" -j SNAT --to-source "${internet_ip_address}"
echo '1' > /proc/sys/net/ipv4/ip_forward

No entanto, isso não funciona, os pacotes ainda estão perdidos e estou me perguntando o que poderia estar errado com a minha configuração.

Alguns detalhes:

ip route dá no servidor:

default via 176.31.127.254 dev eth0  metric 3 
10.8.0.0/24 via 10.8.0.2 dev tun0 
10.8.0.2 dev tun0  proto kernel  scope link  src 10.8.0.1 
127.0.0.0/8 via 127.0.0.1 dev lo 
176.31.127.0/24 dev eth0  proto kernel  scope link  src 176.31.127.109 

ip route dá no cliente:

default via 192.168.1.1 dev wlan0  proto static 
10.8.0.1 via 10.8.0.5 dev tun0 
10.8.0.5 dev tun0  proto kernel  scope link  src 10.8.0.6 
127.0.0.0/8 via 127.0.0.1 dev lo  scope link 
192.168.1.0/24 dev wlan0  proto kernel  scope link  src 192.168.1.109 
  • o cliente usa o adaptador wi-fi wlan0 e o adaptador TUN tun0 .
  • o servidor usa o adaptador ethernet eth0 e o adaptador TUN tun0 .
  • a VPN abrange 10.0.8.0/24

  • o cliente e o linux estão usando o Linux 3.6.1.

por qdii 03.11.2012 / 22:29

1 resposta

2

Para resumir a discussão:

Para alcançar um host específico A através de uma VPN do cliente C para o servidor S, é necessário:

  • ativar o encaminhamento de ip em S ( sysctl -w net.ipv4.ip_forward=1 )
  • ativar o mascaramento ou snat via iptables no S: iptables -t nat -A POSTROUTING -o ext_if -j MASQUERADE ou iptables -t nat -A POSTROUTING -o ext_if-j SNAT --to-source ext_ip com o significado óbvio de ext_if e ext_ip .
  • configurar o roteamento apropriado em C, seja (S denota S 'endereço IP na VPN ):
    • definindo uma rota explícita para A via S: ip route add A via S dev vpn_if
    • definindo uma rota padrão via S: ip route add default via S dev vpn_if , onde também é preciso definir uma rota apropriada para S: ip route add S via previous_gateway dev prev_if .
    • usando o push "redirect-gateway def1" no servidor, em cujo caso o OpenVPN configurará rotas para 0.0.0.0/1 e 128.0.0.0/1 em C por S, que são mais específicas que a rota padrão e podem ser facilmente removidas quando o túnel está parado.
por 05.11.2012 / 11:47