SSH 正、反向代理实现稳定的内网穿透实验_
测试环境简介:
服务器 A(C7): 内网提供服务的服务器(无公网IP)
跳板机 B(C6):用于跳板的服务器(有公网IP,且可以访问内网【服务器 A】)
客户端 C(win10):纯外网客户端(可以访问到【跳板机 B】)
实现效果,通过外网客户端C,访问到内网服务器A的内容。
反向代理
ssh -fCNR
e.g.
ssh -fCNR <跳板机 B 用于和服务器 A隧道端口>:127.0.0.1:<服务器 A 提供的服务的端口,比如80,21...>-p1211 <B服务器账号>@<B服务器IP>
ssh -fCNR 1213:127.0.0.1:8099 -p1211 secret@192.168.xx.xx
正向代理
ssh -fCNL
e.g.
ssh -fCNL *:<跳板机 B 外网可访问的端口>:127.0.0.1:<和服务器A 通信传输的隧道端口(需要和反向过来的端口一致)> -p<ssh自定义的端口号,默认22端口可不使用> 127.0.0.1
ssh -fCNL *:8099:127.0.0.1:1213 -p1211 127.0.0.1
-f 后台执行ssh指令
-C 允许压缩数据
-N 不执行远程指令
-R 将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口
-L 将本地机(客户机)的某个端口转发到远端指定机器的指定端口
-p 指定远程主机的端口
【最后】:ssh 解决持久化问题,使用autossh
1. 首先完成2边的ssh等效性(并且跳转机还需要多做一次自己的等效性),免密码工作!!!
2. 安装 yum install autossh
autossh建立稳定隧道
服务器A上执行:autossh -M 1214 -fCNR 1213:127.0.0.1:8099 -p1211 secret@192.168.xx.xx
跳板机B 上执行: autossh -M 1215 -fCNL *:8099:127.0.0.1:1213 -p1211 127.0.0.1
# 上面命令测试成功后,通过netstat 进行验证,查看是否开启了相应端口。最后,添加到开机启动文件下面。
C6: /etc/rc.local
C7:/etc/rc.d/rc.local
参考资料:
https://blog.csdn.net/jiangbenchu/article/details/84438959
https://blog.csdn.net/upshi/article/details/78630285
https://www.cnblogs.com/kwongtai/p/6903420.html
https://www.imzcy.cn/1176.html (这里提到了另外一个好玩的东西,不用ssh等效性输入密码的玩意:expect )
https://www.imzcy.cn/1226.html(同上)
# 拓展学习—— windows 上如何实现类似效果 20210818
首先打开命令提示符(cmd)
netsh interface portproxy add v4tov4 listenport=监听端口 connectaddress=转发到的地址 connectport=转发到的端口
例子: netsh interface portproxy add v4tov4 listenport=跳板机B监听端口 connectaddress=服务器A的IP地址 connectport=服务器A的端口
2. 查看转发了哪些端口
netsh interface portproxy show all
3. 删除转发规则
netsh interface portproxy delete v4tov4 listenaddress=服务器A的IP地址 listenport=跳板机B监听端口