工作人员,请看下面的路由表。 dev ens160 接受来自 172.17.4.x 的传入 ping 请求,并通过 dev tun0 应答。
- “0.0.0.0/1”和“默认”之间有什么区别?
- 需要进行哪些更改才能通过 ens160 应答来自 172.17.4.x 的流量?
主机:172.31.4.225
Lan:172.31.4.0/24
GW:172.31.4.1
tun0:访问互联网的隧道 (openvpn)
ens160:虚拟机网络接口
远程客户端:172.17.4.x
# ip route
0.0.0.0/1 via 10.z.0.1 dev tun0
default via 172.31.4.1 dev ens160 proto dhcp src 172.31.4.225 metric 100
10.z.0.0/16 dev tun0 proto kernel scope link src 10.z.0.6
128.0.0.0/1 via 10.23.0.1 dev tun0
172.16.0.0/16 via 172.31.4.1 dev ens160
172.31.4.0/24 dev ens160 proto kernel scope link src 172.31.4.225
172.31.4.1 dev ens160 proto dhcp scope link src 172.31.4.225 metric 100
u.w.x.y via 172.31.4.1 dev ens160
192.168.19.0/24 dev br-<snip> proto kernel scope link src 192.168.19.1
192.168.68.0/24 dev docker0 proto kernel scope link src 192.168.68.1 linkdown
答案1
0.0.0.0/1 via 10.z.0.1 dev tun0 128.0.0.0/1 via 10.z.0.1 dev tun0
这两条规则一起涵盖整个0.0.0.0/0
(第一个 IP 地址从 0.0.0.0 到 127.255.255.255,第二个 IP 地址从 128.0.0.0 到 255.255.255.255),并且优先于:
default via 172.31.4.1 dev ens160 proto dhcp src 172.31.4.225 metric 100
规则(default
存在0.0.0.0/0
),因为它们的范围较窄。
openvpn
这些至少在您使用时添加--redirect-gateway def1
。
从手册页:
定义1 使用此标志可通过使用 0.0.0.0/1 和 128.0.0.0/1 而不是 0.0.0.0/0 来覆盖默认网关。这样做的好处是可以覆盖但不会清除原始默认网关。
答案2
需要注意的重要一点是/1
第一个少量ip 地址中必须是0
.第一位设置为 的 IP 地址1
将不匹配。如果没有其他规则匹配,默认规则将匹配所有 IP 地址。实际上,这意味着0.0.0.0/1
只会将 IP 地址匹配0.0.0.0
到127.x.x.x
...实际上它只匹配0.0.0.0
到,126.x.x.x
因为127.x.x.x
是本地环回并且从不路由。默认规则有效,0.0.0.0/0
因此它匹配所有 IP 地址。
注意路由表也有规则128.0.0.0/1
。所有 IPv4 地址都将匹配其中之一0.0.0.0/1
,128.0.0.0/1
因此永远不会使用默认规则。
需要进行哪些更改才能通过 ens160 应答来自 172.17.4.x 的流量?
添加另一个规则以172.17.4.0/24
路由ens160
到172.31.4.1
。这应该可以接受,因为该路由表已经认为172.31.4.1
是可接受的默认网关。我们得到这个结果是因为前 3 个字节(3 乘以 8 位)必须与( )/24
中的前三个字节匹配,而我们不关心第 4 个字节。172.31.4.0
172
31
4
x