かなりの数のipコマンドを実行して、必要なネットワーク構成になってしまったが、コマンド履歴を保存しなかったとしましょう。
ファイルまたはスクリプトのコマンドを再度書き換える代わりに、iptables-saveやmysqldumpなどのネットワーク構成の状態をダンプ/保存する方法はありますか?後で復元できますか?
Windowsでnetnsh
を使用しても同様のことが可能であることがわかります(それがまさに私が探している種類のソリューションであるかどうかはわかりません。
しかし、Linux(特にCentOS/RHEL)でオプションを見つけることができません。
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
_
たとえば、複数のネットワーク名前空間での自動化など、これの使用法を見つけていただければ幸いです。
この 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
ネットワーク構成は/ etc/sysconfig/network-scripts/ifconfig-(interface)や/etc/sysconfig/network、/etc/resolv.confなどのファイルに保存する必要があります。これらのファイルを変更して再起動するだけです。ネットワークサービスではなく、その場で変更を加えます。ルートやIPの変更など、その場で行った変更は、システムを再起動すると失われます。