通过子接口路由不工作?

我试图隔离出站networkingstream量到一个特定的目标用于计量的目的,所以我想我会路由它通过一个专用的IP地址。 为了实现这一点,我已经build立了一个子接口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 

注意第二行,以eth0:1结束,而不是eth0:1 ,但是到目前为止,这可能只是一个显示问题。 但是,当使用tcpdump观察stream量时,显然这个路由的行为与上面的显示一样,即:到10.10.0.10stream量通过主接口eth0转发,使用IP 192.168.111.6而不是eth0:1's IP 192.168.111.5

奇怪的是,如果我使用专用网卡(eth1)而不是上述的子接口,一切都按预期工作。 这是子接口的限制,一个错误,或者我做错了吗?

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

你应该能够使用这个命令完成你想要的:

 ip route add 10.10.0.10 dev eth0:1 src 192.168.111.5 

如果你inputip route list你应该看到src的改变。