複数の基本パス

複数の基本パス

VPNを介して2つのサーバーを接続しました。サーバーAはすべてのコンテナをホストし、サーバーBは単純なルーターです。 SSHを介して両方のサーバーに接続する必要があるため、サーバーAがホストするコンテナからエクスポートされたパッケージを除いて、ppp0(サーバーA)とeth0(サーバーB)へのデフォルトパスを変更しないでください。これらのコンテナはすべてのトラフィックをサーバーBに送信する必要があります。

Server A                                                                                              Server B
-------------------------------------------------------------------------------------------                 ---------------------------------------------
internet ---- ppp0 (a.b.c.d/32)                                                             eth0 (e.f.g.h/32) ---- internet
                   vpn   (172.16.0.1/16)    -----------------------------------------------    vpn (172.16.0.2/16)
            +---- vswitch (172.17.0.1/16)
            |
            |                                             Container yp
            +---- yp (slave of vswitch)  ----  eth0 (172.17.0.3/16)
            |
            |                                                 Container boot
            +---- boot (slave of vswitch)  ----  eth0 (172.17.0.4/16)

ppp0 は VPN 接続ではなく、ローカル ADSL リンクです。 ppp0のMTUは1480です。

両方のVPNリンクはWiresharkに基づいて構築されました。両方のMTUは1420です。

サーバーAコンテナのトラフィックにタグを付け、そのトラフィックをサーバーB /インターネットにルーティングしようとしています。また、サーバーBの将来のコンテナが存在するため、双方向に作成しようとしました。

# iptables -t mangle -A PREROUTING -j MARK --set-mark 85 -i vswitch
# iptables -t mangle -A PREROUTING -j MARK --set-mark 95 -i vpn

# ip rule add fwmark 85 lookup 185
# ip rule add fwmark 95 lookup 195

# ip route add table 185 default via 172.16.0.1 dev vpn
# ip route add table 185 default via 172.16.0.1 dev vswitch

コンテナypにログインすると、サーバーBに対してpingを試みます。

[root@yp ~]# ping 172.16.0.2
PING 172.16.0.2 (172.16.0.2) 56(84) bytes of data.
^C
--- 172.16.0.2 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1004ms

サーバーAのルーティングテーブル。

# ip r show table all
default via 172.16.0.1 dev vpn table 185 
default via 172.17.0.1 dev vswitch table 195 
default dev ppp0 scope link 
a.b.c.n dev ppp0 proto kernel scope link src a.b.c.d
local a.b.c.d dev ppp0 table local proto kernel scope host src a.b.c.d 
broadcast 127.0.0.0 dev lo table local proto kernel scope link src 127.0.0.1 
local 127.0.0.0/8 dev lo table local proto kernel scope host src 127.0.0.1 
local 127.0.0.1 dev lo table local proto kernel scope host src 127.0.0.1 
broadcast 127.255.255.255 dev lo table local proto kernel scope link src 127.0.0.1 
broadcast 172.16.0.0 dev vpn table local proto kernel scope link src 172.16.0.1 
local 172.16.0.1 dev vpn table local proto kernel scope host src 172.16.0.1 
broadcast 172.16.255.255 dev vpn table local proto kernel scope link src 172.16.0.1 
broadcast 172.17.0.0 dev vswitch table local proto kernel scope link src 172.17.0.1 
local 172.17.0.1 dev vswitch table local proto kernel scope host src 172.17.0.1 
broadcast 172.17.255.255 dev vswitch table local proto kernel scope link src 172.17.0.1 

ルーティング/マーキングを正しくするには、何が欠けていますか?

答え1

あなたの図を正しく理解したかどうかはわかりません。あなたが望むのは、両方のコンテナのパケットがサーバーBにルーティングされるようにサーバーAにパスを設定することだけです。そうですか?

とにかく、通常はiptablesルーティングを使用しないでください。 (これは人々が常にルーティングを使用しようとする理由のためにマイナーな苦情ですiptables。)ポリシールーティングなどの他のオプションがあります。

したがって、あなたの場合は次のようになります。

ip route add table 250 172.16.0.1/16 dev vpn scope link
ip route add table 250 default via 172.16.0.2
ip rule add from 172.16.0.3 table 250
ip rule add from 172.16.0.4 table 250

(テストされていません)トリックを実行する必要があります。ポリシールーティングに関するオンラインチュートリアルがたくさんあります。

関連情報