"ip 경로 추가"를 호출하기 전에 매개변수를 확인하는 방법은 무엇입니까?

"ip 경로 추가"를 호출하기 전에 매개변수를 확인하는 방법은 무엇입니까?

"ip 경로 추가..."에 대한 호출로 확장되는 etcd 매개변수를 설정하는 프로그램을 사용하고 있는데 오류 없이 성공하려면 이러한 호출이 필요합니다. 템플릿은 다음 형식을 사용합니다.

ip route add < route > [ via < gateway > ] dev < interface >

나는 다음과 같은 응답을 받았습니다.

# ip route show
169.254.0.0/16 dev ens192 scope link metric 1002 
172.16.25.64/26 dev ens192 proto kernel scope link src 172.16.25.115 
254.146.247.0/24 dev ens224 scope link 

# ip route add 10.20.30.0/24 via 172.16.25.124 dev ens192
# ip route delete 10.20.30.0/24 via 172.16.25.124 dev ens192
# ip route add 10.20.31.0/24 via 172.16.25.124 dev ens224
RTNETLINK answers: Network is unreachable

# ip route add 10.20.31.0/24 via 254.146.247.1 dev ens224
# ip route delete 10.20.31.0/24 via 254.146.247.1 dev ens224
# ip route add 10.20.30.0/24 via 254.146.247.1 dev ens192
RTNETLINK answers: Network is unreachable

# ping -c 1 172.16.25.124
PING 172.16.25.124 (172.16.25.124) 56(84) bytes of data.
64 bytes from 172.16.25.124: icmp_seq=1 ttl=64 time=0.294 ms

--- 172.16.25.124 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.294/0.294/0.294/0.000 ms

# ping -c 1 254.146.247.1
PING 254.146.247.1 (254.146.247.1) 56(84) bytes of data.
ping: sendmsg: Operation not permitted

--- 254.146.247.1 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

채워진 구성 파일을 사용하는 서비스가 다시 시작될 때 채워진 템플릿이 "ip 경로 추가..."를 사용하여 실행되도록 Python을 사용하여 etcd 데이터베이스에 저장할 매개변수를 수집하고 있습니다. 결국 "ip Route add"가 호출될 때 실패하지 않도록 경로, 게이트웨이 및 인터페이스에 사용되는 값을 검증하는 방법을 찾고 있습니다. 특히 위의 예에서 게이트웨이 IP 주소 254.146.247.1은 인터페이스 ens192에서 연결할 수 없다는 것을 알아야 합니다.

위의 예와 같이 ping을 사용할 수 없습니다. 172.16.25.124는 ping이 가능하며 인터페이스 ens192의 게이트웨이로 사용할 수 있지만 ens224는 사용할 수 없습니다. 254.146.247.1은 ping할 수 없지만 인터페이스 ens224의 게이트웨이로 사용할 수 있지만 ens192의 경우에는 사용할 수 없습니다.

어떤 도움이라도 대단히 감사하겠습니다.

답변1

다음 코드를 시도해 보세요.

#!/bin/bash
IP_RULES_FILE=/tmp/iprules.txt

while read rule
do
   GW=`echo $rule |  awk '{print $6}'`
   ping -c1 $GW 2>/dev/null 1>/dev/null
   if [ "$?" = 0 ]; then
    $rule
    else
        echo "host $gw is not reachable"
    fi
done < $IP_RULES_FILE
  • /tmp/iprules.txt추가해야 하는 파일 에 iproute를 저장해 주세요 .
  • 이 스크립트는 지정된 규칙에서 게이트웨이를 가져오고 서버에서 게이트웨이를 구성하기 전에 연결 가능성을 확인합니다.

답변2

netstat의 출력을 구문 분석하여 문제를 해결할 수 있었습니다.

# netstat -nr
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 ens192
172.16.25.64    0.0.0.0         255.255.255.192 U         0 0          0 ens192
254.146.247.0   0.0.0.0         255.255.255.0   U         0 0          0 ens224

인터페이스의 게이트웨이 주소는 인터페이스에 대해 구성된 대상 주소에서 가져와야 합니다. 내 예(ip Route add 10.20.31.0/24 via 254.146.247.1 dev ens224)에서는 인터페이스(ens224) 주소(254.146.247.1)에 대해 구성된 네트워크(254.146.247.0/24)에서 IP를 선택했기 때문에 작동합니다.

관련 정보