VPN 路由不起作用

VPN 路由不起作用

我在設定 wireguard 時遇到問題。我的問題是來自任何地方的資料包,但不透過 wg0 介面發送出wireguard hos。我運行 wg0 並啟用 192.168.96.1/24 ip 轉送。我可以透過 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 丟棄或拒絕策略。我發現讓 Wireguard 使用配置中的PostUp和選項來處理自己的 iptables 規則會更乾淨一些。PostDownwg0.conf[Interface]部分下,您應該放置類似的內容(假設 hassio 是您的主網路介面):

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

然後,這需要與允許反向轉送流量的規則配對:我個人選擇更通用的 ESTABLISHED/RELATED 規則,其形式為-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT.我真的不知道在什麼情況下我除了允許已經建立/相關的會話繼續之外還想做任何事情。

PS - 我還對真正僅限 LAN 的主機使用「拒絕」政策。當不允許某些操作時,REJECT 會踢出 ICMP 封包,而 DROP 只是默默地斷開連接; REJECT 讓除錯變得更加容易。

相關內容