我正在尝试将出站网络流量隔离到特定目标以进行计量,因此我想我会通过专用 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's
IP 192.168.111.5
。
奇怪的是,如果我使用专用的 NIC(eth1)而不是上面的子接口,一切都会按预期工作。这是子接口的限制,错误还是我做错了?
操作系统是运行在内核 3.13.0-76 上的 Ubuntu 14.04.3 服务器。它是托管在 KVM 管理程序上的来宾 VM(尽管我怀疑这是一个因素)。
您应该能够使用此命令完成您想要的操作:
如果您进入
ip route list
,您应该会看到 的变化src
。