我如何根据现有的iptables端口转发规则在内部访问我的WAN IP?

我有我的Debian Squeeze服务器上新设置的IPTABLES,我有IP伪装和端口转发工作成功,但是,如果我inputURL地址我的广域网IP或DynDNS主机名,我得到一个连接错误。 与以前的消费者路由器,如果我已经去http:// [myhostname] ,它会加载10.0.0.3:80下面指定。 这工作外部(使用3G手机testing),但不是内部(使用任何内部浏览器)。 所有转发的端口都是一样的。 我试图让端口转发内部工作。

如果有人知道这个正确的咒语,将不胜感激。 我试图search谷歌,但我不确定正确的search条件的问题。

我的configuration如下:

# Generated by iptables-save v1.4.8 on Thu Apr 14 15:58:27 2011 *mangle :PREROUTING ACCEPT [1216168:676166344] :INPUT ACCEPT [2375:260404] :FORWARD ACCEPT [1213765:675875465] :OUTPUT ACCEPT [1930:203384] :POSTROUTING ACCEPT [1215695:676078849] -A FORWARD -o ppp0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1400:65495 -j TCPMSS --clamp-mss-to-pmtu COMMIT # Completed on Thu Apr 14 15:58:27 2011 # Generated by iptables-save v1.4.8 on Thu Apr 14 15:58:27 2011 *filter :INPUT ACCEPT [2375:260404] :FORWARD DROP [0:0] :OUTPUT ACCEPT [1930:203384] -A FORWARD -i ppp0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT -A FORWARD -i eth0 -o ppp0 -j ACCEPT -A FORWARD -d 10.0.0.8/32 -p tcp -m tcp --dport 80 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT -A FORWARD -d 10.0.0.3/32 -p tcp -m tcp --dport 22 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT -A FORWARD -d 10.0.0.8/32 -p tcp -m tcp --dport 1723 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT -A FORWARD -d 10.0.0.8/32 -p udp -m udp --dport 1723 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT -A FORWARD -d 10.0.0.3/32 -p tcp -m tcp --dport 21 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT -A FORWARD -d 10.0.0.3/32 -p tcp -m tcp --dport 45631 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT -A FORWARD -d 10.0.0.3/32 -p tcp -m tcp --dport 56630 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT -A FORWARD -d 10.0.0.3/32 -p udp -m udp --dport 56630 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT COMMIT # Completed on Thu Apr 14 15:58:27 2011 # Generated by iptables-save v1.4.8 on Thu Apr 14 15:58:27 2011 *nat :PREROUTING ACCEPT [5529:468229] :POSTROUTING ACCEPT [2335:258730] :OUTPUT ACCEPT [21:1367] -A PREROUTING -i ppp0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.0.0.8:80 -A PREROUTING -i ppp0 -p tcp -m tcp --dport 22 -j DNAT --to-destination 10.0.0.3:22 -A PREROUTING -i ppp0 -p tcp -m tcp --dport 1723 -j DNAT --to-destination 10.0.0.8:1723 -A PREROUTING -i ppp0 -p udp -m udp --dport 1723 -j DNAT --to-destination 10.0.0.8:1723 -A PREROUTING -i ppp0 -p tcp -m tcp --dport 21 -j DNAT --to-destination 10.0.0.3:21 -A PREROUTING -i ppp0 -p tcp -m tcp --dport 45631 -j DNAT --to-destination 10.0.0.3:45631 -A PREROUTING -i ppp0 -p tcp -m tcp --dport 56630 -j DNAT --to-destination 10.0.0.3:56630 -A PREROUTING -i ppp0 -p udp -m udp --dport 56630 -j DNAT --to-destination 10.0.0.3:56630 -A PREROUTING -i ppp0 -p tcp -m tcp --dport 443 -j DNAT --to-destination 10.0.0.3:22 -A POSTROUTING -o ppp0 -j MASQUERADE COMMIT # Completed on Thu Apr 14 15:58:27 2011 

我不确定我能否看到这一点。 通常情况下,如果您有内部资源需要在内部和外部访问,则使用这种设置。 您的外部访问是通过端口转发实现的,并且您已经确认这是正常工作。

对于内部访问,你应该使用拆分DNS。 这是一个设置,您的内部DNS服务器parsing与您的公共DNS相同的名称,但内部IP地址。 这可以通过使用单独的DNS服务器或一个DNS服务器与单独的视图来实现内部和外部访问。

这能解决你的问题吗?

这是行不通的。 原因是数据包如何遍历netfilter / xtables表和路由发生。

  1. 数据包进入界面
  2. 数据包得到了DNAT-ed,对于来自eth0的数据包不会发生
  3. 数据包被路由。 在这种情况下,它被路由到ppp0接口
  4. 由于数据包是注定要路由器,它由INPUT链处理
  5. 数据包通过INPUT链,由TCP堆栈处理
  6. 本地端口80未打开; 数据包被丢弃

正如你所看到的,DNAT在事件链中发生得太早了。