Linuxの現在のネットワーク構成状態をデータファイルやiptables-saveなどの一連のipコマンドに保存する方法はありますか?

Linuxの現在のネットワーク構成状態をデータファイルやiptables-saveなどの一連のipコマンドに保存する方法はありますか?

かなり多くの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のみが保存されます。これは一般的なユースケースには役立ちますが、ポリシールーティングのための追加のルーティングテーブルには役立ちません。必要に応じて特定のテーブル(たとえば)を指定できます。しかし、特に目立つのはmainip rule save table 220table 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
    

複数のネットワーク名前空間の自動化などの用途を見つけることができることを願っています。

おすすめ記事