複数のインターフェースを持つシステムがあります。いくつかのsysctl
オプションとルーティング テーブルおよびルールを使用して、それらのインターフェースすべてを相互に分離しました。
各インターフェースには、デフォルト ルートを定義する独自のルーティング テーブルがあります。
各ルーティング テーブルには、どのパケットがどのテーブルに送信されるかを定義する 4 つのルールのセットがあります。
eth0 (192.168.1.1)
簡単にするために、と があるとしますeth1 (192.168.1.2)
。
192.168.1.1
表からeth0
192.168.1.1
テーブルへeth0
eth0の場合
table eth0
oif eth0
table eth0
eth2
それは同じだから。
オプションはsysctl
次のとおりです:
net.ipv4.conf.all.arp_filter = 1
net.ipv4.conf.all.arp_ignore = 2
net.ipv4.conf.all.arp_announce = 1
net.ipv4.conf.all.rp_filter = 1
これは、私が意図した使用例の 99% でうまく機能しますが、1 つ失敗します。「sendto」を使用して UDP クライアントに応答するなど、バインドされていないソケットからパケットが生成されると、呼び出しは「ネットワークに到達できません」で失敗します。sendto を呼び出す前に特定の IP アドレスがバインドされている場合、呼び出しは期待どおりに成功します。
このような状況で包括的なデフォルト ルートを設定する以外に、ポリシー ルーティング (iptables、ip ルールなど) を使用してこの問題を解決する方法はありますか?
ありがとう