我有一个Tomcat在127.0.0.1:8780上监听的单个盒子,我只是希望所有的HTTPstream量都被redirect到那个端口。 它从本地主机运行,但不是来自同一(虚拟)局域网中的另一台机器。
目前我故意允许所有入站stream量来find正确的NATconfiguration,稍后我打算开始阻塞一些端口,并保持HTTP 80打开状态。
root @ box1:〜$ netstat -tulpn 活动的Internet连接(仅限服务器) 原始Recv-Q发送-Q本地地址外部地址状态PID /程序名称 tcp 0 0 127.0.0.1:8780 0.0.0.0:* LISTEN 779 / java udp 0 0 0.0.0.0:29411 0.0.0.0:* 419 / dhclient udp 0 0 0.0.0.0:68 0.0.0.0:* 419 / dhclient udp6 0 0 ::: 56705 ::: * 419 / dhclient
iptables -N RULE_0 iptables -A OUTPUT -m状态 - 状态NEW -j RULE_0 iptables -A INPUT -m状态 - 状态NEW -j RULE_0 iptables -A FORWARD -m状态 - 状态NEW -j RULE_0 iptables -A RULE_0 -j LOG - 日志级信息 - 日志前缀“RULE 0 - ACCEPT” iptables -A RULE_0 -j ACCEPT iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT - 到8780 iptables -t nat -A OUTPUT -o lo -p tcp --dport 80 -j REDIRECT - 到端口8780
root @ box1:〜#iptables -L 连锁input(政策接受) 目标人select源目的地 RULE_0所有 - 任何地方任何地方状态新 连锁FORWARD(政策接受) 目标人select源目的地 RULE_0所有 - 任何地方任何地方状态新 链式输出(策略ACCEPT) 目标人select源目的地 RULE_0所有 - 任何地方任何地方状态新 链RULE_0(3参考) 目标人select源目的地 LOG全部 - 任何地方的任何地方LOG级别信息前缀“RULE 0 - ACCEPT” LOG全部 - 任何地方的任何地方LOG级别信息前缀“RULE 0 - ACCEPT” 随时随地接受
root @ box1:/ etc / halo#nc localhost 80; echo $? 0
usr @ box2:〜$ nc box1 80; echo $? box1 [192.168.56.100] 80(http):连接超时 1
usr @ box2:〜$ ping box1 PING box1(192.168.56.100)56(84)字节的数据。 来自box1(192.168.56.100)的64个字节:icmp_seq = 1 ttl = 63时间= 0.985ms来自box1(192.168.56.100)的64个字节:icmp_seq = 2ttl = 63时间= 0.972ms来自box1的64字节(192.168.56.100): icmp_seq = 3 ttl = 63时间= 0.945 ms来自box1的64字节(192.168.56.100):icmp_seq = 4 ttl = 63时间= 0.905 ms ^ C --- box1 ping统计---发送了4个数据包,接收到了4个数据,分组丢失,时间3003ms rtt min / avg / max / mdev = 0.905 / 0.951 / 0.985 / 0.048ms
你的tomcat监听本地主机: 127.0.0.1:8780 : 127.0.0.1:8780 ,而你尝试连接到box1 ,它具有不同的IP地址: 192.168.56.100
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 127.0.0.1:8780 echo 1 > /proc/sys/net/ipv4/conf/eth0/route_localnet
eth0是你的外部接口。