web-dev-qa-db-ja.com

ipルールはipルートを打ち負かすべきではありません

CentOSを実行していて、ルーティングにip routeip ruleを使用しています。

私は現在ip ruleを持っています

from 10.8.23.0/28 table 1234

およびip route

default via 10.8.23.254 eth1
10.10.10.10 via 10.10.10.1 eth1
10.0.0.0/14 dev test-interface table 1234

私のip ruleip routeの2行目を成功させているようです。したがって、宛先IPが10.10.10.10であっても、送信元IPがtest-interfaceであれば、パケットは10.8.23.0/28経由で送信されます。

ソースIPがルールに一致する場合でも、10.10.10.10 via 10.10.10.1 eth1がìpルール `を無効にするようにするにはどうすればよいですか?それが理にかなっていることを願っています:)

ip route get 10.10.10.10をテストすると、次のようになります。

10.10.10.10 via 10.10.10.1 dev eth1  src 10.8.23.1

しかし、ip route get 10.10.10.10 src 10.0.0.13は私に:

10.10.10.10 via 10.10.10.254 dev test-interface  src 10.8.23.1

したがって、src IPは宛先IPよりも優先されます。

1
Kasper Nielsen

ip ruleは、(デフォルトのテーブルだけでなく)より多くのIPルーティングテーブルを作成/作成する方法であると簡単に考えることができます。

問題を解決するには、特定のルートケースを処理するために別のip ruleエントリを追加する必要があります。たとえば、次のコマンドを使用できます。

$ Sudo ip rule add to 10.10.10.10/32 lookup 123 priority 10

ここでは、10が最初のip ruleになるのに十分小さいと想定しています。これは、ip rule lsの出力によって異なります。優先度に従ってすべてのルールが表示されます(値が小さいほど優先度が高く、最初に表示されます)。

ip ruleで送信元と宛先のチェックを組み合わせる必要がある場合は、次を使用できます。

$ Sudo ip rule add from 10.8.23.0/28 to 10.10.10.10/32 lookup 123 priority 10

テーブル123には、次のような正しいルートが含まれている必要があります。

$ Sudo ip route add 10.10.10.10/32 via 10.10.10.1 table 123
1
Khaled