web-dev-qa-db-ja.com

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

かなりの数のipコマンドを実行して、必要なネットワーク構成になってしまったが、コマンド履歴を保存しなかったとしましょう。

ファイルまたはスクリプトのコマンドを再度書き換える代わりに、iptables-saveやmysqldumpなどのネットワーク構成の状態をダンプ/保存する方法はありますか?後で復元できますか?

Windowsでnetnshを使用しても同様のことが可能であることがわかります(それがまさに私が探している種類のソリューションであるかどうかはわかりません。

しかし、Linux(特にCentOS/RHEL)でオプションを見つけることができません。

3
GP92

Iproute2のipコマンドを使用して、アドレス、ルート、ルールを保存するためのサポートがいくつかあります。

明らかな理由で、これはリンクには存在しません。たとえsome仮想リンクをすべて保存する可能性を想像できたとしても(vethペアリンクの片側をピアと "保存"することではありません)他のネットワーク名前空間全体で発生することはありませんか?)、または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_

    したがって、_dummy0_インターフェースを持つ単純なネットワーク名前空間origの構成からアドレスをコピーするには(例をシンプルにするため)、名前空間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_)アドレスも保存されたため、復元され、追加の(および誤った)IPv6リンクローカルアドレスが発生します。これは、リンク/エーテルアドレス(ここでorig IPv6リンクローカルアドレスに基づく_6a:e3:bd:b0:6e:85_)は保存されないため、復元されません(ここでcopyに他のランダムMACを残します_ea:23:d1:8c:3a:15_ on _dummy0_)。そのため、実際に重要な場合は、このような仮想インターフェイスのMACアドレスを個別に保存してコピーするか、物理インターフェイスの一部のアドレスの後でプルーニングするように注意する必要があります。

    環境が「白紙の状態」でなかった場合、古いアドレスを残さないように、復元する前にすべてのアドレスをフラッシュする必要があります。以下のルートとは逆に、インターフェイスを指定せずにoneコマンドですべてをフラッシュする簡単な方法を見つけることができませんでした。それらを使用するtwoで十分です:

    _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_はallテーブルを表し、_ip route save table 0_を使用すると、それらのallが保存されます(ルートごとに、テーブルが属しているルートも含めて、 _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
    _

たとえば、複数のネットワーク名前空間での自動化など、これの使用法を見つけていただければ幸いです。

2
A.B

この github リポジトリにスクリプトがあります。このスクリプトにより、現在のネットワーク構成コマンドをbashスクリプトに保存できます。

./save_my_network.py

このスクリプトを実行すると、現在のディレクトリにnetwork.saveファイルが見つかります

cat network.save

#!/bin/bash
ip addr add 192.168.1.97/24 dev wlan0
echo 0x1003 > /sys/class/net/wlan0/flags
ip addr add 172.17.0.1/16 dev docker0
ip addr add 172.19.0.1/24 dev docker0
ip addr add 172.18.0.1/24 dev docker0
ip addr add 172.20.0.1/16 dev docker0
echo 0x1002 > /sys/class/net/docker0/flags
ip addr add 127.0.0.1/8 dev lo
echo 0x9 > /sys/class/net/lo/flags
ip addr add 10.8.0.15/24 dev tun0
echo 0x1091 > /sys/class/net/tun0/flags
ip route add 0.0.0.0/1 via 10.8.0.1 dev tun0 
ip route add default via 192.168.1.1 dev wlan0 proto dhcp metric 600 
ip route add 10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.15 
ip route add 94.130.24.225 via 192.168.1.1 dev wlan0 
ip route add 128.0.0.0/1 via 10.8.0.1 dev tun0 
ip route add 192.168.1.0/24 dev wlan0 proto kernel scope link src 192.168.1.97 metric 600 

network.saveの実行権限を忘れないでください

chmod +x network.save

2
Rasam

ネットワーク構成は/ etc/sysconfig/network-scripts/ifconfig-(interface)や/etc/sysconfig/network、/etc/resolv.confなどのファイルに保存する必要があります。これらのファイルを変更して再起動するだけです。ネットワークサービスではなく、その場で変更を加えます。ルートやIPの変更など、その場で行った変更は、システムを再起動すると失われます。

0
L.Ray