発信ドッカーパケットはルーティングルールに従わない。

発信ドッカーパケットはルーティングルールに従わない。

Wireguardトンネルを介してクラウド環境のパブリック「ルーター」(B)に接続されたプライベートDockerホスト(A)があります。

ラインバッカー:

(Docker Container)
eth0 172.17.0.2
|
docker0 172.17.0.1
(A) eth0 192.168.1.2 --- Internet (can't accept conns)
wg0 10.0.16.6
|
wg0 10.0.16.5
(B) 
eth0 public IP Q
|
USER

アイデアは、トラフィックが最初にパブリックIPを介してBに到達し、次に要求をBに転送し、応答を再転送することです。

私はフォローしましたこのガイド、特にポリシールーティング部分はそうです。

Aのワイヤガード構成は次のとおりです。

[Interface]
Address = 10.0.16.6/30
Table = 123

PreUp = ip rule add from 10.0.16.6 table 123 priority 456
PostDown = ip rule del from 10.0.16.6 table 123 priority 456

[Peer]
AllowedIPs = 0.0.0.0/0
Endpoint = Q:51820
PersistentKeepalive = 30

ソースが10.0.16.6で宛先が元の送信者であるパケットは、次の規則に従ってwg0インターフェイスを介してルーティングする必要があります。

0:  from all lookup local
456:    from 10.0.16.6 lookup 123 ### This one
32766:  from all lookup main
32767:  from all lookup default

したがって、Aでは、Bのパケットがwireguardインターフェイス(宛先アドレス10.0.16.6)から着信し、docker httpサーバーに正しくルーティングされます。

その後、応答パケットがDockerコンテナからAに返されると、コンテナの送信元アドレスが得られます。これは、上記のルーティングルールがhttpサーバーがホストAで実行されている場合と同様に尊重されないことを意味します。

パケットはルーティングの後、NAT で終了し、A wg0 ではなく A eth0 に送信されます。

NAT フェーズ後にパケットを再ルーティングしたいと思います。

Dockerコンテナからのすべての一般的なトラフィックはwg0インターフェイスを通過しないでください。リファレンスガイドで推奨されているように、wg0インターフェイスからの着信トラフィックのみを通過する必要があります。

iptables -L追加情報が必要な場合などをご提供いたします。

答え1

欲しいならみんなDocker コンテナからのトラフィックが Docker ホストの WireGuard 接続から出るには、前述のポリシー ルーティング技術を使用できます。ドッカーコンテナポリシールーティングルールのIPアドレス:

ip rule add from 172.17.0.2 table 123 priority 456

これDockerホストのただし、IPアドレスはSNATが適用されるため、コンテナから転送されるトラフィックをルーティングするこの規則には適していません。後ろにホストがルーティング決定を下しました。

だからあなたが必要ならトラフィックのみを返すWireGuard接続で発生したデータをWireGuard接続に再ルーティングするには、Dockerホストで接続タグを使用する必要があります。この技術の中心は3つのステップです。

  1. WireGuardインターフェイスを介して着信する新しい接続にカスタム接続フラグを設定します。

     iptables -t mangle -A PREROUTING -i wg0 -m state --state NEW -j CONNMARK --set-mark 1
    
  2. 発信接続から接続タグをパケットタグにコピーします。

     iptables -t mangle -A PREROUTING ! -i wg0 -m connmark --mark 1 -j MARK --set-mark 1
    
  3. ポリシールーティングルールのパケットタグを使用して、パケットをWireGuardインターフェイスに再ルーティングします。

     ip rule add fwmark 1 table 123 priority 456
    

詳細なガイドラインと考慮事項については、リンクされたガイドの「中間サーバーのConnmark」セクションを参照してください。インターネットから他のネットワークへのWireGuardポートの転送

関連情報