Encaminhamento de tráfego do dispositivo TUN (backend C ++) para o gateway padrão

9

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!

    
por Marcin Górski 02.02.2012 / 14:14

1 resposta

0

Uma solução alternativa seria usar bridge . Então você pode conectar seu tun0 com eth0 e não há necessidade de nat ou configurar ip em tun0 você acabou de colocar IPs da mesma sub-rede de eth0 e mesmo gateway que você está usando agora nas interfaces de túnel dos clientes.

Comandos para definir uma ponte:

# brctl addbr br0
# brctl addif br0 eth0 tun0

www.tldp.org/HOWTO/BRIDGE-STP-HOWTO / set-up-the-bridge

To use brctl you have to install bridge-utils package.
If your distro is Ubuntu: aptitude install bridge-utils

    
por 18.03.2016 / 20:47