通过子接口的路由不起作用?

通过子接口的路由不起作用?

为了计量目的,我试图将出站网络流量隔离到特定目标,因此我想通过专用 IP 地址路由它。为了实现这一点,我设置了一个子接口eth0:1,如下所示:

# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast  state UP group default qlen 1000
link/ether fa:16:3e:42:ae:d3 brd ff:ff:ff:ff:ff:ff
inet 192.168.111.6/24 brd 192.168.111.255 scope global eth0
   valid_lft forever preferred_lft forever
inet 192.168.111.5/24 brd 192.168.111.255 scope global secondary eth0:1
   valid_lft forever preferred_lft forever

到目前为止一切顺利。应该让它工作的路由部分是这样的:

# ip route add 10.10.0.10 via 192.168.111.1 dev eth0:1

当我检查路由表时,我得到:

# ip route list
default via 192.168.111.1 dev eth0 
10.10.0.10 via 192.168.111.1 dev eth0 
192.168.111.0/24 dev eth0  proto kernel  scope link  src 192.168.111.6 

请注意第二行,它以 结尾,dev eth0而不是eth0:1我预期的,但到目前为止,这可能只是一个显示问题。但是,当使用 观察流量时tcpdump,很明显路由的行为与上面的显示相同,即:到 的流量10.10.0.10通过主接口传输eth0,使用其 IP192.168.111.6而不是eth0:1'sIP 192.168.111.5

奇怪的是,如果我使用专用网卡 (eth1) 而不是上面的子接口,一切都会按预期工作。这是子接口的限制、错误还是我做错了什么?

操作系统是运行在内核 3.13.0-76 上的 Ubuntu 14.04.3 服务器。它是托管在 KVM 管理程序上的客户虚拟机(尽管我怀疑这是一个因素)。

答案1

您应该能够使用以下命令完成您想要的操作:

ip route add 10.10.0.10 dev eth0:1 src 192.168.111.5

如果你输入,ip route list你应该会看到的变化src

相关内容