O roteamento VPN não funciona

O roteamento VPN não funciona

Estou com um problema ao configurar o wireguard. Meu problema são pacotes de qualquer lugar, mas o wireguard hos não é enviado na interface wg0. Eu executo wg0 com 192.168.96.1/24 o encaminhamento de IP está habilitado. Posso acessar o servidor web no host wg0 no IP wg0 e no IP da LAN. Mas nenhum tráfego de outros hosts da LAN - ou respostas ao tráfego mascarado estão sendo enviadas no wg0, mas são vistas chegando na eth0.

ip route
192.168.96.0/24 dev wg0 proto kernel scope link src 192.168.96.1

Eu tenho muitas regras nat relacionadas ao docker. Mas não tenho ideia de por que os pacotes não são roteados para meus 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

Responder1

Se você tiver o Docker instalado, definitivamente desejará manter uma política de descarte ou rejeição FORWARD. Achei um pouco mais limpo fazer o Wireguard lidar com suas próprias regras de iptables usando as opções PostUpe PostDownna configuração. Na sua wg0.confseção [Interface]você deve colocar algo como (assumindo que hassio é sua interface de rede 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

Isso então precisa ser combinado com uma regra que permita o tráfego FORWARD reverso: eu pessoalmente opto por uma regra ESTABLISHED/RELATED mais genérica na forma de -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT. Eu realmente não conheço nenhuma situação em que eu queira fazer outra coisa senão permitir que sessões já ESTABELECIDAS/RELACIONADAS continuem.

PS - Eu também uso políticas "REJECT" para hosts que realmente são apenas LAN. REJECT expulsa um pacote ICMP quando algo não é permitido, enquanto DROP apenas interrompe silenciosamente a conexão; REJECT torna a depuração um pouco mais fácil.

informação relacionada