
Tengo un problema al configurar Wireguard. Mi problema son los paquetes desde cualquier lugar, pero el wireguard hos no se envía a la interfaz wg0. Ejecuto wg0 con el reenvío de IP 192.168.96.1/24 habilitado. Puedo acceder al servidor web en el host wg0 tanto en la IP de wg0 como en su IP de LAN. Pero no hay tráfico de otros hosts de LAN: o se envían respuestas al tráfico enmascarado en wg0, pero se ve que ingresa en eth0.
ip route
192.168.96.0/24 dev wg0 proto kernel scope link src 192.168.96.1
Tengo muchas reglas nat relacionadas con Docker. Pero no tengo idea de por qué los paquetes no se enrutan hacia mis hosts wg0.
# iptables --list-rules
-P INPUT ACCEPT
-P FORWARD DROP
-P OUTPUT ACCEPT
-N DOCKER
-N DOCKER-ISOLATION-STAGE-1
-N DOCKER-ISOLATION-STAGE-2
-N DOCKER-USER
-A FORWARD -j DOCKER-USER
-A FORWARD -j DOCKER-ISOLATION-STAGE-1
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A FORWARD -o hassio -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o hassio -j DOCKER
-A FORWARD -i hassio ! -o hassio -j ACCEPT
-A FORWARD -i hassio -o hassio -j ACCEPT
-A DOCKER -d 172.17.0.3/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 9000 -j ACCEPT
...
-A DOCKER -d 172.30.33.6/32 ! -i hassio -o hassio -p tcp -m tcp --dport 22 -j ACCEPT
-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -i hassio ! -o hassio -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -j RETURN
-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -o hassio -j DROP
-A DOCKER-ISOLATION-STAGE-2 -j RETURN
-A DOCKER-USER -j RETURN
# iptables -t nat --list-rules
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-N DOCKER
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
-A POSTROUTING -s 172.30.32.0/23 ! -o hassio -j MASQUERADE
-A POSTROUTING -s 172.17.0.3/32 -d 172.17.0.3/32 -p tcp -m tcp --dport 9000 -j MASQUERADE
...
-A POSTROUTING -s 172.30.33.6/32 -d 172.30.33.6/32 -p tcp -m tcp --dport 22 -j MASQUERADE
-A DOCKER -i docker0 -j RETURN
-A DOCKER -i hassio -j RETURN
-A DOCKER ! -i docker0 -p tcp -m tcp --dport 9000 -j DNAT --to-destination 172.17.0.3:9000
....
-A DOCKER ! -i hassio -p tcp -m tcp --dport 2222 -j DNAT --to-destination 172.30.33.6:22
Respuesta1
Si tiene Docker instalado, definitivamente querrá mantener una política de rechazo o caída ADELANTE. Me pareció un poco más limpio que Wireguard manejara sus propias reglas de iptables usando las opciones PostUp
y PostDown
en la configuración. En wg0.conf
la sección debajo [Interface]
debes poner algo como (suponiendo que Hassio sea tu interfaz de red principal):
PostUp = iptables -I FORWARD 1 -i %i -o hassio -s 192.168.96.0/24 -j ACCEPT; iptables -t nat -A POSTROUTING -s 192.168.96.0/24 -o hassio -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -o hassio -s 192.168.96.0/24 -j ACCEPT; iptables -D POSTROUTING -s 192.168.96.0/24 -o hassio -j MASQUERADE
Luego, esto debe combinarse con una regla que permita el tráfico ADELANTE inverso: personalmente opto por una regla ESTABLECIDA/RELACIONADA más genérica en forma de -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
. Realmente no conozco ninguna situación en la que quiera hacer algo más que permitir que continúen las sesiones ya ESTABLECIDAS/RELACIONADAS.
PD: también utilizo políticas de "RECHAZO" para hosts que realmente son solo LAN. REJECT expulsa un paquete ICMP cuando algo no está permitido, mientras que DROP simplemente desconecta la conexión en silencio; REJECT facilita bastante la depuración.