2つのイーサネットポートを備えたマルチホームホストとUSB接続可能なセルラーモデムがあります。イーサネットインターフェイスは、基本的なルーティングテーブルで一般的な方法で設定され、インターフェイスの1つに1つのデフォルトパスのみが割り当てられます。
[/]# ip route show table main
default via 192.168.4.1 dev eth0 metric 50
192.168.2.0/24 dev eth1 scope link src 192.168.2.10
192.168.4.0/22 dev eth0 scope link src 192.168.4.73
別の「usbcell」ルーティングテーブルには、セルインターフェイスに割り当てられた別のデフォルトパスがあります。
[/]# ip route show table usbcell
default via 10.26.128.2 dev usbcell src 10.26.128.1
IP ルールは、値 0x100 で示されるすべてのパケットに usbcell ルーティングテーブルを使用するように指示します。これらのパケットはアプリケーション内のソケットレベルで表示されます。また、リバースパスフィルタリングによってUSBcellトラフィックが破棄されるのを防ぐために、ソースベースのルーティングルールを追加しました。
[/]# ip rule
0: from all lookup local
97: from 10.26.128.1 lookup usbcell
100: from all fwmark 0x100 lookup usbcell
32766: from all lookup main
32767: from all lookup default
セルインターフェイスには、モデムハードウェアによって動的に提供されるIP、ネットマスク、およびゲートウェイがあります。このサブネットは通信会社や当社の所有ではないため、イーサネットポートに接続されている他のネットワークとの競合を避けたいと思います。セルインターフェイスが別々のルーティングテーブルにあるので、これは簡単です。ただし、残念ながら、ifupを介してセルインターフェイスが表示されるたびに、そのインターフェイスへのローカルパスがプライマリテーブルに追加されます。これにより、タグ付きパケットだけでなく、そのサブネットに向けられたすべてのパケットもセルインターフェイスにルーティングされます。ローカルパスを削除すると、期待どおりに機能します。
usbcellが起動したときの基本テーブル:
[/]# ip route show table main
default via 192.168.4.1 dev eth0 metric 50
10.26.128.0/17 dev usbcell scope link src 10.26.128.1 ## How do I prevent this? ##
192.168.2.0/24 dev eth1 scope link src 192.168.2.10
192.168.4.0/22 dev eth0 scope link src 192.168.4.73
usbcellインタフェースが表示されたときにこのローカルパスがベーステーブルに追加されるのを防ぐ方法はありますか?
10.26.128.0/17 dev usbcell scope link src 10.26.128.1
この例では、サブネット10.26.128.0/17にバインドされたタグ付けされていないパケットをプライマリテーブルベースパス(eth0)にルーティングしようとしています。
答え1
通常、新しいアドレスが接続されたLANパスを自動的に生成するのを防ぐために、そのアドレスをタグ付きインターフェイスに追加する必要がありますnoprefixroute
(使用しない)。IP ルート 25.8テスト用):
ip address add 10.26.128.1/17 dev usbcell noprefixroute
これにより、インターフェイスにアドレスが追加されますが、インターフェイスに自動LANパスが作成されることはありません。基本インタフェースを呼び出すときのテーブルです。
これは実際には後でこのコマンドを実行するのを防ぎます。
# ip route add table usbcell default via 10.26.128.2 dev usbcell src 10.26.128.1
Error: Nexthop has invalid gateway.
以前に検出されなかった不足しているパスがあるため(OPシナリオでは、すべてが期待どおりに機能していたことに驚きました)、手動で追加する必要があります。それ以外の場合、テーブルは絶対に一致しません。だから結局:
ip route add table usbcell 10.26.128.2/32 dev usbcell # or 10.26.128.0/17 if you prefer
ip route add table usbcell default via 10.26.128.2 dev usbcell src 10.26.128.1
または usbcell デバイスが稼働している場合プロキシARPすべてのアドレス(該当するデバイスで一般的です)に対してこの方法も機能します(ただし、ホストに大規模なARPテーブルが作成され始めます)。
ip route add table usbcell default dev usbcell src 10.26.128.1
バックエンドを調整できる場合は、そこで簡単に変更できます。例えば上下ならバックエンドは次の場所にあります/etc/network/interfaces
。
iface usbcell inet manual
pre-up ip addr add 10.26.128.1/17 dev usbcell noprefixroute
down ip addr del 10.26.128.1/17 dev usbcell noprefixroute
カスタムパスを追加することもできます。
pre-up ip rule add prio 100 fwmark 0x100 lookup usbcell
pre-up ip rule add prio 97 from 10.26.128.1 lookup usbcell
up ip route add table usbcell 10.26.128.2/32 dev usbcell
up ip route add default via 10.26.128.2 dev usbcell src 10.26.128.1
down ip rule del prio 97
down ip rule del prio 100
これができない場合でも、カーネルによって自動的に追加されたパスが使用されないようにパスをオーバーライドできます。指標がある場合は、次の手順を実行してください。
ip route add 10.26.128.0/17 via 192.168.4.1 dev eth0
ただし、何もないため(つまり、最も高い優先順位の指標0)、どちらも同じ優先順位を持ち、これは定義されていません。優先順位が不明な場合を除き、このパスを追加することはできません。後ろにカーネルが次のように文句を言うので、インターフェイスは動作しています。
RTNETLINK answers: File exists
したがって、2つの半分のパスを追加すると(OpenVPNを使用するときに2つの半分のデフォルトパスを追加するのと同じ--redirect-gateway def1
)、このパスを上書きできます。
ip route add 10.26.128.0/18 via 192.168.4.1 dev eth0
ip route add 10.26.192.0/18 via 192.168.4.1 dev eth0
一緒に彼らはまったく同じ範囲10.26.128.0/17に一致します。 10.26.128.0/17よりも具体的なので、常に優先します。もしそうなら、忘れないでください。イーサネット0管理上閉鎖されると、これらのパスは消えてしまいますので、再度追加する必要があります。したがって、設定構成に追加する必要があります。イーサネット0。