使用特定接口进行出站连接(Ubuntu 9.04)

使用特定接口进行出站连接(Ubuntu 9.04)

我的电脑有两个以太网接口,运行的是 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

相关内容