web-dev-qa-db-ja.com

ネットワークが失われた後、失われたネットワークルートを復元する

インターネットへの下りがないロックダウン環境にサーバーがあり、2つのインターフェイス:物理eth0とvlan iface eth0.101

/ etc/network/interfacesには、次のように、vlan ifaceを介して特定のネットブロックへのルートを有効にする後処理コマンドが含まれています。

post-up ip route add 10.1.0.0/24 via 10.1.2.1 dev eth0.101

スイッチのフェイルオーバーテスト中に、ルートが失われたことに気付きました(RTNETLINK answers: Network is unreachable.)これは理にかなっています。ただし、ネットワークがオンラインに戻ると、ルートはインターフェースに再度追加されませんでした。

理由はわかります。インターフェースがdownに進まず、ネットへのアクセスが失われただけです。

失われた場所にネットワークへのルートを復元するようにインターフェイスを構成するにはどうすればよいですか?

私たちはDebian 9を使用しており、サービス定義があります[email protected]各インターフェイスで、ifupコマンドを使用してデバイスをアップ/ダウンします。しかし、繰り返しになりますが、デバイスとスイッチへのリンクは決して揺らぐことはありません。追加のsystemdオプションを利用できる場合に備えて、これについて言及します。

6
Danielle M.

ルーティングテーブルは、ルートを永続的にします(スイッチのフェイルオーバー後にルートが再び/手動で追加されるのを防ぐため)。まず、名前付きのルーティングテーブルを作成します。例として、「mgmt」を使用できます。

_echo '200 mgmt' >> /etc/iproute2/rt_tables
_

上記のソリューションの詳細については、上記のように、カーネルは多くのルーティングテーブルをサポートしており、これらを0〜255の番号が付いた一意の整数で参照します。テーブルには名前mgmtも定義されています。以下では、デフォルトの_/etc/iproute2/rt_tables_を見ていきます。いくつかの番号が予約されていることを示しています。この200という答えの選択は任意です。まだ使用されていない任意の番号を使用できます(1-252)。

_# reserved values
255     local
0       unspec
_

次に、(/ etc/network/interfacesの下にある)_post-up_ルールを次のように編集します

_  post-up ip route add 10.1.0.0/24 dev eth0.101 table mgmt
  post-up ip route add default via 10.1.2.1 dev eth0.101 table mgmt
  post-up ip rule add from 10.1.0.0/24 table mgmt
  post-up ip rule add to 10.1.0.0/24 table mgmt
_

または他の解決策として、バックグラウンドのbashスクリプトでルートの存在を確認し、欠落している場合は追加し直すことで、_ip route add 10.1.0.0/24 via 10.1.2.1 dev eth0.101_スクリプトはループまたはcronで設定できます

_ip route add 10.1.0.0/24 via 10.1.2.1 dev eth0.101
if [ $? -eq 0 ]; then
    echo "Route added again"
    sleep 10;
    command-to-call-the-script-again
else
    echo "Route exists"
    sleep 10;
    command-to-call-the-script-again
fi
_

出典: 恒久的なルートを追加する最良の方法は何ですか?

4
intika

あなたの説明は、適切な設定に関して少し曖昧です。「スイッチフェイルオーバー」の状況は、サーバーのネットデバイスにどのように影響しますか?リンクの喪失?パケット転送の単なる中断? LACPなどのある種の明示的な通知では、または他に何ですか?また、autoallow-hotplugにはどのインターフェースがありますか?物理デバイス?またはvlanインターフェース?または両方 ?

問題は、説明されている動作は、説明されている設定だけでは実際には意味がないということです。たとえば、単にリンクが失われただけでは、通常、ルートを削除したり、インターフェースを設定したりするだけでは不十分ですnless明示的に行う追加の設定がいくつかあります。

また、この追加のまだ言及されていないセットアップは、標準のifplugdまたはnetplugdにすることはできません。これらは、通常、ifupおよびifdownこれらのイベントでは、設定がvlanインターフェースと一致していれば、リンクが復旧したときにpost-upコマンドが実行されます。

Ifupdownのallow-hotplug設定はdevice hotplugに関連し、ケーブルのhotplugには関連しないことに注意してください。つまり、基本的にブート時(つまり、カーネルが初めてデバイスの存在を検出したとき)にのみ機能します。および/またはあなたのネットデバイスが例えばUSBドングルを使用して、サーバーのUSBポートにプラグを抜き差しする。

したがって、サーバー上で実行されているカスタムサービスがあり、プローブによってネットワークの損失を検出する可能性があることをお勧めします。定期的なpingまたはTCP接続が確立された可能性があります目的は、ネットワークの喪失を検出するとすぐにルートを削除しますが、そのプローブ接続が生き返ったときにルートを追加しません。

特定の質問に答えるには:

失われたネットワークへのルートを復元するために、しかし古い歌を引用するために、今や発見されたインターフェースをどのように設定できますか?

これは、アプリケーションが「ネットワーク接続が失われた」ことの意味と、それが戻ってきたことの意味によって異なります。インターフェースのリンク状態が十分な場合は、ifplugdまたはnetplugdまたは同等のもの(要件に合うか最も適している方)に依存することができます。post-upコマンドで十分です。 「ifupdown」vlanインターフェースに関連付けられている場合、それは常にマスターデバイスの上に常に存在するか、マスターの運命に従うように構成されます。

2
LL3