
Utilicé la siguiente guía para configurar mi Raspberry Pi como punto de acceso:
Raspberry Pi 3 como punto de acceso wifi
Estoy reenviando wlan0
y eth0
aplicando NAT a todo mi tráfico. ¡Funciona genial!
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
Ahora quiero configurar las mismas reglas excepto usar la interfaz tun0-00
y reenviartodomi tráfico a través de mi túnel vpn. Quiero enviarlo todo, no quiero que se filtre nada en la red del host. Pensando que es algo como esto:
sudo iptables -t nat -A POSTROUTING -o tun0-00 -j MASQUERADE
sudo iptables -A FORWARD -i tun0-00 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o tun0-00 -j ACCEPT
Desafortunadamente, sé que estas reglas de iptables no están completas... El problema es que eth0
permanece activa; la regla original para reenviar el tráfico todavía eth0
existe.
Quiero enviar todo mi tráfico a través del túnel si el túnel está abierto; si no, estoy bien usándolo eth0
.
Actualizar:
Usé el indicador -I para insertar mis reglas:
sudo iptables -t nat -I POSTROUTING 1 -o tun0-00 -j MASQUERADE
sudo iptables -I FORWARD 1 -i tun0-00 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -I FORWARD 1 -i wlan0 -o tun0-00 -j ACCEPT
La cadena ADELANTE:
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 ACCEPT all -- wlan0 tun0-00 0.0.0.0/0 0.0.0.0/0
2 0 0 ACCEPT all -- tun0-00 wlan0 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
3 0 0 ACCEPT all -- eth0 wlan0 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
4 0 0 ACCEPT all -- wlan0 eth0 0.0.0.0/0 0.0.0.0/0
5 0 0 ACCEPT all -- wlan1 wlan0 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
6 0 0 ACCEPT all -- wlan0 wlan1 0.0.0.0/0 0.0.0.0/0
Todavía no hay alegría, el reenvío no parece funcionar.
Configuración de VPN del cliente
Eliminé cosas que parecían sensibles:
dev tun
persist-tun
persist-key
cipher AES-256-CBC
auth SHA1
tls-client
client
resolv-retry infinite
remote XXX.XXX.XXX.XXX PORT_NUM udp
lport XXX
verify-x509-name "VPN_Certificate" name
pkcs12 CERT_NAME.p12
tls-auth CERTIFICATE-tls.key 1
ns-cert-type server
redirect-gateway local def1
El pi se conecta bien y refleja una IP pública diferente. Los clientes todavía muestran el pi como su puerta de enlace pero ya no pueden conectarse.
Solución
Primero necesitaba agregarlo redirect-gateway def1
al archivo .ovpn en el pi.
Entonces necesitaba escribir correctamente el nombre de mi interfaz... Uf. Me siento como un loco, pero al parecer lo vi tun0-00
en un principio y esa fue la única vez que existió. En realidad, la interfaz es simplemente tun0
.
Entonces los comandos apropiados de iptables fueron:
sudo iptables -t nat -I POSTROUTING 1 -o tun0 -j MASQUERADE
sudo iptables -I FORWARD 1 -i tun0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -I FORWARD 1 -i wlan0 -o tun0 -j ACCEPT
¡Funciona muy bien ahora!
Respuesta1
Necesitará ambos conjuntos de reglas dentro de iptables
. Los dos conjuntos de reglas garantizan que el tráfico que sale por las interfaces especificadas esté adecuadamente enmascarado. Aquí está mi sugerencia, que es un poco más sencilla que la tuya:
# Masquerade outgoing traffic
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
# Allow return traffic
iptables -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
# Forward everything
iptables -A FORWARD -j ACCEPT
La parte del rompecabezas que falta es la ruta. Si el túnel está activo, desea que "todo" el tráfico saliente lo utilice. En caso contrario utilice la ruta normal.
esto se manejadentro de OpenVPNutilizando el redirect-gateway def1
parámetro en la configuración de su cliente.
Respuesta2
La herramienta útil es enumerar las reglas existentes con números de línea:
iptables --line-numbers -t filter -L FORWARD
Podrías eliminar las reglas con -D
la opción:
iptables -t filter -D FORWARD 1
Puede insertar una nueva regla en una ubicación especificada con -I
la opción:
iptables -t filter -I FORWARD 0 blah-blah-blah
esto insertaría una nueva regla al principio de una tabla, por lo que será consultada en un primer turno.
Editar:
Generalmente, sólo necesita una regla en la FORWARD
tabla que coincida -m state --state RELATED,ESTABLISHED
:
-I FORWARD 1 -m state --state RELATED,ESTABLISHED -j ACCEPT
ya que el seguimiento de conexiones permitiría enrutar todas las conexiones ya conocidas.
Y sí, necesitas configurarenrutamiento de políticaspara reenviar su wlan
tráfico no a la puerta de enlace predeterminada a la que probablemente se pueda acceder a través de su ethernet
interfaz, sino a través de vpn
la interfaz.