DMZ防火墙后面的服务器不会回应

我有一个DMZ服务器设置为转发特定的端口到几台机器。 预期的行为是给我一个特定的端口发送一个请求到非军事区,让公众无法访问的机器公开地回应数据。 在这个例子中,我将端口10001转发到端口80上的非发布服务器。

我可以看到转发正在工作,因为我可以看到数据包通过服务器上的tcpdump进入。 无论出于何种原因,它所回应的数据包都没有返回到我的terminal(我正在curl)。

iptables-save命令:

# Generated by iptables-save v1.4.10 on Fri Dec 23 17:36:10 2011 *nat :PREROUTING ACCEPT [5609:332934] :INPUT ACCEPT [5609:332934] :OUTPUT ACCEPT [5231:376507] :POSTROUTING ACCEPT [5248:377595] -A PREROUTING -i eth0 -p tcp -m tcp --dport 10001 -j DNAT --to-destination 192.168.1.11:80 COMMIT # Completed on Fri Dec 23 17:36:10 2011 # Generated by iptables-save v1.4.10 on Fri Dec 23 17:36:10 2011 *filter :INPUT ACCEPT [119300:24294441] :FORWARD ACCEPT [183:10688] :OUTPUT ACCEPT [118926:28442933] -A INPUT -i eth0 -p tcp -m state --state NEW -m tcp --dport 10001 -j ACCEPT COMMIT # Completed on Fri Dec 23 17:36:10 2011 

注意:我把我的ip拿出来,用10.10.10.10replace它。Legend:

  • 192.168.1.3 = DMZ
  • 192.168.1.11 =非公开服务器
  • 10.10.10.10 =来自远程networking的我。

来自DMZ的tcpdump:

 17:44:45.039273 IP 10.10.10.10.64090 > 192.168.1.3.10001: Flags [S], seq 2710805211, win 65535, options [mss 1460,nop,wscale 3,nop,nop,TS val 1211306586 ecr 0,sackOK,eol], length 0 17:44:45.039365 IP 10.10.10.10.64090 > 192.168.1.11.www: Flags [S], seq 2710805211, win 65535, options [mss 1460,nop,wscale 3,nop,nop,TS val 1211306586 ecr 0,sackOK,eol], length 0 

基于上述,转发似乎正在工作。

来自非公共服务器的tcpdump:

 17:51:14.260134 IP 10.10.10.10.64110 > 192.168.1.11.www: Flags [S], seq 722619659, win 65535, options [mss 1460,nop,wscale 3,nop,nop,TS val 1211694763 ecr 0,sackOK,eol], length 0 17:51:14.260378 IP 192.168.1.11.www > 10.10.10.10.64110: Flags [S.], seq 3171485713, ack 722619660, win 14480, options [mss 1460,sackOK,TS val 4294937443 ecr 1211694763,nop,wscale 3], length 0 17:51:14.260470 IP 10.10.10.10.64111 > 192.168.1.11.www: Flags [S], seq 483447265, win 65535, options [mss 1460,nop,wscale 3,nop,nop,TS val 1211694763 ecr 0,sackOK,eol], length 0 

我从远程networkingcurl(混淆的IP):

 $ curl -vv remote-unit:10001 * About to connect() to remote-unit port 10001 (#0) * Trying 99.99.99.99... Operation timed out * couldn't connect to host * Closing connection #0 curl: (7) couldn't connect to host 

由于您正在执行DNAT,为了让非公共服务器回复,它必须通过执行DNAT的计算机具有路由(无论是特定的还是默认的) – 如果路由不对称(即,回复不通过机器执行DNAT)或者根本没有有效的回复path,您的客户将无法得到答复。