用两台服务器做一个代理

用两台服务器做一个代理

我想实现一个中间有两个(A 和 B)服务器的代理。流量从我的计算机到服务器B,然后到服务器A,然后获取数据。我发现在 ~/.ssh/config 中使用此配置:

HOST B
    HostName B
    user debian
    DynamicForward 0.0.0.0:1081

我可以使用我的 1081 端口作为代理。但现在不知道如何通过A代理B的所有流量。

这是我的 ssh 版本:

OpenSSH_7.2p2 Ubuntu-4ubuntu2.8、OpenSSL 1.0.2g 2016 年 3 月 1 日

答案1

B 只是处理它到达 A 的所有内容。A 必须根据其数据选择从何处检索数据。显然只有 A 应该有动态转发隧道中,B的作用只是一个连接的中间主机。通常B应该只需要经典本地转发向 A 提出疑问。

这可以通过不同的方式完成,但最简单和安全的方法利用代理跳转该功能将显示 A 就好像它可以直接访问一样,因此不再需要考虑 B 将如何与预期的端口转发交互。人们可以认为B几乎是不可见的。所以最后,可以放入以下配置~/.ssh/config

Host B
    User userb

Host A
    User usera
    ProxyJump B
    DynamicForward 1081

仅调用:

ssh A

如果没有配置文件,等效的命令行将是:

ssh -D 1081 -J userb@B usera@A

更新: 应该SSH的版本早于 7.3(因为它似乎是针对 OP 的),代理跳转仍然可以替换为代理命令+ssh-W像这样:

作为配置文件~/.ssh/config

Host B
    User userb

Host A
    User usera
    ProxyCommand ssh -W %h:%p B
    DynamicForward 1081

或者没有配置文件的等效命令行:

ssh -D 1081 -o 'ProxyCommand ssh -W %h:%p userb@B' usera@A

SOCKS5 API 将在客户端上可用localhost:1081(除非放回0.0.0.0:1081(或使用网关端口/-G)以使其可供其他客户端使用)。在引擎盖下,由一对管道控制,一个生成的子SSH进程将通过主机 B 建立一条隧道,并将 A 的 ssh 服务器呈现给初始主机SSH命令:整个 ssh 都是通过隧道传输的,这就是为什么不需要配置特定的附加端口转发。

相关内容