VPN 라우팅이 작동하지 않습니다

VPN 라우팅이 작동하지 않습니다

Wireguard를 설정하는 데 문제가 있습니다. 내 문제는 어디에서나 오는 패킷이지만 wireguard hos가 wg0 인터페이스로 전송되지 않는다는 것입니다. 192.168.96.1/24 IP 전달이 활성화된 상태에서 wg0을 실행합니다. wg0 IP와 해당 LAN IP 모두에서 wg0 호스트의 웹 서버에 연결할 수 있습니다. 그러나 다른 LAN 호스트에서는 트래픽이 없습니다. 또는 가장된 트래픽에 대한 응답이 wg0으로 전송되지만 eth0에서는 들어오는 것으로 보입니다.

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

docker와 관련된 nat 규칙이 많이 있습니다. 하지만 왜 패킷이 내 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

답변1

Docker가 설치되어 있는 경우 FORWARD 삭제 또는 거부 정책을 유지하는 것이 좋습니다. 구성에서 PostUp및 옵션을 사용하여 Wireguard가 자체 iptables 규칙을 처리하도록 하는 것이 좀 더 깔끔하다는 것을 알았습니다 . 섹션 아래 PostDown에 다음과 같은 내용을 입력해야 합니다(hassio가 기본 네트워크 인터페이스라고 가정).wg0.conf[Interface]

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

그런 다음 역방향 FORWARD 트래픽을 허용하는 규칙과 쌍을 이루어야 합니다. 저는 개인적으로 -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT. 이미 확립된/관련된 세션을 계속하도록 허용하는 것 외에 다른 작업을 수행하고 싶은 상황은 전혀 없습니다.

추신 - 저는 또한 실제로 LAN 전용 호스트에 대해 "거부" 정책을 사용합니다. REJECT는 허용되지 않는 것이 있을 때 ICMP 패킷을 내보내는 반면 DROP은 자동으로 연결을 끊습니다. REJECT를 사용하면 디버깅이 훨씬 쉬워집니다.

관련 정보