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다른 임의 MAC ea: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
    

여러 네트워크 네임스페이스의 자동화와 같은 용도를 찾을 수 있기를 바랍니다.

답변2

이 안에 스크립트가 있습니다깃허브저장소. 이 스크립트를 사용하면 현재 네트워크 구성 명령을 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

답변3

네트워크 구성은 /etc/sysconfig/network-scripts/ifconfig-(인터페이스) 및 /etc/sysconfig/network, /etc/resolv.conf 등과 같은 파일에 보관되어야 합니다. 간단히 이 파일을 수정하고 네트워크를 다시 시작할 수 있습니다. 즉석에서 변경하는 대신 네트워크 서비스를 사용하세요. 시스템이 다시 시작되면 즉시 변경한 내용(예: 라우팅 또는 IP 변경)이 손실됩니다.

관련 정보