通过 SSH 搭建内网穿透代理

   免费的内网穿透,内网端口映射工具,无需设置路由器,公网IP,不限流量,不限连接数
了解更多  立即下载
FinalShell最好用的国产SSH客户端,一体化服务器管理软件,点击获取

起因

由于某次重大的会议召开,所以学校的网络各种入口(包括主站…这事儿办的)都被封掉了,但由于某种校外关注学校发展的需求,需要在学校开一个反向代理供校外同学使用。

分析

首先交代网络环境,校园网和 DO 的 VPS 都有 IPv4 和 IPv6 地址。所以首先想到的就是通过 IPv6 的地址访问。理论上是没有问题的,用 w3m 强制 IPv6 访问域名也可以到主页,但是连上ss用浏览器访问就是连不上,可能是默认使用 v4 访问,换用 IPv6 的地址直接上的时候却导向了另一个服务。域名和 IP 服务不一样,当时就有点懵,查过之后才发现,原来是 nginx 设置默认域名导向的不是我需要的服务,这就很尴尬了,而且即使使用 IP 可以访问,之后的域名还是不能强制使用 IPv6,不得已放弃这个方案。
想起之前买了一台路由器,刷好了 PandoraBox,上面也跑着 s
s 的透明代理,日常使用还是比较舒服的。闲置的路由器可以用作代理,但令人棘手的是路由器没有公网IP。不过令人欣慰的是路由器也有 IPv6 地址,所以考虑开个两层代理,先访问到 VPS,获取到IPv6 的地址,再到学校里的路由器上。

解决

SSH(Secure Shell)是一个贼有用的工具,之前只用过它连接过远程服务器,要不就是传个文件,没有想到 SSH 还有端口转发的作用。常用的命令有:

-C 压缩数据传输
-f 将 ssh 转到后台运行,即认证之后,ssh 自动以后台运行。不在输出信息
-n 将 stdio 重定向到 /dev/null,与 -f 配合使用
-N 不执行脚本或命令,即通知 sshd 不运行设定的 shell 通常与 -f 连用
-T 不分配 TTY 只做代理用
-q 安静模式,不输出 错误/警告 信息

这次用到的是这条命令:

ssh -CfNR <mapped_port>:<localhost>:<mapping_port> <user_name>@<server_address>

这条命令将 server 的 mappingport 映射到 localhost 的 mappedport。
究其原理就是开启一个socket,当远程端口 mappingport 有传入连接时,将连接传给 localhost 的 mappedport。这样就能将内网路由器的端口转发给外网。

这样我们就可以在路由器上开一个ss-server或者直接调用ss-local的本地端口,将其转发到外网 VPS 上。本来想将 local 的 socks5 端口转发出去当作代理,但很坑的是 tcp 转发总是失败,提示:

ssh: remote tcp forward request failed

所以只能将 socks5 代理转换成 http 代理,这里用到了 privoxy。路由器上很方便地就安装了:

opkg install privoxy

用 privoxy 进行完代理转换,在进行端口转发,就能很方便地设置 http 代理了。

从头梳理一遍:

 1.ssh -CfNR <mapped_port>:<localhost>:<mapping_port> <user_name>@<server_address>

这里需要修改 server 上的 /etc/ssh/sshd_config:
找到GatewayPorts,将其变为yes
GatewayPorts yes

2. /etc/init.d/privoxy restart

之前需要修改配置 /etc/privoxy/config
confdir /etc/privoxy
logdir /var/log
filterfile default.filter
logfile privoxy
actionsfile match-all.action # Actions that are applied to all sites and maybe overruled later on.
actionsfile default.action # Main actions file

listen-address 192.168.1.1:8118
toggle 1
enable-remote-toggle 1
enable-remote-http-toggle 0
enable-edit-actions 1
enforce-blocks 0
buffer-limit 4096
forwarded-connect-retries 0
accept-intercepted-requests 0
allow-cgi-request-crunching 0
split-large-forms 0
keep-alive-timeout 300
socket-timeout 300
permit-access 192.168.1.0/24
forward-socks5 / 192.168.1.1:1081 .

未经允许,不得转载本站任何文章:内网穿透 » 通过 SSH 搭建内网穿透代理
分享到: 更多 (0)
   免费的内网穿透,内网端口映射工具,无需设置路由器,公网IP,不限流量,不限连接数
了解更多  立即下载
FinalShell最好用的国产SSH客户端,一体化服务器管理软件,点击获取

评论 抢沙发

评论前必须登录!