第一步、登陆外网服务器,开放外网服务器端口

修改ssh配置文件

vim /etc/ssh/sshd_config

将下面的注释取消,并且修改为下面的结果,直接添加进去也行

GatewayPorts yes
TCPKeepAlive yes
ClientAliveInterval 60
ClientAliveCountMax 3

重启sshd服务

systemctl restart sshd

在阿里防火墙规则中添加一个端口
autossh实现内网穿透,通过外网服务器端口转内网上虚拟机服务器_外网
autossh实现内网穿透,通过外网服务器端口转内网上虚拟机服务器_外网_02

第二步、登陆内网服务器


安装autossh

centos服务器请使用yum安装,最好先yum update更新一下软件包索引缓存

yum install autossh -y

ubuntu服务器请使用apt安装,最好先apt update更新一下软件包索引缓存

apt install autossh -y

为了方便后面使用,我们先实现内网服务器无密码登陆外网服务器

ssh生成公钥和私钥文件

ssh-keygen -t rsa

3次回车即可(如果之前使用过则输入y覆盖原文件即可,然后一直回车即可,也可不覆盖直接将公钥发给外网服务器)

将公钥发给外网服务器

通过命令将公钥传给外网服务器
分别是外网服务器的
用户名:root.和外网服务器地址:huashengshu.top
需要输入密码(以后输入ssh root@huashengshu.top就不用输密码)

ssh-copy-id root@huashengshu.top

第三步通过内网服务器的autossh与外网服务器开放的端口建立连接

还是在内网服务器内操作!
下面的60003是内网服务器端口,用来监听连接状态用的。
8888是前面防火墙添加的开放端口
8080是内外服务器对外提供服务的端口
-f 选项时后台运行

autossh -M 60003 -NR 60002:127.0.0.1:8080 root@huashengshu.top -f

前面设置了无密登陆,所以不需要输入密码。
如果没有设置无密登陆会要求输入密码,并且每次连接都需要输入密码


如果报错信息提示

Warning: remote port forwarding failed for listen port 外网端口号

则说明外网服务外网端口好被占用,登陆外网服务器通过netstat -nltp查看对应端口的PID
再通过kill -9 PID 杀死该进程。重新在内网服务器输入命令即可


验证

输入外网服务器地址 huashengshu.top端口60002
autossh实现内网穿透,通过外网服务器端口转内网上虚拟机服务器_缓存_03

优点

可以实现一台外网服务器,进行多台服务器的内网穿透。而且操作简单

缺点

依然需要一台外网服务器,既然有外网服务器对于一般的用户没必要这样做。
唯一的好处在于,内网服务器可以提供更好的性能做计算,而外网服务器只是一个流量转发。
在分布式系统中可以使用自己的内网服务器部署集群环境,然后需要的时候进行内网穿透。

最后一步、开机自启连接60002端口

开机自启示例
只需要将例子中的倒数第二行node的命令替换成

autossh -M 60003 -NR 60002:127.0.0.1:8080 root@huashengshu.top -f

即可