Enrutamiento de paquetes de interfaz tun de Linux

Enrutamiento de paquetes de interfaz tun de Linux

Tengo preguntas sobre el flujo de paquetes IP para el siguiente escenario.

El escenario es:

  1. Una interfaz tun0 (10.0.0.2/8) y una tarjeta LAN inalámbrica física wlan0 (dirección IP no fija) en el lado del cliente, wlan0 podría conectarse a Internet,
  2. Otra interfaz tun0 (10.0.0.1/8) y una tarjeta ethernet física eth0 (192.168.1.38/24) en el lado del servidor (Ubuntu 12.04 amd64), eth0 está en una red privada detrás de un firewall NAT y podría conectarse a Internet a través de el firewall (firewall como puerta de enlace),
  3. ha ejecutado " echo 1 > /proc/sys/net/ipv4/ip_forward" en el lado del servidor,
  4. ha ejecutado " iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -o eth0 -j MASQUERADE" en el lado del servidor,

Aquí está el diagrama del escenario:

---------------          ----------------
|             |          |              |
| client tun0 |----------| client wlan0 |
|  10.0.0.2   |          |  ip not fix  |
|             |          |              |
---------------          ----------------
                                |
                                |

                             internet

                                |
                                |
                         ----------------
                         |              |
                         |   firewall   |
                         |   (gateway)  |
                         | 192.168.1.1  |
                         |              |
                         ----------------
                                |
                                | private network
                                | 192.168.1.0/24
                                |
---------------          ----------------
|             |          |              |
| server tun0 |----------| server eth0  |
|  10.0.0.2   |          | 192.168.1.38 |
|             |          |              |
---------------          ----------------

He utilizado dos programas cliente/servidor muy simples tipo VPN para leer/escribir paquetes IP de las dos interfaces tun0 y crear un túnel entre wlan0 y eth0, de modo que los paquetes IP de 10.0.0.2 puedan llegar a 10.0.0.1 y viceversa ( por ejemplo, podría ejecutar ftp desde 10.0.0.1 a 10.0.0.2).

Sin embargo, si quiero utilizar el cliente tun0 (10.0.0.2) para navegar por páginas web, la solicitud http se originaría en 10.0.0.2 y se dirigiría a una dirección IP de Internet (seguramente no 10.0.0.1). La solicitud http, (creo) después de llegar al servidor tun0 (10.0.0.1), se reenviaría al servidor eth0 (ya que ip_forward está activado, y creo que esta solicitud http reenviada aún tendría una dirección IP de origen de 10.0.0.2, corríjanme si me equivoco) y allí se realiza NAT para reempaquetar la solicitud http como proveniente de eth0 (es decir, la dirección IP de origen cambia a 192.168.1.38 cuando ejecuté el comando iptables) y luego la solicitud http reempaquetada pasa a través del firewall (y luego Internet) hasta su destino.

Cuando la respuesta http (del sitio web) llega al servidor eth0, la NAT inversa debería realizarse allí. Mi pregunta es :

  1. ¿La NAT inversa revierte la dirección IP de destino de la respuesta http a 10.0.0.2?
  2. ¿Cómo sabe el servidor eth0 dónde reenviar la respuesta http con NAT invertida?
  3. ¿Eth0 reenviaría la respuesta http al servidor tun0 (10.0.0.1) ya que la dirección IP de destino de la respuesta tiene NAT inversa para ser 10.0.0.2?
  4. ¿Necesito agregar una ruta en el lado del servidor para el enrutamiento/reenvío adecuado de la respuesta http con NAT invertida? Si es así, ¿cómo?
  5. ¿Necesito agregar algunas reglas de iptables en el lado del servidor para un enrutamiento/reenvío adecuado de la respuesta http con NAT invertida? Si es así, ¿cómo?

Respuesta1

Suponiendo que su cliente envía todo el tráfico a través de tun0, debe agregar lo siguiente en el lado del servidor (después de habilitar /proc/sys/net/ipv4/ip_forward):

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT

Después de este paso, cuando navegue por las páginas web de su cliente, el siguiente será el flujo de paquetes:

  1. El cliente enviará el paquete a 10.0.0.1.
  2. En el lado del servidor, el paquete recibido en tun0 se traducirá de 10.0.0.2 a 192.168.1.38.
  3. Se creará una entrada de mapeo en la tabla NAT.
  4. El paquete se enviará a Internet a través de 192.168.1.1 (puerta de enlace).
  5. Se recibirá respuesta al 192.168.1.38.
  6. La NAT inversa se producirá según la entrada de asignación creada en el paso 3.
  7. El paquete de respuesta se enrutará de regreso a 10.0.0.2.

Espero no estar perdiendo ningún paso importante :)

información relacionada