"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를 선택했기 때문에 작동합니다.