El siguiente problema es solo una parte de la solución más grande con la que tengo un problema. Todos los demás elementos parecen funcionar hasta ahora, así que intentaré describir una pieza muy pequeña con la que tengo problemas.
Tengo una máquina Linux, con tun0 (interfaz de túnel) y eth0 (bruja es mi puerta de enlace predeterminada a internet).
Objetivo: mi objetivo es recibir paquetes entrantes desde tun0 y reenviarlos a la puerta de enlace predeterminada. Así que, en realidad, es un caso NAT bastante simple, donde quiero "compartir" Internet con tun0 que simula la interfaz física.
Tun ha sido creado 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
Así que lo tengo en funcionamiento, puedo hacer ping, etc. Además, tengo la aplicación C ++, que se conecta a este dispositivo TUN, puede leer y escribir en él. (fti: aquí hay un tutorial que he seguido: http://backreference.org/2010/03/26/tuntap-interface-tutorial/ )
Volqué alguna solicitud ICMP (ping) correcta hecha a 8.8.8.8 en la matriz de bytes en C ++. Ahora, usando mi programa, lo escribo en el dispositivo tun0. La solicitud ICMP tiene
- fuente (10.2.0.10) - para que el núcleo conozca la ruta de regreso (la misma subred)
- destino (8.8.8.8) - DNS de Google
- suma de comprobación correcta, etc. (en Wireshark / TShark aparece correctamente en tun0)
Entonces, tengo las siguientes rutas:
iptables -F # flush
iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
iptables --append FORWARD --in-interface tun0 -j ACCEPT
Y aquí estoy atascado :( El paquete no se reenvía al gw predeterminado (tshark lo ve solo en tun0 como recibido, lo que supongo que es correcto)
Lo que falta Tal vez algún enfoque alternativo (pero tiene que hacerse usando un dispositivo tun, y tengo que ser capaz de ejecutarlo). Información adicional:
- el reenvío está habilitado (/ proc / sys / net / ipv4 / ip_forward)
- 8.8.8.8 es accesible a través de eth0 (desde local)
- la puerta de enlace predeterminada es correcta (desde el ISP a través de eth0)
- He intentado desactivar rp_tables (echo 0> / proc / sys / net / ipv4 / conf / eth5 / rp_filter)
- y muchos otros...
¡Gracias de antemano por cualquier pista!