O seguinte problema é apenas um pedaço da solução maior com a qual tenho um problema. Todos os outros elementos parecem funcionar até agora, então tentarei descrever uma peça muito pequena com a qual tenho problemas.
Eu tenho uma máquina Linux, com tun0 (interface de encapsulamento) e eth0 (que é o meu gateway padrão para a Internet).
Objetivo: meu objetivo é receber pacotes recebidos de tun0 e encaminhá-los para o gateway padrão. Então, na verdade, um caso NAT bastante simples, onde eu quero "compartilhar" a internet com o tun0, que falsifica a interface física.
Tun foi criado usando
sudo openvpn --mktun --dev tun0 --user USER
sudo ip addr add 10.2.0.1/24 dev tun0
sudo ip link set tun0 up
Então, eu o tenho instalado e funcionando, posso executar o ping etc. Além disso, tenho o aplicativo C ++, que é anexado a este dispositivo TUN, que pode ler e gravar nele. (fti: aqui está um tutorial que eu segui: http://backreference.org/2010/03/26/tuntap-interface-tutorial/ )
Despejei alguma solicitação correta de ICMP (ping) feita para 8.8.8.8 na matriz de bytes em C ++. Agora, usando o meu programa, escrevo-o no dispositivo tun0. Solicitação do ICMP
- source (10.2.0.10) - para que o kernel conheça a rota de volta (a mesma sub-rede)
- destination (8.8.8.8) - DNS do Google
- soma de verificação correta etc. (no Wireshark / TShark aparece corretamente no tun0)
Então, eu tenho as seguintes rotas:
iptables -F # flush
iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
iptables --append FORWARD --in-interface tun0 -j ACCEPT
E aqui estou eu preso :( Pacote não é encaminhado para o gw padrão (tshark vê apenas no tun0 como recebido, o que eu acho que está correto)
O que está a faltar? Talvez alguma abordagem alternativa (mas isso tenha que ser feito usando o dispositivo tun, e eu precise ser capaz de r / w). Informação adicional:
- o encaminhamento está ativado (/ proc / sys / net / ipv4 / ip_forward)
- 8.8.8.8 é alcançável através de eth0 (do local)
- o gateway padrão está correto (do ISP via eth0)
- Eu tentei desativar rp_tables (eco 0> / proc / sys / net / ipv4 / conf / eth5 / rp_filter)
- e muitos outros...
Agradecemos antecipadamente por todas as dicas!
Respostas:
Uma solução alternativa seria usar
bridge
. Assim, você pode conectar seu tun0 com eth0 e não há necessidade de nat ou configurar ip em tun0; basta colocar IPs da mesma sub-rede de eth0 e do mesmo gateway que você está usando agora nas interfaces de túnel dos clientes.Comandos para configurar uma ponte:
www.tldp.org/HOWTO/BRIDGE-STP-HOWTO/set-up-the-bridge
fonte
Recentemente, encontrei esse problema (seguindo o mesmo artigo mencionado na pergunta) e, depois de mexer um pouco, descobri que o comando a seguir habilita o encaminhamento local dos pacotes para o dispositivo tun.
Sei que é muito tarde, estou postando aqui para que qualquer pessoa que enfrenta o mesmo problema possa ter algum tipo de ajuda.
fonte