将端口转发(或者更确切地说是“克隆”)到应用程序的另一个端口?

将端口转发(或者更确切地说是“克隆”)到应用程序的另一个端口?

我有一个应用程序在端口 32400(Plex 服务器)上运行,并且端口号无法更改(但如果可能的话,这是值得欢迎的,但在问题中仍然假设我有一个无法更改的应用程序)。我想通过 HTTPS 连接从互联网访问该应用程序。有一个工具“ssl-proxy-linux”基本上可以在启用 LetsEncrypt SSL 的情况下将端口 443 转发到另一个端口(例如 1443),但为了将此工具应用于应用程序,该应用程序需要在端口 443 上运行。

因此,流程基本上应该是这样的:在 32400 上运行的应用程序 -> ** 一些进行端口转发的软件?克隆?将端口 32400 复制到 443 ** -> 在 443 上运行的相同应用程序 -> LetsEncrypt SSL 应用程序 -> 1443(现在我正在从类似的 URL 访问该应用程序https://myplexapp.com:1443

我尝试了 socat socat TCP-LISTEN:32400,fork TCP:127.0.0.1:443,但出现E bind(5, {AF=2 0.0.0.0:32400}, 16): Address already in use错误。显然,这个工具用于端口转发,而不是端口克隆,我想?

那么,这种事情可能实现吗?如何实现?

答案1

我想通过 HTTPS 连接从互联网访问该应用程序。

这通常是通过反向代理。原理是反向代理获取 HTTPS 请求,并配置为将这些请求传递到端口 32400 上的 Plex。因此流程本质上是:

Internet --> Router (443) --> Reverse Proxy (443 -> 32400) --> Plex

关于您在原始问题中提到的程序,我不熟悉该工具,因此我无法评论您如何设置它。但仅供参考,Web 服务器(例如 Apache 和 Nginx)支持 Let's Encrypt 证书,并且还可以充当反向代理(从个人经验来看,在其中一个服务器后面设置 Plex 相对简单)。

对于 URL 访问,您的域将指向您的路由器,并且路由器将端口转发请求到反向代理。

答案2

我尝试了 socat socat TCP-LISTEN:32400,fork TCP:127.0.0.1:443 但出现 E bind(5, {AF=2 0.0.0.0:32400}, 16): Address already in use 错误。

你告诉它端口 32400 并连接到端口 443。根据你的问题,这有点倒退了——你拥有的应用程序是已经监听端口 32400,你希望中继工具监听 443 端口,并且连接到本地主机:32400。


nftables 中的“dnat”功能(或 iptables 中的 REDIRECT)可能是更好的选择,因为它不会中继任何数据,而是重写实际的连接尝试。添加一条匹配端口 443 和 DNAT 到 127.0.0.1:32400 的规则将实现您想要的效果。

相关内容