我试图隔离出站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.10
stream量通过主接口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
的改变。