
Tenho um servidor e um cliente OpenVPN e quero usar esse túnel para acessar não só, 10.0.8.0/24
mas toda a Internet. Até agora, executar ping no servidor do cliente por meio da tun0
interface funciona e vice-versa.
No entanto, o ping www.google.com
do cliente tun0
não funciona (todos os pacotes são perdidos).
Achei que deveria configurar o servidor para que qualquer pacote vindo do tun0
destino 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
wlan0
e adaptador TUNtun0
. - o servidor usa adaptador Ethernet
eth0
e adaptador TUNtun0
. a VPN se estende por
10.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 MASQUERADE
ouiptables -t nat -A POSTROUTING -o ext_if-j SNAT --to-source ext_ip
com o significado óbvio deext_if
eext_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 para0.0.0.0/1
e128.0.0.0/1
em 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.
- definindo uma rota explícita para A via S: