首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用两个服务器制作一个代理

用两个服务器制作一个代理
EN

Unix & Linux用户
提问于 2019-11-22 19:52:56
回答 1查看 975关注 0票数 2

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

代码语言:javascript
复制
HOST B
    HostName B
    user debian
    DynamicForward 0.0.0.0:1081

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

这是我的ssh版本:

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

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2019-11-22 20:29:03

B只是处理它得到的一切。A必须根据其数据选择在哪里检索数据。显然只有A应该有DynamicForward隧道,B的角色只是连接的中间主机。通常B只需要一个经典的LocalForward就可以将查询呈现给A。

这可以通过不同的方式完成,但最简单和最安全的方法利用了ProxyJump特性,它将显示A就好像它是可直接访问的,因此不再需要考虑B将如何与预期的端口转发交互。人们可以认为B几乎是无形的。因此,下面的配置最终可以放在~/.ssh/config中:

代码语言:javascript
复制
Host B
    User userb

Host A
    User usera
    ProxyJump B
    DynamicForward 1081

仅在以下情况下调用:

代码语言:javascript
复制
ssh A

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

代码语言:javascript
复制
ssh -D 1081 -J userb@B usera@A

更新:如果ssh的版本超过7.3 (看起来是用于OP的),ProxyJump仍然可以被ProxyCommand +ssh -W替换,如下所示:

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

代码语言:javascript
复制
Host B
    User userb

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

或者没有配置文件,则使用等效的命令行:

代码语言:javascript
复制
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是隧道化的,这就是为什么不需要配置特定的附加端口转发。

票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/553681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档