我如何找出linux网关的IP地址?

我有两个互联网连接的CentOS 6.7

eth0 – 通过DHCP(由NetworkManager控制)的dynamicIP地址和dynamic网关

ppp0 – dynamicIP地址和dynamic网关(使用rp_pppoeconfiguration)

我想编写脚本,将在某些情况下更改默认网关,如下所示:

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 

如何找出dynamic网关$ IP1和$ IP2?

更新:

从这个答案https://unix.stackexchange.com/a/124341/157086

在文件/var/lib/dh​​client/dhclient.leases我可以findeth0的网关

 option routers 12.34.59.28; 

如何findppp0的dynamic网关$ IP2?

对于ppp0设备,可以使用ip addr show ppp0查询对端的IP地址。

但是,你甚至不需要一个,像ppp0这样的点对点设备,你可以简单地将路由设置到接口,省略路由器IP。

这个命令会给你所有在你的Linux机器上设置的路由,包括网关:

 route -n 

作为@Alex提到netstat -r ,如果这不可用,还有另一种方法:

 $ ip route list dev eno1 default via XXXX proto static metric 100 XXXX/24 proto kernel scope link src XXXX metric 100 $ 

用您的设备replaceeno1

dhclient -R routers – 我无法testing,因为我没有在任何地方设置dhcp

对于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