我的计算机中有两个以太网接口,运行的是 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 标志 Metric Ref Use 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
您应该只有一个默认网关。如果您从 eth1 中删除网关线路,则一切正常(重新启动网络后)。
从 /etc/network/interfaces 中的 eth1 中删除网关并将其添加为静态路由:
这样,10.0.0.1 将成为您的默认网关,而 eth1 将仅用于连接到 192.168.2.0 网络
按照建议使用路由修改路由表将暂时解决此问题,但它将在下次启动时恢复为当前状态。
可以在 /etc/rc.local 或其他某种初始化脚本中设置路由规则,但在这种情况下,最简单的选择就是从接口文件中的 eth1 中删除网关。
通过删除该网关,系统仍将自动使用 eth1 作为路由 192.168.2/24,但将通过 eth0 路由所有其他流量。
通过输入 route 查看您当前的路由表。您的机器将使用它在路由表中看到的第一个默认 gw。这将默认或 0.0.0.0 表示为目的地。如果您只想将 eth1 用于本地 192.168.2.0/24 网络,请删除 gateway 命令。这应该使 eth1 的默认 gw 成为您唯一的默认 gw。
我已经使用这个解决方案 4 年多了,已经在 Linode wiki 上发布了它,并且它一直在完美地工作。编辑
/etc/network/interfaces
并使其匹配: