![Linux Ubuntu - 两个网卡独立局域网](https://linux22.com/image/554127/Linux%20Ubuntu%20-%20%E4%B8%A4%E4%B8%AA%E7%BD%91%E5%8D%A1%E7%8B%AC%E7%AB%8B%E5%B1%80%E5%9F%9F%E7%BD%91.png)
我有这个 /etc/network/interfaces(eth1 上的 IP 是假的)
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 10.0.2.15
netmask 255.255.255.0
broadcast 10.0.2.255
gateway 10.0.2.2
auto eth1
iface eth1 inet static
address 123.123.123.45
netmask 255.255.255.0
broadcast 123.123.123.255
gateway 123.123.123.1
我使用 eth0 连接到互联网,同时在 eth1 上为 Web 服务器配置了一个公共 IP。
如果我只保留 eth0,互联网连接就可以正常工作;另一方面,如果我只保留 eth1,Web 服务器也可以正常工作。它们按预期完美运行。
问题是我希望同时打开两个网络并专门使用 eth0 来上网/下载更新等,并且我想将所有传入 123.123.123.45 的流量路由到该网络。
我该怎么做?我搜索了很多教程,但找不到可行的解决方案,或者我可能做错了什么。我不想将流量从一个接口重新路由到另一个接口,我想将它们分开,并根据它们来自哪个 IP 重新路由流量。
这可能吗?
我已经尝试过了
route add -host 123.123.123.45 dev eth1
先感谢您。
答案1
您的直接问题是您在两个条目上都声明了默认网关。我认为这将导致最后出现的条目“获胜”并成为默认网关。
但是,如果删除 eth1 上的一个,就会出现问题,即即使数据包到达 eth1,盒子也会在 eth0 上回复。为了告诉盒子在特定接口上回复,您需要执行通常称为源路由的操作。
我在一个盒子上有以下命令集:
/sbin/ip rule add from 1.2.3.4/24 tab 1 priority 500
/sbin/ip route add default via 1.2.3.1 dev eth2 tab 1
/sbin/ip route flush cache
第一行告诉该框在表“1”中查找从 IP 1.2.3.4 发出的数据包的信息。第二行创建表“1”,表示默认网关在该表中是 1.2.3.1。最后一行确保此操作立即生效。
欲了解更多信息,请参见http://lartc.org/howto/lartc.rpdb.html
答案2
如果有两个默认网关具有相同的度量,则需要抽签来决定使用哪一个。这解释了您的问题。
您可以遵循 Bittrance 的建议,也可以确保您的两个默认路由具有不同的度量。在这种情况下,除非路由已关闭,否则将使用度量较小的路由。但是,这仅在第二个默认网关确实提供到公共互联网的路由时才有效。
为了设置两个具有不同度量的默认路由,请metric
在ip route add
命令中使用关键字。
我个人会从接口文件中删除网关指令,而是添加后续命令。
编辑 根据您的补充评论,我有点困惑您到底想要实现什么以及如何建立这个网络。
显然,具有公共 IP 的接口必须直接连接到 Internet(大概是通过您的 ISP 提供的设备)。如果此服务器也是您连接到 Internet 的默认网关,即所有对公共 IP 地址的请求都必须通过此服务器,则必须将服务器配置为路由器(即必须启用 IP 转发,并且网络上的所有其他设备都必须将此服务器的私有 IP 作为其默认网关)。
如果您的网络有另一台计算机提供默认的互联网访问,那么该设备必须设置为所有其他网络设备上的默认网关,并且您的服务器在其内部接口(eth0)上根本不应该有默认路由,因为它直接连接到该网络。
答案3
您不能有两个默认网关。请选择其中一个。
如果您希望同时使用两个 ISP,那么您需要 BGP。
答案4
对另一个问题的这个答案是否也能引出你的答案?
在两个独立的 LAN 上设置两个 NIC 会出现错误