网络拓扑结构:
ISP1 | | Alternative ISP 4G |
| | Huawei 4G with DMZ |
| | to 192.168.2.1 |
| | LAN IP: 192.168.2.254|
| | Public IP: 2.2.2.2 |
---------------------+ +----------------------+
| +----Main server---+ |
+------------eth0--| WWW, MAIL, SSH |-eth1-----------+
Public IP:1.1.1.1| DNS, etc... |
+------------------+ Local IP: 192.168.2.1
eth2| GW: 192.168.2.254
10.10.10.10|
|
[local 1] ---+--- [local 2] .... [local n]
当我尝试弄清楚如何使用 iptables 在主服务器上路由往返于备用 ISP 的流量时,我完全陷入了困境。
主服务器上的服务必须可以从外部访问,也可以从访问公共 IP 的本地网络访问。
ISP1 一切正常。我已设置 NAT 和 MASQUERADING,但似乎无法让备用 ISP 正常工作。
在备用 ISP 处,DMZ 切换处于活动状态并指向 192.168.2.1,该 IP 在主服务器上配置为 eth1 IP。
我是否需要对通过 eth1 发出的所有内容进行伪装,使其看起来像是来自 2.2.2.2,或者 4G 路由器会为我做到这一点?
我知道我不明白这里的很多事情,所以提前为这些愚蠢的问题感到抱歉......
答案1
看起来问题确实是由于数据包通过一个接口进入而从另一个接口离开造成的。
感谢@NickW 的提示!
我所做的是创建两个路由表(每个 ISP 一个),
# ip route show table isp1
default via 1.1.1.254 dev eth0
10.10.10.0/24 dev eth2 scope link src 10.10.10.10
127.0.0.0/8 dev lo scope link
1.1.1.0/24 dev eth0 scope link src 1.1.1.1
# ip route show table isp2
default via 192.168.2.254 dev eth1
10.10.10.0/24 dev eth2 scope link src 10.10.10.10
127.0.0.0/8 dev lo scope link
192.168.2.0/24 dev eth1 scope link src 192.168.2.1
创建两条规则,以便传入的数据包知道下一步该做什么
# ip rule
0: from all lookup local
32764: from 192.168.2.1 lookup isp2
32765: from 1.1.1.1 lookup isp1
32766: from all lookup main
32767: from all lookup default
并设置两个ISP路由器之间的默认路由策略:
# ip route
default
nexthop via 1.1.1.254 dev eth0 weight 1
nexthop via 192.168.2.254 dev eth1 weight 1
10.10.10.0/24 dev eth2 proto kernel scope link src 10.10.10.10
127.0.0.0/8 dev lo scope link
192.168.2.0/24 dev eth1 proto kernel scope link src 192.168.2.1
1.1.1.32/27 dev eth0 proto kernel scope link src 1.1.1.1
防火墙 iptables-save 输出:
# Generated by iptables-save v1.4.12.1 on Thu May 22 11:27:18 2014
*nat
:PREROUTING ACCEPT [3549:255693]
:INPUT ACCEPT [1284:97835]
:OUTPUT ACCEPT [2116:146271]
:POSTROUTING ACCEPT [168:12371]
-A POSTROUTING -o eth0 -j MASQUERADE
-A POSTROUTING -o eth1 -j MASQUERADE
COMMIT
# Completed on Thu May 22 11:27:18 2014
# Generated by iptables-save v1.4.12.1 on Thu May 22 11:27:18 2014
*mangle
:PREROUTING ACCEPT [105533:57605385]
:INPUT ACCEPT [21841:6013942]
:FORWARD ACCEPT [82551:51514621]
:OUTPUT ACCEPT [24003:30467247]
:POSTROUTING ACCEPT [106672:81997112]
COMMIT
# Completed on Thu May 22 11:27:18 2014
# Generated by iptables-save v1.4.12.1 on Thu May 22 11:27:18 2014
*filter
:INPUT DROP [135:8424]
:FORWARD DROP [20:1360]
:OUTPUT DROP [0:0]
:LOCAL_DROP - [0:0]
:LOGGING - [0:0]
:LOG_DROP - [0:0]
:SMTP_LOG - [0:0]
-A INPUT -d 10.10.10.10/32 -i eth2 -p tcp -j ACCEPT
-A INPUT -s 192.168.2.0/24 -d 10.10.10.10/32 -i eth2 -p tcp -j ACCEPT
-A INPUT -d 1.1.1.1/32 -i eth2 -p tcp -j ACCEPT
-A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -s 1.1.1.1/32 -d 192.168.2.1/32 -i eth0 -p tcp -j ACCEPT
-A INPUT -s 192.168.2.1/32 -d 1.1.1.1/32 -i eth1 -p tcp -j ACCEPT
-A INPUT -s 10.10.10.11/32 -i eth2 -j ACCEPT
-A INPUT -s 192.168.2.1/32 -i eth1 -j ACCEPT
-A INPUT -s 1.1.1.1/32 -p tcp -j ACCEPT
-A INPUT -s 1.1.1.1/32 -p udp -j ACCEPT
-A INPUT -s 192.168.2.1/32 -p tcp -j ACCEPT
-A INPUT -s 192.168.2.1/32 -p udp -j ACCEPT
-A INPUT -s 10.10.10.0/24 -i eth0 -j DROP
-A INPUT -s 127.0.0.0/8 -i eth0 -j DROP
-A INPUT -s 10.10.10.0/24 -i eth1 -j DROP
-A INPUT -s 127.0.0.0/8 -i eth1 -j DROP
-A INPUT -p tcp -m tcp --dport 25 --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT
-A INPUT -p tcp -m tcp --dport 110 --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT
-A INPUT -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT
-A INPUT -i eth2 -p tcp -m tcp --sport 68 --dport 67 -j ACCEPT
-A INPUT -i eth2 -p udp -m udp --sport 68 --dport 67 -j ACCEPT
-A INPUT -p udp -m udp --sport 53 -j ACCEPT
-A INPUT -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -p tcp -m tcp --sport 53 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -s 10.10.10.0/24 -j LOCAL_DROP
-A INPUT -p udp -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j DROP
-A FORWARD -i eth2 -o eth1 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth1 -o eth2 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 -o eth2 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth1 -o eth2 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth2 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth2 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth1 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.10.10.0/24 -d 10.10.10.0/24 -i eth2 -p tcp -j ACCEPT
-A FORWARD -s 10.10.10.0/24 -d 10.10.10.0/24 -i eth2 -p udp -j ACCEPT
-A FORWARD -s 192.168.2.0/24 -d 192.168.2.0/24 -i eth1 -j ACCEPT
-A FORWARD -s 10.10.10.0/24 -i eth2 -p tcp -m tcp --dport 22 -j ACCEPT
-A FORWARD -s 10.10.10.0/24 -i eth2 -p tcp -m tcp --dport 25 -j ACCEPT
-A FORWARD -s 10.10.10.0/24 -i eth2 -p tcp -m tcp --dport 80 -j ACCEPT
-A FORWARD -s 10.10.10.0/24 -i eth2 -p tcp -m tcp --dport 110 -j ACCEPT
-A FORWARD -s 10.10.10.0/24 -i eth2 -p tcp -m tcp --dport 993 -j ACCEPT
-A FORWARD -s 10.10.10.0/24 -i eth2 -p tcp -m tcp --dport 443 -j ACCEPT
-A FORWARD -s 10.10.10.0/24 -i eth2 -p udp -m udp --dport 53 -j ACCEPT
-A FORWARD -s 10.10.10.0/24 -i eth2 -p tcp -m tcp --dport 53 -j ACCEPT
-A FORWARD -s 10.10.10.0/24 -i eth2 -p udp -m udp --sport 137 --dport 137 -j ACCEPT
-A FORWARD -s 10.10.10.0/24 -i eth2 -p tcp -m tcp --dport 143 -j ACCEPT
-A FORWARD -s 10.10.10.11/32 -i eth2 -p tcp -j ACCEPT
-A FORWARD -s 10.10.10.11/32 -i eth2 -p udp -j ACCEPT
-A FORWARD -s 10.10.10.18/32 -i eth2 -p tcp -j ACCEPT
-A FORWARD -s 10.10.10.18/32 -i eth2 -p udp -j ACCEPT
-A FORWARD -s 10.10.10.1/32 -i eth2 -p tcp -j ACCEPT
-A FORWARD -s 10.10.10.1/32 -i eth2 -p udp -j ACCEPT
-A OUTPUT -s 1.1.1.1/32 -o eth0 -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -s 10.10.10.0/24 -d 10.10.10.0/24 -o eth2 -j ACCEPT
-A OUTPUT -s 1.1.1.1/32 -o eth2 -j ACCEPT
-A OUTPUT -s 192.168.2.0/24 -d 192.168.2.0/24 -o eth1 -j ACCEPT
-A OUTPUT -s 1.1.1.1/32 -o eth1 -j ACCEPT
-A OUTPUT -o eth1 -j ACCEPT
-A OUTPUT -o eth0 -j ACCEPT
-A OUTPUT -s 192.168.2.1/32 -o eth2 -j ACCEPT
-A OUTPUT -s 1.1.1.1/32 -o eth2 -j ACCEPT
-A OUTPUT -s 10.10.10.0/24 -d 1.1.1.1/32 -o eth2 -j ACCEPT
-A OUTPUT -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A LOCAL_DROP -p tcp -j ULOG --ulog-prefix "[---LOCAL DROP---]: "
-A LOCAL_DROP -p udp -j ULOG --ulog-prefix "[---LOCAL DROP---]: "
-A LOCAL_DROP -j DROP
-A LOGGING -j ULOG --ulog-prefix "LOGGING: "
-A LOGGING -j ACCEPT
-A LOG_DROP -p tcp -j ULOG --ulog-prefix "[---TCP LOGDROP---]: "
-A LOG_DROP -p udp -j ULOG --ulog-prefix "[---UDP LOGDROP---]: "
-A LOG_DROP -j DROP
-A SMTP_LOG -j ACCEPT
COMMIT
# Completed on Thu May 22 11:27:18 2014
防火墙配置很可能远非完美,但它可以工作,现在我不敢碰它:D