我有一个 http 服务器,监听 127.0.0.1 上的 8080(http)和 8081(https)端口
我有以下 iptables 规则用于重定向$external_ip
:
iptables -t nat -A PREROUTING -i eno1 -p tcp -d $external_ip --dport 80 -j DNAT --to-destination 127.0.0.1:8080
iptables -t nat -A PREROUTING -i eno1 -p tcp -d $external_ip --dport 443 -j DNAT --to-destination 127.0.0.1:8081
- HTTP(80 至 8080)运行正常
- HTTPS(443 至/自 8081)不起作用
该服务器是一个使用 apache APR 库来处理 https 连接的 Tomcat 实例。
我是否遗漏了什么?
更新:表 NAT 的链:$ iptables -t nat -L -n -v
Chain PREROUTING (policy ACCEPT 1111 packets, 69838 bytes)
pkts bytes target prot opt in out source destination
14 724 REDIRECT tcp -- eno1 * 0.0.0.0/0 101.0.105.178 tcp dpt:80 redir ports 8080
6 360 REDIRECT tcp -- eno1 * 0.0.0.0/0 101.0.105.178 tcp dpt:443 redir ports 8081
Chain INPUT (policy ACCEPT 1064 packets, 66008 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 9 packets, 596 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 9 packets, 596 bytes)
pkts bytes target prot opt in out source destination
答案1
iptables -t nat -L -n -v
我可以看到您的规则是正确的。正如您所评论的那样,防火墙阻止流量的可能性已得到验证。如的输出中显示的字节和数据包计数器所示,NAT 规则已被多次命中。
您需要确保您可以在本地访问端口 443,并且您可以使用 验证您的 Web 服务器是否正在监听此端口netstat -lnp
。
答案2
解决方法(有点)
iptables、Tomcat 或 Apache APR 都不喜欢从环回接口进行监听。
我最终通过使用除以下之外的界面使其工作洛(127.0.0.1)
iptables -t nat -A PREROUTING -i eno1 -p tcp -d $external_ip --dport 80 -j DNAT --to-destination $local_ip:8080
iptables -t nat -A PREROUTING -i eno1 -p tcp -d $external_ip --dport 443 -j DNAT --to-destination $local_ip:8081
在我的例子中,我使用了虚拟接口(Linux模块:假的) 因为我希望 Tomcat 从“私有”IP 进行“监听”。
我把这个发布出来作为对未来遇到和我一样问题的人的回答,但我不会把这个答案标记为已接受的答案,因为我既没有解决使用环回的问题,也没有解释为什么它可以正常工作。http但不是https。