2つのネットワークカードを持つコンピュータがあり、そのうちの1つはイーサリアム一つ無線LAN。
- 無線LAN10.0.0.0/24に位置
- イーサリアム192.168.0.0/16に位置
カーネルルーティングテーブルは次のとおりです。
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 100 0 0 enp4s0f0
0.0.0.0 10.0.0.1 0.0.0.0 UG 600 0 0 wlp3s0
10.0.0.0 0.0.0.0 255.255.255.0 U 600 0 0 wlp3s0
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 enp4s0f0
192.168.0.0 0.0.0.0 255.255.0.0 U 100 0 0 enp4s0f0
質問:
- カーネルは使用するデフォルトのgwを選択しますか、それとも両方に送信しますか?
- 選択した場合、どのように選択されますか?
- 選択に影響を与えたり選択を行うための最も効果的な方法は何ですか?
答え1
この場合、カーネルはメトリックに基づいて選択されます。つまり、低いメトリックが優先されます。 (パスの選択は、経路特異性、管理コスト、指標を順番に基準とします。2つのデフォルトゲートウェイの特異性と管理コストは同じです。)
選択を変更する最善の方法は、パスメトリックを変更することです。
答え2
私がこの記事を書く理由は、それぞれデュアルネットワークカードがあり、それぞれ次のように構成された2つの異なるコンピュータがあるからです。
auto enp6s0
iface enp6s0 inet dhcp
address 192.168.20.36
netmask 255.255.255.0
gateway 192.168.20.1
auto enp7s0
iface enp7s0 inet static
address 10.10.10.3
netmask 255.255.255.0
gateway 192.168.20.1
どちらも192.168.* LAN上の他のコンピュータと10.10.*のIOTガジェットに接続できますが、どちらもインターネットにアクセスできません。
定義されたポリシーはなく、Routeコマンドは、インターネット接続のないデフォルトゲートウェイが10.10 *ネットワークに接続されているネットワークカードを使用することを除いて、メトリックが同じであることを示しています。
明らかに(経験的には保証できません!)カーネルに良いオプションがない場合は、最初に見つけたオプションを使用してください。 /etc/network/interfaces で 192.168.* への参照が 10.10.* への参照の前にリストされるように /etc/network/interfaces を編集すると、問題が解決したようです。
答え3
実験によると、Linuxは最後に追加した(同等の)デフォルトゲートウェイを使用しているようです。