如何链接 SOCKS 代理?
Posted
技术标签:
【中文标题】如何链接 SOCKS 代理?【英文标题】:How to chain SOCKS proxies? 【发布时间】:2014-11-05 12:34:24 【问题描述】:我有一个从我的笔记本电脑(机器 A)到机器 B 的工作袜子代理:
[A]$ ssh -ND 8888 B
我可以设置firefox在本地8888端口使用socks代理,浏览正常。到目前为止一切顺利。
但我在机器 B 和 C 之间也有一个 socks 代理:
[B]$ ssh -ND 8157 C
所以我可以像浏览 C 一样浏览 B。
有没有办法链接两个代理,以便我能够在使用与 C 的连接时在本地(在 A 上)使用 firefox?也就是说,以某种方式转发所有 firefox 的 socks 请求从 A 到 C 的路。A 和 C 不能直接看到对方,但我到处都有完全的 root ssh 访问权限。所有机器都是 Debian。
请注意,我不想转发单个端口(例如 80),我想要一个完整的链式 socks 代理。
【问题讨论】:
相关文档:en.wikibooks.org/wiki/OpenSSH/Cookbook/Proxies_and_Jump_Hosts 【参考方案1】:在机器B上设置动态代理到机器C
ssh -ND 8888 user@C
然后在机器 A 上
ssh -L 8888:localhost:8888 user@B
这使得机器 B 上的 SOCKS 连接,并使机器 B 的端口 8888 可以从机器 A 上的 localhost 端口 8888 连接。
如果你不能直接连接到机器 B,这可能需要打开 3 个 ssh 连接。如果你可以连接到机器 B,你只需要 2 个,并且可以在需要时实际链接命令。
【讨论】:
【参考方案2】:这是我使用的两种解决方案。
公共 SOCKS 代理 在机器 B 上的 public 端口上启动 SOCKS 代理
[machineB]$ ssh -ND <public_ip>:8080 user@machineC
或者,从机器 A 开始(两跳)
[machineA]$ ssh user@machineB ssh -ND <machine_b_public_ip>:8080 user@machineC
然后将您的浏览器代理设置为端口 8080
注意:确保在机器 B 的防火墙上打开端口 8080
隧道代理 将 localhost SOCKS 代理从机器 B 隧道传输到机器 A
单独的命令:
[machineB]$ ssh -ND 8080 user@machineC
[machineA]$ ssh -L 8080:localhost:8080 user@machineB
或一次性完成:
[machineA]$ ssh -L 8080:localhost:8080 user@machineB ssh -ND 8080 user@machineC
现在将您的浏览器代理设置为端口 8080 上的 localhost
【讨论】:
【参考方案3】:您可以将 ssh 从机器 a 反转到机器 b,然后将其移植到机器 c,即 机器c
ssh -R 6333:localhost:22 user@machine_b_ip
这将通过加密隧道将机器 c 连接到 b 并在端口 22 上侦听现在连接到机器 b 上的端口 6333 的任何内容都将发送到端口 22 上的 machine_c_ip
现在从机器 a 连接到 b
ssh user_oof_machine_c@machine_b -p 6333
现在您在端口 6333 上连接到机器 b,从机器 c 发送的任何内容都将转发到机器 a
你可以反向处理不同的端口来运行从 a 到 c 的 cmds
我知道这不是袜子链,但它是解决问题的技巧
【讨论】:
以上是关于如何链接 SOCKS 代理?的主要内容,如果未能解决你的问题,请参考以下文章
Windows 下 Git SSH 连接方式配置 Socks 代理
CobaltStrike使用-第八篇-隧道技术(socks转发ssh隧道CS转发监听器)