如何使用iptables和单独的调制解调器转发端口到DMZ

我有一个这样的networking:

ADSL VLAN 2 VLAN 3 ------[Modem]----------[firewall]----------[intranet PC] | | VLAN 4 \-------------[DMZ server] 

我想设置端口转发,将DMZ中的Web服务器暴露给Internet。 IP是:

  • 调制解调器:192.168.0.1
  • 防火墙eth0.2:192.168.0.126
  • 防火墙eth0.3:192.168.1.1
  • 防火墙eth0.4:192.168.2.1
  • PC:192.168.1.2
  • 服务器:192.168.2.2

我打开调制解调器上的端口80和443,并将它们转发到防火墙(192.168.0.126)。 我在防火墙的iptables中有这些规则:

NAT

 -P PREROUTING ACCEPT -P INPUT ACCEPT -P OUTPUT ACCEPT -P POSTROUTING ACCEPT -A PREROUTING -d 192.168.0.126/32 -p tcp -m multiport --dports 80,443 \ -j DNAT --to-destination 192.168.2.2 -A PREROUTING -d 192.168.1.1/32 -p tcp -m multiport --dports 80,443 \ -j DNAT --to-destination 192.168.2.2 -A POSTROUTING -o eth0.2 -j MASQUERADE 

转发:

 -P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT # Disallow new connections from DMZ to modem and intranet -A FORWARD -d 192.168.0.0/16 -i eth0.4 -m state --state NEW -j DROP # Allow intranet to access Internet -A FORWARD -i eth0.3 -o eth0.2 -j ACCEPT -A FORWARD -i eth0.2 -o eth0.3 -m state --state RELATED,ESTABLISHED -j ACCEPT # Allow DMZ to access Internet -A FORWARD -i eth0.4 -o eth0.2 -j ACCEPT -A FORWARD -i eth0.2 -o eth0.4 -m state --state RELATED,ESTABLISHED -j ACCEPT # Allow web ports to DMZ -A FORWARD -i eth0.2 -o eth0.4 -p tcp -m multiport --dports 80,443 -j ACCEPT # Allow intranet to access DMZ -A FORWARD -i eth0.3 -o eth0.4 -j ACCEPT -A FORWARD -i eth0.4 -o eth0.3 -m state --state RELATED,ESTABLISHED -j ACCEPT 

除了端口转发以外,一切似乎都运行良好。 如果我从内网PC的浏览器中打开192.168.1.1,我会看到DMZ服务器。 这是它在telnet中的样子:

 $ telnet 192.168.1.1 80 Trying 192.168.1.1... Connected to 192.168.1.1. Escape character is '^]' 

但是,如果我尝试从互联网上使用调制解调器的外部IP打开它,我得到这个:

 $ telnet <EXT_IP> 80 Trying <EXT_IP>... telnet: Unable to connect to remote host: No route to host 

我试图设置一个发夹式NAT,就像这个类似问题的答案中所描述的那样,但是没有任何改变。 也许我没有使用正确的地址。

所以,两个问题:)

  1. 为什么不能传入连接看到DMZ服务器?
  2. 我的iptablesconfiguration一般行吗? 或者我应该丢弃数据包在默认的地方?

防火墙正在运行Debian Jessie,Linux 3.16。

那么我感到羞怯。 防火墙规则工作正常,但端口80被阻止在ISP。