无法使用公共 IP:80 连接在 ec2 上运行的 Web 服务

无法使用公共 IP:80 连接在 ec2 上运行的 Web 服务

我有这个 EC2 实例,其私有 IP 为 172.31.11.204,公共 IP 为 34.205.XX。我的 Web 服务在私有 IP 172.31.11.204 和端口 31336 上运行。

  1. 在 EC2 中,我可以使用以下方式访问该服务curl 172.31.11.204:31336
  2. 从我的电脑上,我可以使用 ec2 公共 IP 和端口 31336 访问它 curl 34.205.X.X:31336

但我无法使用端口 80 访问该服务,即 curl 34.205.26.X:80

我的安全组规则非常好。

另外,我尝试在 IPtables 中添加以下 nat 规则 -

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 172.31.11.204:31336

或者

sudo iptables -t nat -I PREROUTING --src 0/0 --dst 127.0.0.1 -p tcp --dport 80 -j REDIRECT --to-ports 31336

当我执行 tcpdump 时,我注意到传入连接符合上述规则,但返回流量却停留在 172.31.11.204.80

我搜索了很多次,但没有找到任何解决方案。

答案1

两个选项:

  1. 为什么不让你的应用程序监听端口 80 并完成它呢?由于你想将所有流量重定向到它,所以它不会降低安全性。

  2. 您可能需要在 INPUT 链中打开端口 80:

    iptables -I INPUT -p tcp --dport 80 -j ACCEPT
    

    然后是没有地址的重定向规则:

    iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 31336
    

    也许吧--to-ports 127.0.0.1:31336,不确定。

    还可以尝试设置sysctl -w net.ipv4.conf.eth0.route_localnet=1-可能被需要。

但是如果我是你的话我会简单地让应用程序在端口 80 上监听 ;)


更新:你应该提到监听的容器31336是由Kubernetes!在这种情况下,你需要的是服务它将接受外部连接并将其转发到

更多详细信息请参见此处:https://kubernetes.io/docs/concepts/services-networking/service/

希望有帮助!

相关内容