Entonces, he estado configurando una Raspberry Pi para que actúe como un enrutador VPN con la ayuda de stunnel, OpenVPN y muchos artículos en línea (principalmente los deJayden Chua) y puedo crear uno con éxito, pero no entiendo completamente la parte de iptables (descrita a continuación), aunque he leído ayuda en línea sobre el tema.
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
iptables -A FORWARD -i wlan0 -j ACCEPT
iptables -A FORWARD -i tun0 -o wlan1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i wlan1 -o tun0 -j ACCEPT
¿Alguien puede explicarme cada línea? Sé que puede ser simple pero honestamente no puedo entender por qué funciona =P
Muchas gracias de antemano =)
Respuesta1
En primer lugar, debemos definir el reenvío de IP. No voy a explicarlo muy profundamente (tampoco lo sé), pero básicamente, bajo este contexto, lo que necesitas saber es que significa el flujo de paquetes de un host a otro a través de este host.
Debo señalar que ninguna de las -A FORWARD ... -j ACCEPT
reglas/comandos es necesaria a menos que tenga -P FORWARD DROP
o algo similar (es decir, descarte cualquier paquete que se supone que debe reenviarse). Las reglas no permiten que se realice el reenvío, pero sólo hacen una excepción cuando el valor predeterminado no es "ACEPTAR". (Usted "habilita" el reenvío con sysctl.)
Ahora podemos mirar las reglas:
iptables -A FORWARD -i wlan0 -j ACCEPT
Esto significa permitir que los paquetes que llegan desde wlan0 se reenvíen (a otra red a través de cualquier interfaz en este host).
iptables -A FORWARD -i wlan1 -o tun0 -j ACCEPT
Esto significa permitir que los paquetes que llegan desde wlan1 se reenvíen a tun0. (Tenga en cuenta que esto no es necesario para que los paquetes lleguen a las direcciones del propio tun0, ya que eso no cuenta como "reenvío".)
iptables -A FORWARD -i tun0 -o wlan1 -m state --state RELATED,ESTABLISHED
Esto significa permitir que los paquetes que ingresan desde tun0 se reenvíen a wlan1, solo si hay una conexión relacionada o establecida, verificando con la extensión/módulo state
(quedó obsoleto con conntrack
, que toma el conmutador --ctstate
). Junto con la regla anterior, esencialmente significan permitir el reenvío entre tun0 y wlan1, siempre y cuando la conexión no sea iniciada por un paquete de tun0.
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
Básicamente, esto significa que los paquetes que salen de tun0 tendrían su dirección de origen cambiada a la de tun0. Si no se hace esto, el siguiente enrutador necesitará tener una ruta de retorno para que cualquier respuesta llegue a la dirección de origen original. (es decir, para llegar a la dirección de origen original, este host debe ser la puerta de enlace). Esto también se conoce como NAT (sobrecarga)/PAT. Piense en ello como hacer que tun0 funcione como el puerto/interfaz WAN de un enrutador típico de consumo.
Respuesta2
Para comprender esto, debe comprender los principios del enrutamiento. Sin embargo, no puedo escribir un libro con esta respuesta, así que lo seré breve y sencillo.
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
Esta regla básicamente toma el paquete, se aplicaNAT, pero después de que se toma la decisión de cómo enrutar este paquete. Por eso se aplica a POSTROUTING
. Luego envía el paquete nuevamente al túnel llamado tun0
. Esta es tu conexión VPN. También se aplica enmascaramiento, porque la regla no conoce la IP del dispositivo. Sin él, necesitarías usar este comando para cada dispositivo que se conecte. Entonces podrías ver esto como una especie de comodín.
iptables -A FORWARD -i wlan0 -j ACCEPT
iptables -A FORWARD -i wlan1 -o tun0 -j ACCEPT
Esta línea dice que se acepte todo el tráfico reenviado a la wlan0
interfaz. Supongo wlan0
que se utiliza como conexión a Internet principal en esta guía, por lo que esta es la ruta principal entre el enrutador y el túnel VPN. Esto hace que Pi acepte paquetes en esta interfaz y le daacceso a la red interna. La segunda línea aquí es básicamente el camino de regreso del paquete. Desde el pi, de regreso al túnel.
iptables -A FORWARD -i tun0 -o wlan1 -m state --state RELATED,ESTABLISHED -j ACCEPT
Esta línea permite que el tráfico proveniente del túnel tun0
vaya a la interfaz wlan0
, pero sólo si se estableció una conexión.establecidopreviamente.
En pocas palabras, esas reglas permiten que los paquetes provenientes del túnel VPN fluyan hacia el resto de la red privada y regresen.