VPNルーティングが機能しない

VPNルーティングが機能しない

Wireguard の設定に問題があります。問題は、Wireguard ホスト以外の場所からのパケットが wg0 インターフェイスに送信されないことです。192.168.96.1/24 IP 転送を有効にして wg0 を実行しています。wg0 IP とその LAN IP の両方で wg0 ホストの Web サーバーにアクセスできます。しかし、他の 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 ルールを処理する方が少しきれいだとわかりました。 セクションの下に、次のような内容を入力します (hassio がメインのネットワーク インターフェイスであると仮定)。PostDownwg0.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 トラフィックを許可するルールと組み合わせる必要があります。私は個人的に、 という形式のより一般的な ESTABLISHED/RELATED ルールを選択します-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT。すでに ESTABLISHED/RELATED になっているセッションを続行できるようにする以外に、何かを実行したい状況は実際には思い当たりません。

PS - 実際には LAN のみのホストには「REJECT」ポリシーも使用します。REJECT は、何かが許可されていない場合に ICMP パケットを排出しますが、DROP は単に接続を黙って切断します。REJECT を使用すると、デバッグがかなり簡単になります。

関連情報