用明确的下一跳selectPing(又名监视多个默认网关)

我有一个Linux(Debian)路由器与两个互联网连接 (A)(B)

(A)是优选的, (B)是后退。

我想监视互联网连接(不仅仅是网关的可用性!),并适当地更改默认路由。

  1. 如果(A)不提供互联网,切换到(B)
  2. 如果(A)再次提供互联网,切换回(A)

(2)只有问题。 我的路由表指向一个工作的互联网,所以我不能轻易地检测到互联网是否正在通过链路(A)再次工作。

我正在寻找可以明确select下一跳的ping或traceroute(或其他诊断工具)。

  • ping -r看起来很有前途,但是只能在局域网上ping主机。 (只需要在数据包中写入另一个目标地址,该死!)
  • traceroute -g gateway看起来更有希望,几乎做我想要的 – 但设置我的下一跳的拒绝源路由选项。 (不在我的行政范围内)

我只想要一个$ ping,那可以:

  • select一个源接口(和地址)
  • select该接口上的下一跳
  • ping任意的ip地址

我可以用基于策略的路由做恶作剧,但这会对所有用户产生影响。 我希望看到一个无副作用的解决scheme….

上游网关是否与路由器位于相同的以太网段上? 如果这样nping --dest-mac …可能工作。 (Nping是nmap附带的许多工具之一,因此它可能已经在您的系统上。)

这个怎么样?

 #!/bin/sh IP=$1 GW=$2 route add -host $IP gw $GW ping $IP route del -host $IP gw $GW 

您可以尝试使用iptables和Route Patch来指定在来自该(A)接口的ICMP数据包上使用的网关。

假设你的(A)接口是10.0.0.1,默认gw是10.0.0.2

 iptables -A PREROUTING -t mangle -p icmp -s 10.0.0.1 -j ROUTE --gw 10.0.0.2 

然后ping -I 10.0.0.1 xxxx