利用服务器实现内网穿透,远程访问终端设备
目的
- 实现内网穿透
- 通过公网代理服务器,远程控制终端设备
- 解决服务器端口的环回地址(127.0.0.1)
前期准备
1. 两台笔记本,需联网,分别是笔记本A,笔记本B
2. 准备一台服务器,公网IP
搭建过程
1. 在服务中新增sshd_confi配置
vim /etc/ssh/sshd_config
添加以下配置
GatewayPorts yes
UseDNS no
GSSAPIAuthentication no
重启sshd服务(以下是centos的,其他的自行google吧)
service sshd restart
2. 在笔记本A上搭建docker服务
前期需要将笔记本A上的公钥添加到服务器的authorized_keys中,目的是实现免密登录
version: '3.2'
services:
ssh2:
image: jnovack/autossh
container_name: ssh2
platform: linux/x86_64
restart: always # 只要是失败的一直重启
environment:
- SSH_REMOTE_USER=root # 服务器用户名
- SSH_REMOTE_HOST=public_ip # 服务器公网ip
- SSH_REMOTE_PORT=22 #服务器的ssh服务端口
- SSH_BIND_IP=* # 设置为*
- SSH_TUNNEL_PORT=26379 # 转发到服务器的端口(不要与服务的端口冲突)
- SSH_TARGET_HOST=inter_A_ip # 转发的服务端口ip
- SSH_TARGET_PORT=6379 # 需要转发的内网服务的端口
- SSH_MODE=-R # 选择R
volumes:
- /root/.ssh/id_rsa:/id_rsa # 获取笔记本的私钥文件位置
dns: # 这个不要动
- 8.8.8.8
- 4.2.2.4
使用以下命令也是同样的效果
ssh -fgN -R *:26379:inter_A_ip:6379 root@public_ip
3. 服务端查询监听端口
netstat -anp | grep LISTEN | grep 26379
返回以下信息
[root@VM-24-9-centos ~]# netstat -anp | grep LISTEN | grep 26379
tcp 0 0 0.0.0.0:26379 0.0.0.0:* LISTEN 16562/sshd: root
tcp6 0 0 :::26379 :::* LISTEN 16562/sshd: root
4. 杀死端口
kill 16562
如果是使用的docker部署,并且使用的restart = always 后发现杀不死,是因为笔记本A一直在重连
5. 端口验证
这个是redis的端口,我使用redis-cli验证成功了
需要验证的信息
使用内网ip验证
6. 远程访问
这个就不示范了,只要在服务器能使用内网访问端口,然后通过防火墙开放端口就OK了
7. 核心点
第一个 内网搭建穿透隧道
第二个 sshd的环回地址(127.0.0.1)为0.0.0.0 (***核心******),如果未设置这个,那只能使用端口转发