質問: アウトバウンド接続用に複数のデフォルトゲートウェイを設定することは可能ですか? 同じサブネット内に複数のnic(eth0およびwlan0)を配置し、いずれかのnicに障害が発生した場合にホスト上のアプリケーションのバックアップとして機能させたい。このため、追加のルーティングテーブルを作成しました。これは/etc/network/interfacesの外観です。iface eth0 inet static address 192.168.178.2 netmask 255.255.255.0 dns-nameserver 8.8.8.8 8.8.4.4 post-up ip route add 192.168.178.0/24 dev eth0 src 192.168.178.2 post-up ip route add default via 192.168.178.1 dev eth0 post-up ip rule add from 192.168.178.2/32 post-up ip rule add to 192.168.178.2/32 iface wlan0 inet static wpa-conf /etc/wpa_supplicant.conf wireless-essid xyz address 192.168.178.3 netmask 255.255.255.0 dns-nameserver 8.8.8.8 8.8.4.4 post-up ip route add 192.168.178.0/24 dev wlan0 src 192.168.178.3 table rt2 post-up ip route add default via 192.168.178.1 dev wlan0 table rt2 post-up ip rule add from 192.168.178.3/32 table rt2 post-up ip rule add to 192.168.178.3/32 table rt2 これはホストへの接続で機能します。インターフェイスの1つに障害が発生した場合でも、ホストにsshで接続できます。ただし、eth0がダウンしている場合、ホスト上のアプリケーションは外部への接続を初期化できません。それが私の問題です。そのトピックを調査したところ、次の興味深い情報が見つかりました。 プログラムが送信接続を開始するとき、ワイルドカード送信元アドレス(0.0.0.0)を使用するのは通常のことであり、関連する宛先アドレスに到達可能であれば、どのインターフェースを使用するかについての優先順位はありません。これは、ルーティングの決定が行われるまで、特定の送信元アドレスに置き換えられません。したがって、そのような接続に関連付けられたトラフィックは、上記のポリシールールのいずれにも一致せず、新しく追加されたルーティングテーブルにも転送されません。それ以外の点では通常の構成を想定すると、代わりにメインルーティングテーブルに分類されます。 http://www.microhowto.info/howto/ensure_symmetric_routing_on_a_server_with_multiple_default_gateways.html メインルートテーブルに複数のデフォルトゲートウェイ(eth0に1つとwlan0に1つ)があり、デフォルトでeth0経由でデフォルトゲートウェイに移動するために必要なのはwlan0 eth0がダウンしている場合。それは可能ですか?このような機能を実現するにはどうすればよいですか?
回答: 自分で解決しました。 linuxで実行できるネットワーキングに関する情報はほとんどないようです。そのため、私のソリューションを詳細に文書化して説明することにしました。これは私の最終的なセットアップです: nic 3枚:eth0(ワイヤー)、wlan0(内蔵wifi、弱い)、wlan1(usb wifiアダプター、wlan0より強い信号) すべてが1つのサブネット上にあり、それぞれに独自のipアドレスがあります。 eth0は、デフォルトで着信トラフィックと発信トラフィックの両方に使用する必要があります。 eth0が失敗した場合は、wlan1を使用する必要があります。 wlan1が失敗した場合は、wlan0を使用する必要があります。 最初のステップ:/etc/iproute2/rt_tablesのすべてのインターフェースに新しいルートテーブルを作成します。それらをrt1、rt2、rt3と呼びましょう# # reserved values # 255 local 254 main 253 default 0 unspec # # local # #1 inr.ruhep 1 rt1 2 rt2 3 rt3 2番目のステップ:/etc/network/interfacesのネットワーク構成。これは主要な部分であり、私はできる限り詳しく説明しようとします。auto eth0 wlan0 allow-hotplug wlan1 iface lo inet loopback iface eth0 inet static address 192.168.178.99 netmask 255.255.255.0 dns-nameserver 8.8.8.8 8.8.4.4 post-up ip route add 192.168.178.0/24 dev eth0 src 192.168.178.99 table rt1 post-up ip route add default via 192.168.178.1 dev eth0 table rt1 post-up ip rule add from 192.168.178.99/32 table rt1 post-up ip rule add to 192.168.178.99/32 table rt1 post-up ip route add default via 192.168.178.1 metric 100 dev eth0 post-down ip rule del from 0/0 to 0/0 table rt1 post-down ip rule del from 0/0 to 0/0 table rt1 iface wlan0 inet static wpa-conf /etc/wpa_supplicant.conf wireless-essid xyz address 192.168.178.97 netmask 255.255.255.0 dns-nameserver 8.8.8.8 8.8.4.4 post-up ip route add 192.168.178.0/24 dev wlan0 src 192.168.178.97 table rt2 post-up ip route add default via 192.168.178.1 dev wlan0 table rt2 post-up ip rule add from 192.168.178.97/32 table rt2 post-up ip rule add to 192.168.178.97/32 table rt2 post-up ip route add default via 192.168.178.1 metric 102 dev wlan0 post-down ip rule del from 0/0 to 0/0 table rt2 post-down ip rule del from 0/0 to 0/0 table rt2 iface wlan1 inet static wpa-conf /etc/wpa_supplicant.conf wireless-essid xyz address 192.168.178.98 netmask 255.255.255.0 dns-nameserver 8.8.8.8 8.8.4.4 post-up ip route add 192.168.178.0/24 dev wlan1 src 192.168.178.98 table rt3 post-up ip route add default via 192.168.178.1 dev wlan1 table rt3 post-up ip rule add from 192.168.178.98/32 table rt3 post-up ip rule add to 192.168.178.98/32 table rt3 post-up ip route add default via 192.168.178.1 metric 101 dev wlan1 post-down ip rule del from 0/0 to 0/0 table rt3 post-down ip rule del from 0/0 to 0/0 table rt3 ip rule showと入力すると、次のように表示されます。0: from all lookup local 32756: from all to 192.168.178.98 lookup rt3 32757: from 192.168.178.98 lookup rt3 32758: from all to 192.168.178.99 lookup rt1 32759: from 192.168.178.99 lookup rt1 32762: from all to 192.168.178.97 lookup rt2 32763: from 192.168.178.97 lookup rt2 32766: from all lookup main 32767: from all lookup default これは、ipアドレス "192.168.178.99"から送受信されるトラフィックがrt1ルートテーブルを使用することを示しています。ここまでは順調ですね。ただし、ローカルで生成されたトラフィック(たとえば、マシンから別の場所にpingまたはsshを実行したい)には特別な処理が必要です(質問の大きな引用を参照)。/etc/network/interfacesの最初の4つのポストアップ行は簡単で、説明はインターネットで見つけることができます。最後の5番目のポストアップ行は、魔法を起こさせるものです。post-up ip r add default via 192.168.178.1 metric 100 dev eth0 このポストアップラインのルートテーブルを指定していないことに注意してください。ルートテーブルを指定しない場合、情報はip rule showで確認したmainルートテーブルに保存されます。このポストアップ行は、着信トラフィックへの応答ではないローカルで生成されたトラフィックに使用される「メイン」ルートテーブルにデフォルトルートを配置します。 (たとえば、サーバー上のmtaが電子メールを送信しようとしています。)3つのインターフェースはすべて、メトリックは異なりますが、メインルートテーブルにデフォルトルートを配置します。 ip route showを含むmainルートテーブルを見てみましょう。default via 192.168.178.1 dev eth0 metric 100 default via 192.168.178.1 dev wlan1 metric 101 default via 192.168.178.1 dev wlan0 metric 102 192.168.178.0/24 dev wlan0 proto kernel scope link src 192.168.178.97 192.168.178.0/24 dev eth0 proto kernel scope link src 192.168.178.99 192.168.178.0/24 dev wlan1 proto kernel scope link src 192.168.178.98 メトリックは異なりますが、メインルートテーブルには3つのデフォルトルートがあることがわかります。メトリック番号が小さいほど優先順位が高いため、最高の優先順位はeth0、次にwlan1、次にwlan0です。 eth0のメトリックが最も低いため、eth0が稼働している限り、これがデフォルトルートになります。 eth0がダウンすると、送信トラフィックはwlan1に切り替わります。この設定で、1つのターミナルにping 8.8.8.8を入力し、別のターミナルにifdown eth0を入力できます。 pingは引き続き機能します。これは、ifdown eth0がeth0に関連するデフォルトルートを削除するため、送信トラフィックがwlan1に切り替わるためです。post-down行は、すべてが整頓された状態を保つために、インターフェイスがダウンしたときに、関連するルートテーブルがルーティングポリシーデータベース(ip rule show)から確実に削除されるようにします。残っている問題は、eth0からプラグを抜いたときに、eth0のデフォルトルートがまだ存在し、送信トラフィックが失敗することです。インターフェースを監視し、インターフェースに問題がある場合はifdown eth0を実行する必要があります(nic失敗または誰かがプラグを抜いて))。最後のステップ:ifplugdと入力します。これは、インターフェースを監視し、プラグを抜いた場合、またはwifi接続に問題がある場合にifup/ifdownを実行するデーモンです/etc/default/ifplugd:interfaces="eth0 wlan0 wlan1" hotplug_interfaces="" args="-q -f -u0 -d10 -w -i" suspend_action="stop" プラグインをeth0でプルすると、送信トラフィックがwlan1に切り替わり、プラグを元に戻すと、送信トラフィックがeth0に切り替わります。 つのインターフェースのいずれかが機能している限り、サーバーはオンラインのままです。サーバーに接続するには、eth0のipアドレスを使用できます。これに失敗した場合は、wlan1またはwlan0のipアドレスを使用できます。