鉴于:一台搭载 CentOS 8 且配有三个网络适配器的计算机。
eth0、eth2:外部,连接两个不同的ISP
eth1:面向家庭网络(内联网)
任务:允许从任一 ISP 访问某些内部服务。有几种服务,下面我仅提到 SSH。
在以下配置中:
IP1:第一个 ISP(ISP1)的外部 IP,分配给 eth0
网关 1:ISP1 提供的网关 IP
网络 1、网络掩码 1:与 IP1 相关
IP2:第二个 ISP(ISP2)的外部 IP,分配给 eth2
网关 2:ISP2 提供的网关 IP
网络 2、网络掩码 2:与 IP2 相关
LocalSSHIP:运行 SSH 服务器的内联网(eth1)中的 IP
当前配置如下。路由表:
echo "200 isp1" >> /etc/iproute2/rt_tables
echo "201 isp2" >> /etc/iproute2/rt_tables
路由策略:
/etc/sysconfig/network-scripts/route-eth0
Network1 dev eth0 src IP1 table isp1
default via Gateway1 dev eth0 table isp1
/etc/sysconfig/network-scripts/route-eth2
Network2 dev eth2 src IP2 table isp2
default via Gateway2 dev eth2 table isp2
路由规则:
/etc/sysconfig/network-scripts/rule-eth0
from IP1/32 table isp1
/etc/sysconfig/network-scripts/rule-eth2
from IP2/32 table isp2
iptables 片段。外部流量从两个接口转发到本地 SSH 服务器:
iptables -A PREROUTING -t nat -i eth0 -p tcp -d IP1 --dport 22 -j DNAT --to LocalSSHIP:22
iptables -A PREROUTING -t nat -i eth2 -p tcp -d IP2 --dport 22 -j DNAT --to LocalSSHIP:22
iptables -A FORWARD -p tcp -d LocalSSHIP --dport 22 -j ACCEPT
eth0 是默认网关:
$ ip route
default via Gateway1 dev eth0 proto static metric 100
default via Gateway2 dev eth2 proto static metric 101
...
$ ip 规则
0: from all lookup local
32764: from IP2 lookup isp2
32765: from IP1 lookup isp1
32766: from all lookup main
32767: from all lookup default
对来自 eth1 的流量应用 SNAT:
iptables -t nat -A POSTROUTING -i eth1 -o eth0 -j SNAT --to-source IP1
现在的情况:
- 从eth0转发的所有服务均正常运行。
- 所有来自内联网的流量均正常传出和返回。
- 所有从 eth2 访问服务的尝试均超时。
/var/log/messages 中没有明显的提示(例如有关“火星 IP”的投诉)。
我在这里有点茫然,非常欢迎大家提供建议。