使用xshell实现内网穿透与socket代理
内网穿透:即NAT穿透,网络连接时术语
计算机是局域网内时,外网与内网的计算机节点需要连接通信,有时就会出现不支持内网穿透
就是说映射端口,能让外网的电脑找到处于内网的电脑,提高下载速度
不管是内网穿透还是其他类型的网络穿透,都是网络穿透的统一方法来研究和解决
+++++++++++++++++++++++++++++++++额外扩展+++++++++++++++++++++++++++++++++
透传,即透明传输(pass-through)
指的是在通讯中不管传输的业务内容如何,只负责将传输的内容由源地址传输到目的地址,而不对业务数据内容做任何改变
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#TCP/IP转移
+++++++++++++++++++++++++++++++++++++++++++++
L:运行XShell的一端,R:通过SSH连接的一端
+++++++++++++++++++++++++++++++++++++++++++++
类型:
Local(Outgoing) 将服务器的端口映射到本机(出站) L -> R
Remote(Incoming) 将本机的端口映射到服务器(入站) R -> L
Dynamic(SOCKS4/5) 创建一个SOCKS信道,是个双向代理 L <> R
源主机和侦听端口:
L端映射的地址,类型为Dynamic时代表SOCKS协议使用的端口
仅接受本地连接:
这个没什么好说的,勾选,或者源主机填localhost效果一样
目标主机和目标端口:
R端映射的地址,类型为Dynamic时无需设置
参考资料:https://blog.chrxw.com/archives/2019/11/11/644.html
内网穿透
环境模拟:
1. 机器1只有内网网卡(172.16.1.181),安装了MySQL服务且设置了机器1的外网IP白名单(app@10.0.0.11)
2. 机器2有外网(10.0.0.11)和内网网卡(172.16.1.11)
实现目标:在本地通过数据库软件用app用户连接机器1的数据库
1.xshell连接机器2并建立隧道
2.测试
3.原理
利用xshell做隧道进行本机与172.16.1.181之间的通信
通讯方向说明localhost:8888 --> 机器2 --> 172.16.1.181:3306
通过ngrok实现ssh内网穿透
# ngrok
用ssh访问一台主机,如果和主机在一个局域网中或者主机拥有公网IP,就可以使用ssh命令直接连接主机的IP地址
但是大部分公司和家庭内部都是局域网,并不能给局域网内的每一台主机都分配一个公网 IP,这时候就需要进行内网穿透,才能从外部连接到局域网内的主机
ngrok是一个反向代理工具,可以实现将内网的端口暴露到公网
通过ngrok,也能将ssh使用的端口暴露出去,以此实现ssh的内网穿透
1. 注册并下载ngrok
访问 https://ngrok.com/注册ngrok账号并下载ngrok客户端
2. 查看ngrok的token
访问https://dashboard.ngrok.com/auth查看token并复制
3. 在内网机器上启动ngrok
连接ngrok账号
$ ngrok authtoken xxxxxxx
4. 启动ngrok并打开 22 端口转发
#后台启动,选择亚洲新加坡节点,并将日志写到家目录的ngrok.log中(要后台启动必须要输出日志)
$ ngrok tcp 22 --log=stdout > "$HOME/ngrok.log" --region ap &
其中region的ap代表ngrok新加坡节点,访问速度相比美国节点会快一些
访问 https://ngrok.com/docs#config-options 可以查看支持的所有区域:
us - United States (Ohio)
eu - Europe (Frankfurt)
ap - Asia/Pacific (Singapore)
au - Australia (Sydney)
sa - South America (Sao Paulo)
jp - Japan (Tokyo)
in - India (Mumbai)
5. 利用上面的xshell透传,将4040端口透传到本地的4040(可随意定制)端口
浏览器访问:http://127.0.0.1:4040
可以看到一个tcp开头的地址,通过访问这个地址,就可以转发到本机的 22 端口上
No requests to display yet
To get started, make a request to one of your tunnel URLs
· tcp://0.tcp.ngrok.io:16837
6. 通过 ssh 访问内网机器
查看到转发地址后,就可以在外网通过 ssh 命令访问内网机器来。以上图为例,ssh 访问的命令是:
$ ssh -p 16837 root@0.tcp.ap.ngrok.io
- 需要注意的问题:
由于所有流量都要经过 ngrok 服务器,而 ngrok 的服务节点又只有美国、新加坡等地,所以速度上还是比较慢的
另外,如果 ngrok 的服务节点存在安全隐患的话,存在敏感内容的泄漏的可能性
参考资料:https://www.jianshu.com/p/3fdb77446f2d
Sunny-Ngrok项目:https://www.ngrok.cc/user.html
小米球ngrok项目:http://ngrok.ciqiuwl.cn/
socket代理实现浏览器访问内网