[折腾]使用SSH服务实现一个socks5代理服务器

本文介绍SSH动态转发功能,包括如何使用ssh命令配置本地监听端口并基于SOCKS5协议转发流量到远程主机,实现代理功能。同时展示了如何在远程主机上搭建简单的代理服务器,并进一步利用ssh的远程端口转发功能将端口映射到另一台远程主机。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

其实使用的是ssh的动态转发功能。

ssh -D 12345 -N -T root:remotehost

-D [bind_address:]port 指定监听的端口,会在本地监听该端口,并将请求到该端口流量基于 SOCKS5 协议转发到远程主机上,其中 [bind_address:]可以不填,当不写或者为 * 时表示监听全部地址。示例:-D *:8081,-D 8081,-D 127.0.0.1:8081,-D 192.168.0.1:8081
-N 不执行远程命令,仅仅用于端口转发
-T 不为该命令分配伪终端

ssh 的动态转发会在本地创建一个监听端口,并且将请求到该端口的流量全部转发到远程主机上,从而实现代理的功能,我们可以使用 curl 命令测试代理是否成功:

curl -x socks5://localhost:12345 https://www.csdn.net

通过上面的命令,我们可以通过本地12345代理,将本地请求csdn的流量转发给远程主机,由远程主机帮我们执行请求后将结果返回给我们。

在远程主机上实现一个简单的代理服务器

基于上面的逻辑,我们可以在远程主机创建一个简单的代理服务器:

ssh -D 12345 -N -T root@localhost

这种方式相当于使用 ssh 登录了当前主机,并创建了一个动态转发的接口,我们可以使用 curl 进行测试:

curl -x socks5://localhost:12345 https://www.csdn.net

这样的话我们就可以将当前主机的 13245 端口暴露出去,外部请求就可以将当前主机作为一个代理服务器实现请求的代理了。
当然这种实现的是一个简单的代理服务器,相当于将当前主机完全暴露到了外面,而且没有任何安全认证,如果有需要的话还是使用 squid 这类功能更加强大的代理服务器。

在上面的基础上,我们还可以使用 ssh 的基于远程端口代理的方式将这个端口映射到远端主机:

ssh -R [本地绑定地址:]端口:[远程绑定地址]:远程端口 -N -T root@remotehost

该命令执行后,相当于在远程主机上创建了一个监听端口,并且将请求到该端口的所有流量都转发到了本地的端口,我们只需要将本地的端口指定为刚刚我们创建的动态转发监听端口即可。

ssh -R 12345:localhost:12345 -N -T root@remotehost

参考资料

Linux curl命令详解

搭建一个SOCKS代理服务器

Socks5代理服务器搭建

Linux搭建Socks5代理服务器

彻底搞懂SSH端口转发命令

SSH 端口转发

ssh端口转发的三种方式

ssh-port-forwarding

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值