インターネットへの下りがないロックダウン環境にサーバーがあり、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オプションを利用できる場合に備えて、これについて言及します。
ルーティングテーブルは、ルートを永続的にします(スイッチのフェイルオーバー後にルートが再び/手動で追加されるのを防ぐため)。まず、名前付きのルーティングテーブルを作成します。例として、「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
_
あなたの説明は、適切な設定に関して少し曖昧です。「スイッチフェイルオーバー」の状況は、サーバーのネットデバイスにどのように影響しますか?リンクの喪失?パケット転送の単なる中断? LACPなどのある種の明示的な通知では、または他に何ですか?また、auto
とallow-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インターフェースに関連付けられている場合、それは常にマスターデバイスの上に常に存在するか、マスターの運命に従うように構成されます。