我的电脑有两个以太网接口,运行的是 Ubuntu 9.04。两个接口都使用静态 IP,但使用单独的网关。我的/etc/network/interfaces
文件如下所示:
自动 eth0 eth1 iface eth0 inet 静态 地址 10.0.0.5 网络掩码 255.255.255.0 网关 10.0.0.1 iface eth1 inet 静态 地址 192.168.2.5 网络掩码 255.255.255.0 网关 192.168.2.1
我想让所有发往整个互联网的流量都通过eth0
,但它似乎想通过eth1
。有没有办法让我的一般出站流量通过eth0
,而只用于eth1
发往其子网的流量?
答案应该是持久的;也就是说,它应该在重启后继续存在而不需要超级用户在重启后运行命令。
编辑route -n
:根据要求,这是我的命令的输出:
内核 IP 路由表 目标网关 Genmask 标志 指标参考使用 Iface 10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth1 0.0.0.0 192.168.2.1 0.0.0.0 UG 100 0 0 eth1 0.0.0.0 10.0.0.1 0.0.0.0 UG 100 0 0 eth0
答案1
您应该只有一个默认网关。如果您从 eth1 中删除网关行,一切将正常工作(重新启动网络后)。
答案2
从 /etc/network/interfaces 中的 eth1 中删除网关,并将其添加为静态路由:
route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.2.1
这样,10.0.0.1 将成为您的默认网关,而 eth1 将仅用于连接 192.168.2.0 网络
答案3
按照建议使用路由修改路由表将暂时解决此问题,但它将在下次启动时恢复到当前状态。
可以在 /etc/rc.local 或某种其他初始化脚本中设置路由规则,但在这种情况下,最简单的选择就是从接口文件内的 eth1 中删除网关。
通过删除该网关,系统仍将自动使用 eth1 作为路由 192.168.2/24,但将通过 eth0 路由所有其他流量。
答案4
我已经使用这个解决方案 4 年多了,在 Linode wiki 上发布,并且它一直运行正常。编辑/etc/network/interfaces
并使其与以下内容匹配:
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
address <the outbound IP>
netmask <the netmask for the outbound IP, usually 255.255.255.0>
gateway <the gateway for the outbound IP>
up /sbin/ip addr add <the primary IP>/24 dev eth0