如何找出 Linux 网关 IP 地址?

如何找出 Linux 网关 IP 地址?

我有 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/dh​​client/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

相关内容