POSTROUTING チェーン内またはチェーン後の送信インターフェイス選択に影響しますか?

POSTROUTING チェーン内またはチェーン後の送信インターフェイス選択に影響しますか?

多数の KVM インスタンスをホストするシステムがあります。これらはすべて 1 つのブリッジ ( としますbrvirt) に接続されており、このブリッジには も接続されています。このレイヤー 2 環境は、アドレス変更のために 172.16.10.0/24 を使用するプライベート ネットワーク上にあります。システムには、 (10.10.10.10) と(10.10.20.20) eth1という 2 つのインターフェイスがあります。eth0eth2

一般的に、外部接続はSNATのアドレスを介して提供されますeth0(ホストのデフォルトゲートウェイもこのインターフェースから提供されます)。いくつかのシステムSNAT、に接続されている 10.10.20.0/24 ネットワークに明示的な 1-1 ルールが必要ですeth2

POSTROUTINGこれは、チェーンを実行してSNATアウトバウンド インターフェイスの選択がすでに行われているため、問題となります。カーネルは、すでにデフォルト ルートを選択しています (直接接続されたネットワーク以外への接続を想定)。つまり、SNATルールによって送信元 IP アドレスが変更されると、パケットが間違ったレイヤー 2 ネットワークから発信されているため、ローカル ルーティング インフラストラクチャによってパケットがドロップされます。

これを回避する方法はあるでしょうか?私が本当にやりたいことは、POSTROUTINGチェーンの最後にあるパケットの送信元アドレスに基づいてルーティングを決定することです...しかし、それはPOSTROUTING正当な理由で呼び出されます。

答え1

これは、単純なポリシーベースのルーティングで実行できます。

スキーマには一連のルールとルートが必要になります。

ip rule add from 172.16.10.X iif brvirt lookup 200
ip route add default via 1.2.3.4 src 4.3.2.1 dev ethY table 200

変数:

172.16.10.X = KVM's IP
200         = Example value for routing_table, has to be unique for each KVM
ethY        = either eth0 or eth2
1.2.3.4     = Example Gateway on iface ethY
4.3.2.1     = Example Source-IP for each KVM

これにより172.16.10.X、指定されたifaceから送信されたすべてのパケットがethY、送信元アドレス4.3.2.1

もっと複雑な方法もありますfwmarksが、この場合は必要ないと思います。

ルートは で確認できます: 。これにより、からip route get iif brvirt from 172.16.10.X 8.8.8.8への接続にカーネルが使用するルートと出力デバイスが表示されます。172.16.10.X8.8.8.8

あなたの質問への答えになれば幸いです。

ふー

関連情報