我有一个在本地运行的测试应用程序,并使用远程端口转发让其他人访问它。
一切都运行正常,直到我在 EC2 上建立了一个新的服务器实例。
EC2 服务器运行 CentoOS 7。没有运行防火墙,我已将 SELinux 设置为宽容,并在安全组规则中打开了一个端口。然后我运行
ssh -v -N -R port_num:localhost:port_num
(其中 port_num 实际上是端口号),我可以看到连接正在建立。我还检查了远程服务器上的 netstat,可以看到正在监听的端口号。
这曾经有效,但在这台机器上却不行。我认为这要么与 EC2 有关,要么与 CentOS 7 有关,但已经没什么可尝试的了。
在远程服务器上运行 tcpdump 时,我确实注意到 eth0 上传入的请求长度为 0。不确定为什么或者这不是一个转移注意力的花招,但值得一提。
对于我遗漏的内容您有什么想法吗?
谢谢!
编辑1
添加了一个快速 Web 应用程序,用于侦听我想要转发的端口,并显示“Hello, World!”页面。我可以毫无问题地访问它,因此 EC2 实例上的端口 8080 是开放的并且正在接收请求。只是端口转发不起作用。
我试过
ssh -v -N -R 0.0.0.0:port_num:localhost:port_num
但这似乎也没什么帮助。
编辑2
如果我在本地运行我的 Web 应用程序,运行ssh -N -R port_num:localhost:port_num
,然后从另一个终端 ssh 到远程服务器,然后curl http://localhost:port_num/test
,我会从本地服务器收到响应。因此转发正在工作。只是来自外部浏览器并发往 eth0 的请求不会被转发。不确定这是如何在旧服务器上实现的(它刚刚工作),有什么想法我应该做些什么才能使其工作?同样,iptables 被禁用,在旧服务器上也被禁用。
答案1
哦,我真傻。我忘了一个步骤,即GatewayPorts on
在 sshd_config 中设置。
大惊小怪。希望这篇文章将来能帮到别人。