かなり多くのipコマンドを実行して、最終的に希望のネットワーク構成を取得しましたが、コマンド履歴を保存しなかったとします。
ファイルやスクリプトからコマンドを再構築するのではなく、後で復元できるように、iptables-saveやmysqldumpなどのネットワーク設定の状態をダンプ/保存する方法はありますか?
Windowsでも同様の状況が発生する可能性があることがわかりましたnetnsh
(これが私が探しているソリューションであるかどうかはわかりません。経験したことはありませんが、ネットワーク構成の状態をダンプするようです)。
ただし、Linux(特にCentOS / RHEL)ではオプションが見つかりません。
ベストアンサー1
iproute2コマンドを使用してアドレス、パス、およびルールを保存する機能がいくつかサポートされていますip
。
明らかな理由で、リンクの場合、保存可能性を想像できますが、そうではありません。一部すべてではなく、仮想リンク(veth-pairリンクの一方とは異なるネットワークネームスペースにわたって対応するピアを「保存」しますか?発生しません...)、またはVLANを含むブリッジとそのポート設定を保存する機能など。 、現在存在していないようです。
既存のコマンドは次のとおりです。
ip address save
ip address restore
ip route save
ip route restore
ip rule save
ip rule restore
ダンプ形式はバイナリであり、コマンドはttyに保存するか、ttyから復元することを拒否します。
ルーティングの前にアドレスを復元することをお勧めします(規則は任意の順序で実行できます)。そうしないと、保存されたルートがアドレスによって異なるルーティング条件を満たすことができないため、ほとんどの保存されたルートは復元されません。警告:もちろん、以下のすべてのリフレッシュコマンドはリカバリが完了するまでネットワーク接続を中断する可能性があるため、リモートネットワークアクセスは避ける必要があります(または他のネットワークネームスペースで実行する必要があります)。
ip address save
/ip address restore
したがって、インターフェースを持つ単純なネットワーク名前空間設定
orig
のアドレスをdummy0
名前空間にコピーするには(例を簡単にするため)、次の手順を実行しますcopy
。ip netns add orig ip netns exec orig sh << 'EOF' ip link add dummy0 type dummy ip address add dev dummy0 192.0.2.2/24 ip address add dev dummy0 2001:db8:0:1::2/64 ip link set dummy0 up ip address save > /tmp/address EOF ip netns add copy ip netns exec copy sh << 'EOF' ip link add dummy0 type dummy ip link set dummy0 up ip address restore < /tmp/address ip -br address EOF
たとえば、次のような結果が表示されます。
lo DOWN dummy0 UNKNOWN 192.0.2.2/24 2001:db8:0:1::2/64 fe80::68e3:bdff:feb0:6e85/64 fe80::e823:d1ff:fe8c:3a15/64
注:古い自動IPv6リンク - ローカル(
scope link
)アドレスも保存され復元され、リンク/イーサネットアドレス(ここorig
6a:e3:bd:b0:6e:85
)はIPv6リンクに基づいているため、追加(誤った)IPv6リンク - ローカルアドレスが生成されます。アドレスは保存されないため復元されません(copy
他の任意のMACea:23:d1:8c:3a:15
のアドレスはここに保存されますdummy0
)。したがって、実際に重要な場合は、これらの仮想インターフェイスのMACアドレスを別々に保存およびコピーするか、物理インターフェイスのアドレスの一部をクリーンアップする必要があります。環境が「きれいな状態」でない場合は、以前のアドレスが残るのを防ぐために、復元する前にすべてのアドレスをフラッシュする必要があります。以下のパスとは異なり、これらすべてをフラッシュする簡単な方法が見つかりません。一つインタフェースを宣言せずにコマンドを実行します。それらを使う二つ十分に良いはずです:
ip address flush permanent ip address flush temporary
同じ原則を使用してパスとルールを保存および復元することもできます。
ip route save
/ip route restore
トリックがあります。テーブル
ip route save
のみが保存されます。これは一般的なユースケースには役立ちますが、ポリシールーティングのための追加のルーティングテーブルには役立ちません。必要に応じて特定のテーブル(たとえば)を指定できます。しかし、特に目立つのはmain
ip rule save table 220
table 0
みんなテーブルは次のようにip route save table 0
保存されます。みんなip route show table 0
一度(表示されているように、そのパスが属する各パスのテーブルを含む)復元する前に、既存のパスをすべて更新することをお勧めします。ip route flush table 0 all
値を事前に知らずにルーティングテーブルを保存できることを示す例:
# ip route add table 220 unreachable 10.0.0.0/8 metric 9999 # ip route show table 220 unreachable 10.0.0.0/8 metric 9999 # ip route save table 0 > /tmp/route # ip route flush table 0 all # ip route show table 220 # # ip route restore table 0 < /tmp/route # ip route show table 220 unreachable 10.0.0.0/8 metric 9999
もちろん、別のテーブル(別名テーブル254を含む
main
)のすべてのパスも保存および復元されます。ip rule save
/ip rule restore
以前のリフレッシュがない場合は、不平を言わずに重複エントリを追加し、リフレッシュルールはルール優先順位0をリフレッシュしないため、明示的に削除する必要があるため、
rule priority 0
これは面倒です。ip rule flush ip rule delete priority 0
したがって、保存して復元するには、次の手順を実行します。
ip rule save > /tmp/rule
[...] ただ削除したり、他の環境に切り替えたりするなどの操作を行います。
ip rule flush ip rule delete priority 0 ip rule restore < /tmp/rule
複数のネットワーク名前空間の自動化などの用途を見つけることができることを願っています。