如何向外界开放端口?

如何向外界开放端口?

我有一个远程服务器,IP 为 111.222.333.444。我想在该机器上运行一个 http 服务器,该服务器在 localhost:8000 上运行

我如何从外部(从我希望的机器)向 111.222.333.444:6000 发出请求,以到达在远程服务器上的 localhost:8000 上运行的 http 服务器。

我使用的是 ufw。在/etc/sysctl.confDEFAULT_FORWARD_POLICY中启用了 ip_forwarding/etc/default/ufw

尝试过/etc/ufw/before.rules

*nat
:PREROUTING ACCEPT [0:0]
-A PREROUTING -p tcp --dport 6000 -j REDIRECT --to-port 8000
COMMIT

在该行中-A PREROUTING -p tcp --dport 6000 -j REDIRECT --to-port 8000,如果没有指定流量应进入的 IP,是否会将其设置为eth0接口的默认 IP 地址?

使用 Ubuntu-20.04-amd64

如果有人能告诉我,他将如何编写这个东西来实现相同的目的。通过编辑 iptables,或 ufw 等。

更新: 从头开始。Http 服务器正在 上运行localhost:8000。我的ufw status显示如下

To                         Action      From
--                         ------      ----
8000/tcp                   ALLOW       Anywhere                  
6000/tcp                   ALLOW       Anywhere 
8000/tcp (v6)              ALLOW       Anywhere (v6)             
6000/tcp (v6)              ALLOW       Anywhere (v6)

/etc/ufw/before.rules在*filter 之前添加以下行:

:PREROUTING ACCEPT [0:0]

-A PREROUTING -p tcp --dport 6000 -j REDIRECT --to-port 8000

什么应该允许我在远程服务器上键入命令行 curl localhost:6000curl 127.0.0.1:6000获取响应,正如我所理解的那样。但我收到的是 - curl: (7) Failed to connect to localhost port 6000: Connection refused

更新:/etc/ufw/before.rules从 改为-A PREROUTING -p tcp --dport 6000 -j REDIRECT --to-port 8000

-A INPUT -i eth0 -p tcp --dport 6000 -j ACCEPT
-A INPUT -i eth0 -p tcp --dport 8000 -j ACCEPT
-A PREROUTING -t nat -i eth0 -p tcp --dport 6000 -j REDIRECT --to-port 8000

现在有了新规则,当我从终端发出 curl 请求时,它会挂起。而不是产生错误。

答案1

端口转发

如果您想从公共互联网访问本地主机,使用 Ngrok 可能会对您有所帮助。恩格罗克“将您的本地开发服务器暴露给互联网”,为您提供一个唯一的随机子域名 URL,例如 abcdef.ngrok.io,以便从该子域名访问您的本地主机。如果您拥有自定义域名,则可以选择一个(有关自定义域的更多信息请参见此处)

注意::不幸的是,您不必使用此方法编辑 IP 表。

答案2

请在服务器上尝试以下命令:

$ rm -f /tmp/f ; mkfifo /tmp/f
$ nc -l 6000 </tmp/f | nc localhost 8000 >/tmp/f

这会将进入服务器 6000 端口的所有 TCP 流量内部重定向到 TCP 端口 8000。

请注意,这仅适用于单个连接,并且必须为每个新连接重复上述第二条命令。因此,这实际上不是一个解决方案,而只是一个测试,看看这是否是你真正想要做的。

相关内容