💡
大家好,我是可夫小子,《小白玩转ChatGPT》专栏作者,关注AIGC、互联网和自媒体。
要把内网的一台的Ubuntu服务器让外面也能访问,总共有三种可行的方案,前面已经介绍了远程桌面工具Teamviewer、电信公网IP端口映射两种方式,今天就来介绍更健壮稳定的方式——ssh反向代理。
大概的框架图如下,今天就从服务器购买到设置,手把手的教程,让你花费100块以内,就拥有一个强大的「云服务器」。
服务器B购买与设置
- 点击阿里云产品链接,购买服务器
第一年很便宜,82块/年,用来玩玩绝对没压力。
- 在系统镜像中选择Ubuntu,点击立即购买完成支付,你将获得一台云服务器,这台服务器将有基本运行的Ubuntu系统的配置,并且拥有固定的外网IP。
- 进入控制台,设置允许密码登陆。
选择第1个,立即登陆
修改允许密码登陆修改如下
vim /etc/ssh/sshd_config 设置为yes
然后重启服务:sudo service ssh restart
- 重置密码
然后退出来,再次进入控制台,选择第2个登陆,第一次需要设置密码。设置好密码之后,这样通过ssh终端进行登陆了。
- 设置安全规则
阿里云的案例规格比较麻烦,先有安全组,然后还有防火墙。基本思路就是先把防火墙关掉,保留阿里云的安全的安全策略即可。
确保ufw status是非激活的状态
这里要注意一下,阿里云的服务器有两种:ECS和轻量应用服务器。
如果ECS是在安全组里面管理进出口端口策略,先进入
安全组管理页面,选择自己服务器的区域,添加如下规则:
如果是轻量应用服务器,本案例就是这种类型,就在它的实例里面防火墙→管理规则
我们是选择的轻量服务器产品,所以就设置这个产品的的管理规则,我开放了26919到26990的端口
- 接下来,需要设备一下服务器的ssh配置,打开TCP端口转发,
vim /etc/ssh/sshd_config 再重启服务:service ssh restart
服务器A的设置
- 在A的机器上执行ssh反向代理
这条命令就是是在远程服务器B开了一个端口26919,与本机A的端口22进行了数据转发。即以后所有访问B的26919端口的数据,就到达A的22。通过这样的反向代理实现了内部机器的访问。
- 在服务器B,查看一下端口,26919端口已经正常监听了
- 在服务器B上登陆测试:
ssh koffu@localhost -p 26919 可以看到B到A完成正常登陆,说到B到A的通道打通了。接下来就是在我们另外一电脑C,通过B访问A。
公司电脑C的连接
- 在第三台电脑C上,先测试端口
说明26919端口访问正常
如果没有返回,或者超时,就需要看一下防火墙和安全策略的配置
- 接着使用
ssh -p 26919 Username_A@IP_B即可正常访问
到此,电脑C,通过外网(阿里云)服务器B,就访问到A家里的设备了。这种映射是路由网关自动维持的,不会持续下去,如果连接断开或者网络不稳定都会导致通信失败,我们还需要改用autossh来保持这样的反向代理连接,接着往下着。
Autossh和后端运行、开机运行
这样 NAT 路由/防火墙就会在内网主机和外网主机之间建立映射即可相互通信了。但这种映射是路由网关自动维持的,不会持续下去,如果连接断开或者网络不稳定都会导致通信失败,这时内网主机需要自动重连机制了。autossh就是这个问题的解决方案
如果要打开调试信息,可以在前面加AUTOSSH_DEBUG=1
映射多个端口,那就加多个-NR的参数,如下
开机自启动,可以通过cron方案,只需要添加一句命令就可以搞定。
crontab -e进入任务编辑界面,然后按自己的信息,添加如下:
后记
通过这种方式,就实现了在公司也能访问家里的内部服务器,整个过程不算复杂,但要学会在出现问题的时候,能够各个阶段的验证,一步步排除。比如我最开始,在阿里去的安全策略那里没设置好,折腾了半天。
好了,把一台局域网的电脑开放出去,常用的三种方案我都给大家详细说明了,大家有什么问题,请留言讨论。
参考
利用反向ssh从外网访问内网主机-腾讯云开发者社区-腾讯云
利用反向ssh从外网访问内网主机-腾讯云开发者社区-腾讯云
最近遇到一个问题,就是过几天我需要离开学校,而且到时候仍然想登陆校园网里的一台服务器进行工作;但是我又没有校园网网关的操作权限,不能做端口映射,也不能搞到校园网内部主机的外网ip,而且学校自己提供的v**又根本没法用。研究了半天,总算找到了一个比较不错的利用反向ssh(reverse ssh tunnel)进行内网登陆...
SSH反向连接及Autossh - eshizhan - 博客园![SSH反向连接及Autossh - eshizhan - 博客园]()
SSH反向连接及Autossh - eshizhan - 博客园
0.接触Linux恐怕对SSH再熟悉不过了,还有scp,sftp各种方便的功能,一般的使用都需要ip:port(如果不是默认22的话),但有些情况比较特殊,就是想连接一台内网主机(比如公司内网,当然你肯定做不了Port Forwarding,除非你想在公司防火墙上拆个洞)。稍懂一点网络的童鞋会明白,