![我如何知道我的公共接口是什么接口?](https://linux22.com/image/75654/%E6%88%91%E5%A6%82%E4%BD%95%E7%9F%A5%E9%81%93%E6%88%91%E7%9A%84%E5%85%AC%E5%85%B1%E6%8E%A5%E5%8F%A3%E6%98%AF%E4%BB%80%E4%B9%88%E6%8E%A5%E5%8F%A3%EF%BC%9F.png)
我正在设置一个应用程序,它需要我手动进入公共界面。运行时sudo route
给出以下结果:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 10.55.168.1 0.0.0.0 UG 0 0 0 eth0
10.55.168.0 * 255.255.254.0 U 0 0 0 eth0
192.168.123.0 * 255.255.255.0 U 0 0 0 eth1
我可以看到有两个接口,但我仍然不确定哪一个是公共接口?
答案1
“公共接口”没有正式的定义。最可能的定义是,如果数据包要发送到互联网,它就是数据包所去的地方。这将是具有默认路由的接口。在 Linux 上,您可以通过 shell 以编程方式查询它
route -n | awk '$1 == "0.0.0.0" {print $8}'
大多数 Unix 变体都有一个route
命令,其命令行和输出语法可能略有不同。
虽然默认路由是唯一可行的候选者,但它实际上可能是公开的,也可能不是公开的。许多机器都在后面网络地址转换设备,因此它们根本没有公共接口。 NAT 通过其自己的公共接口中继传出连接;传入连接将到达 NAT 设备,并且它们不会被路由到您的计算机,除非 NAT 专门配置为这样做。
答案2
在几乎所有情况下,外部接口都具有默认路由,因此在大多数情况下都可以:
ip r | awk '/^default/ {print $5}'
但是,如果您可能有多个具有不同度量值的默认路由、多个路由表并执行基于源或策略的路由,那么您自己应该知道这还不够。