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( orig6a:e3:bd:b0:6e:85IPv6 链路本地地址未保存,因此未恢复(此处保留在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
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
使用 iproute2 的
ip
命令确实支持保存地址、路由和规则。出于显而易见的原因,链接不存在这种情况,即使可以想象保存一些虚拟链接的可能性,而不是全部(“保存” veth-pair 链接的单边与它的对等点跨越另一个网络命名空间?不会发生...),或者能够保存网桥和网桥的端口配置,包括vlan等,目前似乎不存在。
现有的命令是:
转储格式是二进制的,命令将拒绝保存到 tty 或从 tty 恢复。
我建议在路由之前恢复地址(规则可以按任何顺序完成),否则大多数保存的路由将无法恢复,因为它们不能满足取决于地址的路由条件。警告:当然,在还原完成之前,下面的所有刷新命令都可能会中断网络连接,因此应避免远程网络访问(或在其他网络命名空间中完成)。
ip address save
/ip address restore
orig
因此,要将具有dummy0
接口(以保持示例简单)的简单网络名称空间的配置中的地址复制到名称空间copy
:将给出例如这个结果:
注意:先前的自动 IPv6 本地链路
scope link
(orig
6a:e3:bd:b0:6e:85
IPv6 链路本地地址未保存,因此未恢复(此处保留在copy
其他随机 MACea:23:d1:8c:3a:15
上dummy0
)。因此,如果真的很重要,实际上应该注意单独保存和复制这些虚拟接口的 MAC 地址,或者在物理接口的一些地址之后修剪。如果环境不是“干净的石板”,您可能应该在恢复它们之前刷新所有地址以避免留下旧地址。与下面的路由相反,我找不到一种简单的方法来在一个命令中刷新所有路由,而无需声明接口。使用这两个应该足够好:
同样的原理,可以保存和恢复路由和规则:
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
)。在恢复路由之前,最好刷新所有现有路由:无需事先知道其值即可保存任何路由表的示例:
当然,来自其他表的所有路由,包括表 254 aka
main
,也会被保存和恢复。ip rule save
/ip rule restore
这也很棘手,因为如果在它之前不刷新它会添加重复而不抱怨,并且刷新规则永远不会刷新规则 prio 0,因此
rule priority 0
必须明确删除:所以要保存和恢复:
[...] 只是删除或切换到其他环境等。
我希望你能找到它的一些用法,例如用于多个网络命名空间的自动化。
这个github存储库中有一个脚本。通过此脚本,您可以将当前的网络配置命令保存到 bash 脚本中。
./save_my_network.py
执行此脚本后,您可以
network.save
在当前目录中找到一个文件不要忘记执行权限
network.save
chmod +x network.save
您的网络配置应保存在 /etc/sysconfig/network-scripts/ifconfig-(interface) 和 /etc/sysconfig/network、/etc/resolv.conf 等文件中。您只需修改这些文件并重新启动网络服务,而不是即时进行更改。当您的系统重新启动时,您即时进行的任何更改(例如路由或 IP 更改)都将丢失。