我正在尝试确定最适合我的服务器的配置,该服务器有两个外部接口,均通过 DHCP 从 ISP 获取外部 IP 号码。这样我就可以在不同的 IP 上托管不同的服务。地址将最有可能的位于同一个网络中,这可能会给我的路由带来一些麻烦。
最简单的情况就是分配一个不同的优先事项到每个网络接口,将一个接口作为“主接口”,默认情况下所有内容都路由到该接口。由于我对负载平衡或故障转移不感兴趣,所以这应该可行。
ifconfig em0 priority 0
ifconfig em2 priority 10
我已经使用本地 DHCP 服务器模拟了该场景,看起来效果不错。路由表通过 DHCP 自动配置后如下所示:
# route -n show -inet
Routing tables
Internet:
Destination Gateway Flags Refs Use Mtu Prio Iface
default 10.0.0.1 UGS 0 0 - 8 em0
224/4 127.0.0.1 URS 0 0 32768 8 lo0
10.0.0/24 10.0.0.2 UCn 1 13 - 4 em0
10.0.0/24 10.0.0.3 UCn 0 0 - 14 em2
10.0.0.1 xx:xx:xx:xx:xx:01 UHLch 1 12 - 3 em0
10.0.0.2 xx:xx:xx:xx:xx:02 UHLl 0 0 - 1 em0
10.0.0.3 xx:xx:xx:xx:xx:03 UHLl 0 3 - 1 em2
10.0.0.255 10.0.0.2 UHPb 0 0 - 1 em0
10.0.0.255 10.0.0.3 UHPb 0 0 - 1 em2
127/8 127.0.0.1 UGRS 0 0 32768 8 lo0
127.0.0.1 127.0.0.1 UHhl 1 2 32768 1 lo0
我的网关只有一个默认出口,并且冲突的路线10.0.0/24
具有不同的优先级,因此除非明确请求,否则只应使用一种方式。
根据我的所有测试,这种方法效果很好。特别是:
- 可以使用任一 IP 访问监听两个 IP 的服务器上的服务。
- 在任一接口上监听的服务只能通过该接口访问。
- 当从服务器 ping 主机时,我可以选择传出接口。一切按预期运行。
但我仍然很担心,特别是两个问题:
我是否应该删除到我的网络的额外路由?
我有两条通往 的路线10.0.0/24
。后者的“使用”计数器从未增加,即使我删除了 的路线,我的网络似乎仍能正常工作em2
。
10.0.0/24 10.0.0.2 UCn 1 13 - 4 em0
10.0.0/24 10.0.0.3 UCn 0 0 - 14 em2
第二种方法是否有必要?如果没有,会有什么坏处吗?
我是否需要对同一个网络进行两次广播?
每个接口还会向同一网络设置自己的广播。
10.0.0.255 10.0.0.2 UHPb 0 0 - 1 em0
10.0.0.255 10.0.0.3 UHPb 0 0 - 1 em2
这里有同样的问题:两者都是必要的吗?如果不是,是否有害?我可以很容易地想象每个接口都必须在表中有一个条目,但恐怕我对此了解不够。我没有看到我的局域网中发生任何奇怪的事情。
...坚持,稍等
使用此设置运行一段时间后,网络停止工作。检查日志,我看到以下内容:
arp: attempt to add entry for 10.0.0.1 on em0 by xx:xx:xx:xx:xx:xx on em2
arpresolve: 10.0.0.1: route contains no arp information
arpresolve: 10.0.0.1: route contains no arp information
arpresolve: 10.0.0.1: route contains no arp information
...
显然某物设置中需要更改。我仍不确定是什么。