我有一个服务器,它有 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
路由 -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
Run Code Online (Sandbox Code Playgroud)
目前在 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?有没有我错过的完全不同的解决方案?
使用大多数企业级边缘防火墙/路由器中提供的多 WAN 负载平衡/故障转移功能可以更好地为两个 DSL 连接提供服务。
一个局域网,两个广域网,一个局域网默认网关(路由器)。让路由器根据满足的预定义条件(加权、策略路由、故障转移等)确定采用哪条路由(互联网连接)。