我正在尝试创建一个设置,在其中我可以连接到主机上运行的某些服务,该主机只能通过主机的实际名称和服务实际使用的端口通过 SOCKS 代理访问(以便尝试使用该服务的应用程序无需更改即可工作) 。为此,我按照以下步骤操作:
- 使用与某个中间主机的 SSH 连接打开 SOCKS 隧道,该中间主机可以访问运行该服务的主机。
fc00::1
为环回设备分配一些未使用的 IPv6 地址(例如)。- 用于
socat
打开我想要访问该地址的服务所使用的端口,并将连接请求转发到 SOCKS 代理。 /etc/hosts
为我想要访问的主机添加一个条目以及分配给环回设备的地址。
我计划自动化所有这些步骤。除了一个问题之外,这非常有效;在我的本地计算机上运行的许多服务使用我想要在远程主机上访问的相同端口(例如 SSH、HTTP ...),并且至少默认情况下它们侦听所有接口(即使用“任何”地址0.0.0.0
/ ::0
)。这可以防止任何其他进程打开同一端口,即使只是在特定地址上。有些服务,我可以重新配置为仅侦听原始环回地址(127.0.0.1
/ ::1
),但对于某些服务(例如 SSH),它没有意义,并且对于我使用的某些用户态应用程序,我无法事件控制哪些端口您使用哪些地址打开。
一种可以想到的解决方案是,如果可以标记一个接口(我可以创建第二个环回设备)或一个地址,以便在打开侦听套接字时指定“任何”地址的进程不使用该地址。
这是否可能,或者是否有其他方法可以解决这个问题?