我有 CentOS 6.7 和两个 Internet 连接
eth0-通过 DHCP 实现动态 IP 地址和动态网关(由 NetworkManager 控制)
ppp0 - 动态 IP 地址和动态网关(使用 rp_pppoe 配置)
我想要编写脚本来在某些情况下改变默认网关,如下所示:
ip route replace default scope global via $IP1 dev eth0
# or
ip route replace default scope global via $IP2 dev ppp0
# or
ip route replace default scope global nexthop via $IP1 dev eth0 weight 8 nexthop via $IP2 dev ppp0 weight 10
如何找出动态网关$IP1和$IP2?
更新:
从这个答案https://unix.stackexchange.com/a/124341/157086
在文件 /var/lib/dhclient/dhclient.leases 中我可以找到到 eth0 的网关
option routers 12.34.59.28;
如何找出 ppp0 的动态网关 $IP2?
答案1
正如 @Alex 提到的netstat -r
,如果这不可用,还有另一种方法:
$ ip route list dev eno1
default via X.X.X.X proto static metric 100
X.X.X.X/24 proto kernel scope link src X.X.X.X metric 100
$
eno1
用您的设备替换。
dhclient -R routers
- 我无法测试它,因为我没有dhcp
在任何地方设置它。
答案2
对于ppp0
设备,您可以查询其 IP 地址对等体和ip addr show ppp0
。
但是,您甚至不需要它,因为对于点对点设备,ppp0
您可以简单地将路由设置为接口,而省略路由器 IP。
答案3
此命令将为您提供 Linux 机器中设置的所有路由,包括网关:
route -n
答案4
对于 eth0:
#!/bin/bash
gwip=$(nmcli dev list iface eth0 | grep IP4-SETTINGS.GATEWAY: | awk '{ print $2}')
ip route replace default scope global via $gwip dev eth0
对于 ppp0:
#!/bin/bash
gwip2=$(/sbin/ip addr show ppp0 | grep peer | awk ' { print $4 } ' | sed 's/\/32//')
ip route replace default via $gwip2 dev ppp0