我在 VMware 上有一个虚拟机,上面运行着 Ubuntu Server 12.04。我为虚拟机配置了两个网络适配器,我的 /etc/network/interfaces 配置如下:
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
address 10.226.83.2
netmask 255.255.255.248
gateway 10.226.83.1
# Management Interface
auto eth1
iface eth1 inet static
address 10.20.9.200
netmask 255.255.240.0
up ip route add 10.20.0.0/20 via 10.20.0.1 dev eth1 || true
up ip route add 10.21.120.0/22 via 10.20.0.1 dev eth1 || true
up ip route add 10.13.122.0/22 via 10.20.0.1 dev eth1 || true
我的问题是,使用此特定配置,在调用路由时我无法看到到 10.13.122.0/22 的路由:
$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 10.226.83.1 0.0.0.0 UG 100 0 0 eth0
10.20.0.0 * 255.255.240.0 U 0 0 0 eth1
10.21.120.0 10.20.0.1 255.255.252.0 UG 0 0 0 eth1
10.118.233.0 10.118.233.2 255.255.255.0 UG 0 0 0 tun10000
10.118.233.2 * 255.255.255.255 UH 0 0 0 tun10000
10.226.83.0 * 255.255.255.248 U 0 0 0 eth0
我想要实现的是,往返于网络 10.20.0.0/20、10.21.120.0/22 和 10.13.122.0/22 的流量将通过 eth1 流向 10.20.0.1,否则流量将通过 eth0 并通过 10.226.83.1。tun10000 是由我们的 OpenVPN 配置生成的适配器,在这种情况下可以忽略它。
目前,除 10.13.122.0/22 之外的所有网络均运行良好,这反映在路由表中;尽管使用与其他两个网络相同的语法添加了 10.13.122.0/22 的路由,但我在表中看不到它。
另外,当我执行 sudo /etc/init.d/networking restart 时,我得到以下信息:
$ sudo /etc/init.d/networking restart
* Running /etc/init.d/networking restart is deprecated because it may not enable again some interfaces
* Reconfiguring network interfaces...
ssh stop/waiting
ssh start/running, process 21240
RTNETLINK answers: File exists
RTNETLINK answers: Invalid argument
ssh stop/waiting
ssh start/running, process 21306
即使有了两个 RTNETLINK 答案,我还是得到了一个功能正常的接口,除了到 10.13.122.0/22 的路由。我怎样才能让这个路由工作,有没有办法摆脱“文件存在”和“参数无效”消息?
答案1
10.21.120.0/22
是 10.21.120.0-10.21.123.255,因此与 相同10.13.122.0/22
。因此,设置 的路由10.13.122.0/22
将给出错误“文件已存在”(或更准确地说是“条目已存在”)。
您需要更好地了解您的网络拓扑。
答案2
我在配置中输入了错误的掩码;将 10.13.122.0/22 替换为 10.13.122.0/23 可以使一切正常工作。