Preciso direcionar o tráfego para algum host na Internet via servidor VPN.
Configuração:
Computador: Ubuntu-12.04
eth0 - xxxx/24
tun0 - endereço inet:10.8.0.6 PtP:10.8.0.5 Máscara:255.255.255.255
Existe servidor OpenVPN (Amazon):
Ubuntu-12.04
eth0 - aaaa/24
tun0 - endereço inet:10.8.0.1 PtP:10.8.0.2 Máscara:255.255.255.255
Existe host no IP da Internet: qqqq
Quero trafegar para qqqq e lançar o servidor OpenVPN. Para isso eu faço:
tabelas de ip:
Eu marco pacotes na tabela mangle:
sudo iptables -t mangle -A OUTPUT -d q.q.q.q -j MARK --set-mark 2
Eu envio tráfego para qqqq throw tun0:
sudo iptables -t nat -A POSTROUTING -d q.q.q.q -j SNAT --to-source 10.8.0.6
iproute2:
Eu faço a tabela "100" em /etc/iproute2/rt_tables
sudo ip rule add fwmark 2 table 100
sudo ip route add default via 10.8.0.5 table 100
tcpdump no primeiro computador:
14:22:04.554399 IP 10.8.0.6 > qqqq.clodo.ru: solicitação de eco ICMP, id 11717, seq 1, comprimento 64
14:22:04.681918 IP qqqq.clodo.ru> 10.8.0.6: resposta de eco ICMP, id 11717, sequência 1, comprimento 64
14:22:05.562577 IP 10.8.0.6 > qqqq.clodo.ru: solicitação de eco ICMP, id 11717, seq 2, comprimento 64
14:22:05.690240 IP qqqq.clodo.ru> 10.8.0.6: resposta de eco ICMP, id 11717, sequência 2, comprimento 64
Mas não há ping. 2 pacotes transmitidos, 0 recebidos, 100% de perda de pacotes.
Responder1
Você não precisa marcar os pacotes. Para fazer o que está planejando você precisa do seguinte
no arquivo de configuração do servidor adicione o seguinte:
"push route q.q.q.q 255.255.255.255"
O acima irá empurrar a rota para o lado do cliente para que todo o tráfego enviado do cliente para aquele IP seja enviado através do túnel openvpn.
Também no lado do servidor você precisa aceitar o tráfego de entrada do cliente, você pode aceitar todo o tráfego proveniente da sub-rede do cliente da seguinte forma
iptables -A INPUT -s 10.8.0.0/24 -j ACCEPT
você também pode precisar disso, não tenho certeza:
iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
Você precisa enviar o tráfego que chega do lado do cliente para o servidor [faça isso no lado do servidor]
iptables -t nat -A POSTROUTING -d q.q.q.q -j SNAT --to-source PUBLIC_IP_OR_YOUR_VPN_SERVER
E você não precisa da tabela iproute2 ou mangle.
A ordem das regras é importante, então agrade-os antes de descartar uma regra correspondente