策略路由 - 主机发送非本地网络的 ARP 请求

策略路由 - 主机发送非本地网络的 ARP 请求

我需要一些帮助来解决策略路由问题。

我有一台具有多个 VLAN 的 Linux 主机。我尝试为每个 VLAN(本例中为 20)创建一个唯一的路由表,并且我可以在 VLAN20 上的主机和路由器(默认网关)之间进行双向 ping。但是,当我将流量发送到网络外的 IP 时,ubuntu 服务器会发送这些 IP 的 ARP 请求,而不是通过网关发送流量。

Ubuntu 主机 VLAN20:192.168.20.50

路由器接口VLAN20:192.168.20.1

创建表“vlan20”

$ cat /etc/iproute2/rt_tables
# # reserved values
# 255 local
254 main
253 default
220 vlan20
0 unspec #
#local
#1inr.ruhep

创建规则,使用表 vlan20 发送来自 VLAN20 接口的所有流量

$ ip rule show
0: from all lookup local
32765: from 192.168.20.50 lookup vlan20
32766: from all lookup main
32767: from all lookup default

将所有流量路由到路由器 vlan20 接口

 $ ip route list table vlan20
default via 192.168.20.1 dev eth0.20
192.168.20.0/24 dev eth0.20  scope link

从 Linux 主机测试

ping 8.8.8.8 -I eth0.20
PING 8.8.8.8 (8.8.8.8) from 192.168.20.50 eth0.20: 56(84) bytes of data.                             
192.168.20.50 icmp_seq=1 Destination Host Unreachable

从路由器 VLAN20 接口

 9.568940 arp who-has 8.8.8.8 tell 192.168.20.50
 10.565495 arp who-has 8.8.8.8 tell 192.168.20.50

从 Ubuntu 内核路由

# ip route get 8.8.8.8 dev eth0.20
8.8.8.8 dev eth0.20  src 192.168.20.50
cache

感谢您的帮助!我还没能解决这个问题。

答案1

您的 ping 尝试已绑定到界面(通过指定-I eth0.20) - 不是地址,并且没有接口路由。

如果您添加输出接口规则以使用 vlan20 表,它将使用下一跳网关,而不是尝试发出 ARP 请求。即

ip rule add oif eth0.20 lookup vlan20

您会发现一个相当长的解释,并且在我的另一个回答中出现了这样的例子:https://stackoverflow.com/a/47613538/471825

相关内容