「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を選択しました。