GNU/Linux >> Linux の 問題 >  >> Linux

アウトバウンド接続用に複数のデフォルト ゲートウェイを設定することはできますか?

自分で解決しました。Linux で実行できるネットワークに関する情報はほとんどないように思われるため、私の解決策を詳細に文書化して説明することにしました。これが私の最終設定です:

  • 3 つの NIC:eth0 (ワイヤ)、wlan0 (組み込みの wifi、弱い)、wlan1 (usb wifiadapter、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 を送信する場合) には、特別な処理が必要です (質問の大きな引用を参照してください)。

/etc/network/interfaces の最初のポストアップ 4 行 簡単で、説明はインターネットで見つけることができます。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 と入力できます 1 つの端末と ifdown eth0 で 別の。 ping ifdown eth0 のため、まだ動作するはずです eth0 に関連するデフォルト ルートを削除します 、発信トラフィックは wlan1 に切り替わります .

ポストダウン行により、関連するルート テーブルがルーティング ポリシー データベースから削除されることが保証されます (ip rule show ) インターフェースがダウンしたとき、すべてを整然と保つために。

残っている問題は、eth0 からプラグを抜くときです。 eth0 のデフォルト ルート まだそこにあり、発信トラフィックは失敗します。インターフェースを監視し、ifdown eth0 を実行する何かが必要です インターフェイスに問題がある場合 (つまり、NIC の障害や誰かがプラグを抜いているなど)。

最後のステップ :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 つのインターフェースのいずれかが機能している限り、サーバーはオンラインのままです。 サーバーへの接続には、eth0 の IP アドレスを使用できます。それが失敗した場合は、wlan1 または wlan0 の IP アドレスを使用できます。


Linux は、スクリプト化された回避策よりも優れたソリューションを提供します:アクティブ バックアップ ボンディングです。

この方法では、マシンには 1 つ しかありません IP アドレス (および 1 つの MAC アドレス) を変更し、1 つのインターフェイスが使用できなくなった場合にインターフェイスを自動的かつ透過的に切り替えます。 TCP 接続の中断はありません (内部 LAN にもインターネットにも)。

私はこの設定を使用して、ラップトップをドッキング ステーションから切断したときに、debian ラップトップで eth0 から wlan0 に自動的にフェールオーバーします。

私の /etc/network/interfaces:

# 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/Bonding を参照してください

そして (もちろん) https://www.kernel.org/doc/Documentation/networking/bonding.txt にある Linux カーネルのドキュメント


Linux
  1. 複数のウィンドウのパスワードを入力する方法は?

  2. 複数のファイルのダウンロードが完了するのを待ちますか?

  3. Udiskのデフォルトのマウントオプションを設定することは本当に不可能ですか?

  1. リモートMySQL接続用にCSFのIPをホワイトリストに登録

  2. 新しい irssi 接続にデフォルトのニックネームを設定するにはどうすればよいですか?

  3. ルート パーティションとホーム パーティションに異なるファイル システムを設定し、別々の物理デバイスに配置することは可能ですか?

  1. 特定のポートと期間の TCP 接続の総数を IP で調べるにはどうすればよいですか?

  2. マルチ IP ホストでのアウトバウンド接続の IP アドレスの指定

  3. 複数の SSH サーバーを管理するための Clusterssh の代替手段