我有一台服务器,它有 2 个以太网网卡,eth0 和 eth1。为了回答这个问题,我将指代每个物理连接的接口的网络。我希望以这样的方式配置服务器,使其服务在两个 LAN 上都可用。
ifconfig 结果:
eth0 Link encap:Ethernet HWaddr x:x:x:x:x:01 inet addr:192.168.1.67 Bcast:192.168.1.255 Mask:255.255.255.01 inet6 addr: fe80::2e0:52ff:fee0:eb9e/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:516139 errors:0 dropped:0 overruns:0 frame:0 TX packets:511230 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:128341461 (128.3 MB) TX bytes:266227842 (266.2 MB) Interrupt:20 Base address:0x6000
eth1 Link encap:Ethernet HWaddr x:x:x:x:x:02 inet addr:192.168.1.109 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::213:d3ff:fe52:c568/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:5430 errors:0 dropped:0 overruns:0 frame:0 TX packets:2466 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:784989 (784.9 KB) TX bytes:503071 (503.0 KB) Interrupt:20 Base address:0xdc00
route -n 结果:
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.254 0.0.0.0 UG 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth1
192.168.1.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 1 0 0 eth1
目前,在 eth0 上,我可以访问 192.168.1.109 和 192.168.1.67 上的服务器,尽管路由器只列出了 192.168.1.67 上的设备。在 eth1 上,从其他 LAN 机器 ping 时会收到“目标网络不可达”错误,除非 eth0 已关闭,在这种情况下我可以访问 192.168.1.109 上的服务器。eth1 的网关是 192.168.1.1。我所知道的有关路由的几乎所有知识都是在试图解决这个问题时学到的,所以这对我来说真是令人难以置信。
问题是:根据https://kindlund.wordpress.com/2007/11/19/configuring-multiple-default-routes-in-linux/我需要为 eth1 设置第二个路由表。但是,由于两个网络都位于同一子网中,因此 ip 规则方法将不起作用。有没有办法根据接口更改路由表?我是否被迫更改其中一个 LAN 上的子网,从而失去在两个网络上为我的服务器设置相同 IP 的能力?有没有我错过的完全不同的解决方案?
答案1
使用大多数企业级边缘防火墙/路由器中提供的多 WAN 负载平衡/故障转移功能可以更好地服务两个 DSL 连接。
一个 LAN,两个 WAN,一个 LAN 默认网关(路由器)。让路由器根据预定义条件(加权、策略路由、故障转移等)确定采用哪条路由(Internet 连接)。
答案2
这可以处理,但不是现成的。我已经审查了Shorewall 和多个互联网连接文档中已经多次提到过,但还不需要实现。正如文档中所述,这不是一个简单的设置。
但是,如果您实施多 ISP 配置,您可能需要仔细阅读文档。存在将流量路由到与到达时不同的接口的风险。这可能会造成一些有趣的情况,即某些连接有效,而其他连接无效。标记流量以便其返回到其进入的同一接口非常重要。