我有一个 Linux(Debian)路由器,两个互联网连接 (A)和(二)。
(A)是首选,(二)是后备。
我想监控互联网连接(而不仅仅是网关的可用性!)并适当地更改默认路由。
- 如果(A)没有提供互联网,请切换到(二)
- 如果(A)正在再次提供互联网,切换回(A)。
我唯一的问题是(2)。我的路由表指向一个正常工作的互联网,因此我无法轻易检测互联网是否通过链接正常工作(A)再次。
我正在寻找可以明确选择下一跳的 ping 或 traceroute(或其他诊断工具)。
ping -r
看起来很有希望,但只能 ping 局域网上的主机。(它只需要在数据包中写入另一个目标地址,该死!)traceroute -g gateway
看起来更有希望,几乎可以满足我的要求 - 但设置了我的下一跳拒绝的源路由选项。(不在我的管理范围内......)
我只想要一个 $ping,它可以:
- 选择源接口(和地址)
- 选择该接口上的下一跳
- ping 任意 IP 地址
我可以使用基于策略的路由来实施邪恶的诡计,但这会对所有用户的生产产生影响。我希望看到一个没有副作用的解决方案……
答案1
上游网关是否与路由器位于同一以太网段?如果是,则nping --dest-mac …
可能会有效。(Nping 是 nmap 附带的众多工具之一,因此它可能已安装在您的系统上。)
答案2
这个怎么样?
#!/bin/sh
IP=$1
GW=$2
route add -host $IP gw $GW
ping $IP
route del -host $IP gw $GW
您还可以使用度量选项来避免任何现有的互联网连接同时尝试使用此路由。
答案3
您可以尝试使用 iptables路线补丁指定要使用的网关,用于从该网关获取 ICMP 数据包(A)界面。
假设你的(A)接口为 10.0.0.1,默认网关为 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 x.x.x.x