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

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

Tenho um servidor e um cliente OpenVPN e quero usar esse túnel para acessar não só, 10.0.8.0/24mas toda a Internet. Até agora, executar ping no servidor do cliente por meio da tun0interface funciona e vice-versa.

No entanto, o ping www.google.comdo cliente tun0não funciona (todos os pacotes são perdidos).

Achei que deveria configurar o servidor para que qualquer pacote vindo do tun0destino da internet fosse encaminhado, então 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.]*\).*/\1/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 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 adaptador wi-fi wlan0e adaptador TUN tun0.
  • o servidor usa adaptador Ethernet eth0e adaptador TUN tun0.
  • a VPN se estende por10.0.8.0/24

  • tanto o cliente quanto o Linux estão usando Linux 3.6.1.

Responder1

Para resumir a discussão:

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

  • habilitar encaminhamento de IP em S ( sysctl -w net.ipv4.ip_forward=1)
  • habilite mascaramento ou snat via iptables em S: iptables -t nat -A POSTROUTING -o ext_if -j MASQUERADEou iptables -t nat -A POSTROUTING -o ext_if-j SNAT --to-source ext_ipcom o significado óbvio de ext_ife ext_ip.
  • configurar o roteamento apropriado em C (S denota o endereço IP de S'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 é necessário definir uma rota apropriada para S: ip route add S via previous_gateway dev prev_if.
    • usando o push "redirect-gateway def1"no servidor, caso em que o OpenVPN configurará rotas para 0.0.0.0/1e 128.0.0.0/1em C via S, que são mais específicas que a rota padrão e podem ser facilmente removidas quando o túnel for interrompido.

informação relacionada