ssh内网穿透后的socks代理

本文继续推进上文《三条命令助你完成ssh内网穿透》内容,之前当我们完成内网穿透后,可以通过ssh客户端的ProxyCommand来完成Ansible-playbook的运行。现在我们需要有进一步的需求,比如访问部署在客户内网的一些服务时,就需要用到ssh的端口转发功能了。

简单来说,ssh的端口转发分为三种模式:

本地模式 访问本地端口,通过ssh转发到远端服务器端口,命令如下:ssh -L <local port>:<remote host>:<remote port> <SSH hostname>远端模式 远端服务器访问本地端口,通过ssh转到本地端口,命令如下:ssh -R [<bindHost>:]<sourcePort>:<forwardToHost>:<onPort> <connectToHost>动态转发 一个SOCKS代理,动态转发本地端口到远端服务器,命令如下:ssh -D <local port> <SSH Server>

先简单描述下我的网络结构,如下:

代号角色机器位置地址账户ssh 端口sshdA中转机器公网121.41.218.68root服务22穿透后8822启用B客户机器客户内网10.155.0.0/24root22启用C我的机器公司/家中127.0.0.1root22不需要

那么,在我的场景下,主要用到的就是本地模式了,直接运行这个命令即可实现端口转发:

ssh -R 127.0.0.1:9999:10.155.0.1:80 -CNT \-o ServerAliveInterval=5 \-o ServerAliveCountMax=10 \[email protected] -p 8822

提示:还记得8822端口吗?它是上篇文章中介绍的SSH内网穿透端口

这里加上了ServerAliveInterval和ServerAliveCountMax两个参数分别控制连接的心跳和断开。

这样我就可以在本地浏览器上访问:9999代理到客户内网10.155.0.1:80服务上去。

当然,如果客户内网中有多个服务需要在本地代理,这样为每个服务都执行一条本地转发的命令会非常麻烦。其实我们只需要把SSH换成动态模式就可以解决这个问题。命令也简单,如下:

ssh -D 127.0.0.1:9999 -CNT \-o ServerAliveInterval=30 \-o ServerAliveCountMax=10 \[email protected] -p 8822

因为动态模式是SOCKS转发,我们还需要在浏览器上安装一个socks代理插件,这里我以SwitchyOmega举例,我们在代理服务器上设置SOCKS5,地址填入127.0.0.1,端口填入9999即可实现访问客户内网B上的服务

之后在浏览器选择代理模式后,就可以直接访问客户内网上的服务了。

最后,如果你懒得记ssh端口转发命令的话,你可以尝试下SSH Tunnel这个应用

上面说的三个SSH端口转发模式它都支持,配置也非常的方便。

总结

本文介绍了在实现SSH内网穿透之后,如果利用SSH端口转发实现本地端口访问远端内网服务。另外,有的同学就问了,我用ssh来做科学上网是否可行?理论上可行,不过做之前先阅读完下列文字

《中华人民共和国计算机信息网络国际联网管理暂行规定》规定“计算机信息网络直接进行国际联网,必须使用邮电部国家公用电信网提供的国际出入口信道。任何单位和个人不得自行建立或者使用其他信道进行国际联网。”如违反上述规定,公安机关会责令停止联网,给予警告,可以并处15000元以下的罚款,有违法所得的,没收违法所得。

你可能还喜欢

点击下方图片即可阅读

三条命令助你完成ssh内网穿透

关注【云原生小白】,回复「入群」加入Loki学习群