仅针对一个端口的路由/NAT/端口转发?

仅针对一个端口的路由/NAT/端口转发?

我不确定该用什么词来表达,也不知道该用什么工具。我唯一拥有的是一个我想实现的目标。

我有两台 Linux 机器(A 和 B)和一个远程服务。该服务正在监听端口 16000。防火墙阻止了来自机器 A 端口 16000 的传出连接,但阻止了 B 上的传出连接。我需要从 A 访问该服务。因此,它可能需要通过 B 进行路由(正确的说法?)。我无法修改访问该服务的程序(因此它将始终尝试端口 16000)。

我知道有很多关于类似主题的教程,但我不知道应该遵循哪一个,因为显然有很多可能性。我对这两台机器都有完全访问权限。我是一个简单的开发人员,而不是 Linux 管理员,但这对我来说确实是一个障碍 :( 实现这一目标的最佳方法是什么?我应该在机器 A 和机器 B 上执行什么?

谢谢。

答案1

我不知道最好的方法,有几种

修复防火墙

我觉得这最好。从你的问题中看不出防火墙在哪里(它是一个独立的设备、路由器的一个功能,还是 A 上的软件防火墙?)

路由

您也许可以将所有流量从 A 路由到 B,但我会避免这样做。

您必须为 A 配置一个静态网络配置,将 B 的地址作为默认网关。

您必须将 B 配置为单臂路由器。

您可能必须在真正的 LAN-Internet 路由器上执行一些额外的 NAT 技巧,以便将 A 的返回流量传送到 B。

将 A 单独放在子网上并为 B 添加 NIC 可能会更容易。

等待看看是否有人能想出一个简单的解决方案。我会先尝试下面的另一个想法。

转发

例如,您可以/etc/host在 A 上添加一个条目,将服务的 DNS 名称与 B 的 IP 地址关联起来。通常,名称解析器首先查阅 /etc/hosts(如果不是,您可以指定顺序 - 详细信息取决于操作系统)

在 B 上使用类似socat设置一个转发器/中继器,监听端口 16000,充当代理。请参阅socat文档。

答案2

如果从服务器 A 到 16000 的任何传出连接被阻止,并且应用程序只能连接到端口 16000,那么您唯一的希望就是允许您连接到本地端口 16000(服务器 A 中的本地)。

如果可能的话,只需设置从本地端口 16000 到服务器 B 的 SSH 端口转发:

ssh -L 16000:service:16000 server_b

相关内容