O seguinte problema é apenas uma parte da solução maior com que tenho um problema. Todos os outros elementos parecem estar funcionando até agora, então vou tentar descrever uma parte muito pequena com a qual tenho problema.
Eu tenho uma máquina Linux, com tun0 (interface de tunelamento) e eth0 (que é o meu gateway padrão para a internet).
Objetivo: meu objetivo é receber pacotes recebidos do tun0 e encaminhá-los para o gateway padrão. Então, na verdade, um caso NAT muito simples, onde eu quero "compartilhar" a internet com o tun0, que finge ser uma 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 tenho tudo instalado e funcionando, eu posso pingar etc. Além disso, eu tenho o aplicativo C ++, que se conecta a este dispositivo TUN, pode ler e gravar nele. (fti: aqui está um tutorial que eu segui: link )
Eu despejei algumas solicitações ICMP (ping) corretas feitas para 8.8.8.8 na matriz de bytes em C ++. Agora, usando meu programa, escrevo no dispositivo tun0. Solicitação ICMP tem
- source (10.2.0.10) - então o kernel conhece 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 preso :( O pacote não é encaminhado para o padrão gw (tshark vê somente no tun0 como recebido, o que eu acho correto)
O que está faltando? Talvez alguma abordagem alternativa (mas tem que ser feito usando o dispositivo tun, e eu tenho que ser capaz de r / w para isso).
Informação adicional:
- o encaminhamento está ativado (/ proc / sys / net / ipv4 / ip_forward)
- 8.8.8.8 é acessível através de eth0 (do local)
- o gateway padrão está correto (do ISP via eth0)
- Eu tentei desligar o rp_tables (echo 0 > / proc / sys / net / ipv4 / conf / eth5 / rp_filter)
- e muitos outros ...
Agradecemos antecipadamente por qualquer dica!