我如何知道我的公共接口是什么接口?

我如何知道我的公共接口是什么接口?

我正在设置一个应用程序,它需要我手动进入公共界面。运行时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}'

但是,如果您可能有多个具有不同度量值的默认路由、多个路由表并执行基于源或策略的路由,那么您自己应该知道这还不够。

相关内容