AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 506504
Accepted
GP92
GP92
Asked: 2019-03-16 04:58:53 +0800 CST2019-03-16 04:58:53 +0800 CST 2019-03-16 04:58:53 +0800 CST

有没有办法将 linux 中网络配置的当前状态保存到数据文件或 iptables-save 等 ip 命令集?

  • 772

假设我运行了很多 ip 命令并最终获得了所需的网络配置,但我没有保存命令历史记录。

有没有办法像 iptables-save 或 mysqldump 那样转储/保存网络配置的状态,而不是再次重写文件或脚本中的命令,然后我们可以恢复?

我在 Windows 中看到类似的事情是可能netnsh的(不确定它是否正是我正在寻找的那种解决方案..没有经历过它,但它似乎转储了网络配置状态)。

但我在 Linux 中找不到任何选项(尤其是 CentOS/RHEL)

linux centos
  • 3 3 个回答
  • 11802 Views

3 个回答

  • Voted
  1. Best Answer
    A.B
    2019-03-17T06:16:36+08:002019-03-17T06:16:36+08:00

    使用 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: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 
      

      当然,来自其他表的所有路由,包括表 254 aka main,也会被保存和恢复。

    • ip rule save/ip rule restore

      这也很棘手,因为如果在它之前不刷新它会添加重复而不抱怨,并且刷新规则永远不会刷新规则 prio 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
      

    我希望你能找到它的一些用法,例如用于多个网络命名空间的自动化。

    • 5
  2. Rasam
    2019-10-01T11:35:22+08:002019-10-01T11:35:22+08:00

    这个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
  3. L.Ray
    2019-03-16T16:48:52+08:002019-03-16T16:48:52+08:00

    您的网络配置应保存在 /etc/sysconfig/network-scripts/ifconfig-(interface) 和 /etc/sysconfig/network、/etc/resolv.conf 等文件中。您只需修改这些文件并重新启动网络服务,而不是即时进行更改。当您的系统重新启动时,您即时进行的任何更改(例如路由或 IP 更改)都将丢失。

    • 0

相关问题

  • 使用键盘快捷键启动/停止 systemd 服务 [关闭]

  • 奇怪的路由器与centos 6一起工作[关闭]

  • 需要一些系统调用

  • astyle 不会更改源文件格式

  • 通过标签将根文件系统传递给linux内核

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve