同じサブネットに複数のNIC(eth0とwlan0)があり、NICの1つでエラーが発生した場合は、ホスト上のアプリケーションのバックアップとして機能したいと思います。これを行うために、追加のルーティングテーブルを作成しました。次のようになります/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_metry_routing_on_a_server_with_multiple_default_gateways.html
私が望むのは、デフォルトのルーティングテーブルに複数のデフォルトゲートウェイ(1つはオンeth0
、1つはオフ)があり、デフォルトで動作wlan0
が停止した場合はデフォルトゲートウェイに移動することです。eth0
wlan0
eth0
それは可能ですか?そのような機能を実装するにはどうすればよいですか?
答え1
自分で解決しました。私はLinuxで行うことができるネットワーク操作に関する情報がほとんどないようで、私の解決策を詳しく文書化して説明することにしました。これが私の最終設定です。
- 3つのネットワークカード:eth0(有線)、wlan0(内蔵Wi-Fi、弱い信号)、wlan1(USB Wi-Fiアダプタ、wlan0より強い信号)
- これらはすべて同じサブネット上にあり、それぞれに一意の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したい場合)には特別な処理が必要です(質問の大きな引用符を参照)。
最初の4つのポストアップラインは/etc/network/interfaces
シンプルで、インターネットで説明できます。 5番目で最後のポストアップラインは魔法を引き起こすラインです。
post-up ip r add default via 192.168.178.1 metric 100 dev eth0
このバックラインのルーティングテーブルを指定していません。ルーティングテーブルを指定しないと、表示したmain
ルーティングテーブルに情報が保存されますip rule show
。このポストラインは、デフォルトパスを「デフォルト」パステーブルに配置します。このルートは、着信トラフィックに対する応答ではなく、ローカルで生成されたトラフィックに使用されます。 (たとえば、サーバーのMTAは電子メールを送信しようとします。)
3 つのインターフェイスすべてのメトリックは異なりますが、デフォルトのルーティング テーブルにデフォルトのルートを配置します。ルーティングmain
テーブルを見てみましょうip route show
。
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
。
この設定では、ping 8.8.8.8
ある端末とifdown eth0
別の端末に入力できます。発信トラフィックがに切り替わるため、引き続き機能するping
必要があります。ifdown eth0
eth0
wlan1
ポストダウンラインは、ip rule show
すべてをきれいに保つために、インターフェイスがダウンしたときに関連するルーティングテーブルがルーティングポリシーデータベース()から削除されるようにします。
残りの問題は、プライマリeth0
パスからプラグを抜くときにパスがeth0
まだ存在し、発信トラフィックが失敗することです。インターフェイスを監視し、ifdown eth0
インターフェイスに問題がある場合(たとえば、ネットワークカードに問題がある場合、または誰かがプラグを抜く場合)、アクションを実行するためのアクションが必要です。
最後のステップ:入力するifplugd
。これは、インターフェイスを監視し、ifup/ifdown
プラグが抜かれているときやWi-Fi接続に問題があるときに実行されるデーモンです/etc/default/ifplugd
。
INTERFACES="eth0 wlan0 wlan1"
HOTPLUG_INTERFACES=""
ARGS="-q -f -u0 -d10 -w -I"
SUSPEND_ACTION="stop"
プラグを抜くと、発信eth0
トラフィックがに切り替わりますwlan1
。プラグを差し込むと、発信トラフィックが再び切り替わりますeth0
。3 つのインターフェイスのいずれかが正常に動作している限り、サーバーはオンラインのままです。サーバーに接続するにはIPアドレスeth0を使用し、接続に失敗した場合はwlan1またはwlan0 IPアドレスを使用します。
答え2
Linuxは、スクリプトソリューションよりも優れたソリューションである予防的バックアップバインディングを提供します。
このようにして、あなたのマシンは次の情報だけを持っています。一つIPアドレス(およびMACアドレス)とインターフェイスが利用できない場合は、インターフェイスを自動的に透過的に切り替えます。 TCP接続(内部LANまたはインターネット)は中断されません。
私はこの設定を使用してドックからノートブックを切断すると、Debianノートブックのeth0からwlan0への自動フェイルオーバーを実行します。
私の/etc/network/インターフェース:
# The primary network interface
allow-hotplug eth0
iface eth0 inet manual
bond-master bond0
bond-primary eth0
# The secondary network interface
allow-hotplug wlan0
iface wlan0 inet manual
pre-up sleep 5
wpa-conf /etc/wpa_supplicant.conf
bond-master bond0
bond-primary eth0
# The bonding interface
allow-hotplug bond0
iface bond0 inet dhcp
bond-slaves eth0 wlan0
bond-primary eth0
bond-mode active-backup
bond-miimon 10
bond_downdelay 10
bond_updelay 4000
複数のWLANデバイスを含むようにこの設定を簡単に拡張できます。オプションを(最速リンク自動選択)
primary_reselect
に設定するとbetter
便利です。
詳細については、次を参照してください。https://wiki.linuxfoundation.org/networking/bondingそしてhttps://wiki.debian.org/ボンディング
(もちろん)Linuxカーネル文書もあります:https://www.kernel.org/doc/Documentation/networking/bonding.txt