我最近使用Werner Puschitz提供的指令在端口80上设置了Tomcat。 实质上,我不得不执行这两个iptables命令:
iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080 iptables -t nat -I OUTPUT -p tcp --dport 80 -j REDIRECT --to-ports 8080
我实现了Tomcat的目标,但是搞砸了一些其他的东西。 例如,当我尝试运行`yum update yum'时,出现以下错误:
http://mirror.stanford.edu/yum/pub/centos/5.5/addons/x86_64/repodata/repomd.xml: [Errno 4] IOError: <urlopen error (111, 'Connection refused')> Trying other mirror. http://mirrors.adams.net/centos/5.5/addons/x86_64/repodata/repomd.xml: [Errno 4] IOError: <urlopen error (111, 'Connection refused')> etc...
WGET以类似的方式失败。
我知道,iptables的规则是责怪,因为删除他们解决了YUM和WGET的问题。 那么,为什么这些规则搞乱了YUM和WGET呢? 我猜这是输出规则,对吧? 它究竟做了什么,为什么这是必要的? 这种讨厌的副作用是否可以避免?
如果您在服务器上运行Tomcat,则需要将入站stream量redirect到端口8080而不是出站。
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-ports 8080
第二条规则redirect从链接中提到的运行Tomcat的本地节点生成的端口80上的传入请求。 只有当你想从服务器端访问端口80上的tomcat时才需要。