我有一台 Tomcat 监听 127.0.0.1:8780 的机器,我只想将所有 HTTP 流量重定向到该端口。它在本地主机上有效,但在同一个(虚拟)LAN 中的另一台机器上无效。
现在我故意允许所有入站流量以便找到正确的 NAT 配置,稍后我计划开始阻止一些端口并保持 HTTP 80 开放。
root@box1:~$ netstat -tulpn 活动互联网连接(仅限服务器) Proto Recv-Q Send-Q 本地地址 外部地址 状态 PID/程序名称 tcp 0 0 127.0.0.1:8780 0.0.0.0:* 侦听 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 状态 --state NEW -j RULE_0 iptables -A INPUT -m 状态 --state NEW -j RULE_0 iptables -A FORWARD -m 状态 --state NEW -j RULE_0 iptables -A RULE_0 -j LOG --log-level info --log-prefix “规则 0 -- 接受” iptables -A RULE_0 -j 接受 iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to 8780 iptables -t nat -A OUTPUT -o lo -p tcp --dport 80 -j REDIRECT --to-port 8780
root@box1:~# iptables -L 链输入(策略接受) 目标 保护 优化 源 目标 RULE_0 全部 -- 任何地点 任何地点 状态 NEW 链转发(策略接受) 目标 保护 优化 源 目标 RULE_0 全部 -- 任何地点 任何地点 状态 NEW 链输出(策略接受) 目标 保护 优化 源 目标 RULE_0 全部 -- 任何地点 任何地点 状态 NEW 链 RULE_0(3 个引用) 目标 保护 优化 源 目标 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.985 毫秒 来自 box1 (192.168.56.100) 的 64 字节:icmp_seq=2 ttl=63 时间=0.972 毫秒 来自 box1 (192.168.56.100) 的 64 字节:icmp_seq=3 ttl=63 时间=0.945 毫秒 来自 box1 (192.168.56.100) 的 64 字节:icmp_seq=4 ttl=63 时间=0.905 毫秒 ^C --- box1 ping 统计 --- 发送 4 个数据包,接收 4 个数据包,0% 数据包丢失,耗时 3003 毫秒 rtt 最小值/平均值/最大值/mdev = 0.905/0.951/0.985/0.048 毫秒
答案1
您的 tomcat 在 localhost: 上监听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
你的外部接口在哪里?