type
status
date
slug
summary
tags
category
icon
password
Tweet Link
Staus
类型
平台
大家好,我是可夫小子,《小白玩转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
AllowTcpForwarding yes GatewayPorts yes
再重启服务:
service ssh restart
服务器A的设置
- 在A的机器上执行ssh反向代理
ssh -NR 26919:localhost:22 user_name_B@host_ip_B
这条命令就是是在远程服务器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上,先测试端口
~ nc -zv al.agihub.top 26919 Connection to al.agihub.top port 26919 [tcp/*] succeeded!
说明26919端口访问正常
如果没有返回,或者超时,就需要看一下防火墙和安全策略的配置
- 接着使用
ssh -p 26919 Username_A@IP_B
即可正常访问
到此,电脑C,通过外网(阿里云)服务器B,就访问到A家里的设备了。这种映射是路由网关自动维持的,不会持续下去,如果连接断开或者网络不稳定都会导致通信失败,我们还需要改用autossh来保持这样的反向代理连接,接着往下着。
Autossh和后端运行、开机运行
这样
NAT
路由/防火墙就会在内网主机和外网主机之间建立映射即可相互通信了。但这种映射是路由网关自动维持的,不会持续下去,如果连接断开或者网络不稳定都会导致通信失败,这时内网主机需要自动重连机制了。autossh就是这个问题的解决方案autossh -M 26990 -NR 26919:localhost:22 Username_B@IP_B
如果要打开调试信息,可以在前面加
AUTOSSH_DEBUG=1
AUTOSSH_DEBUG=1 autossh -M 26990 -NR 26919:localhost:22 Username_B@IP_B
映射多个端口,那就加多个-NR的参数,如下
autossh -M 26990 -NR 26919:localhost:22 -NR 26910:localhost:3000 -NR 26912:localhost:7861 user_name@IP_server
开机自启动,可以通过cron方案,只需要添加一句命令就可以搞定。
crontab -e
进入任务编辑界面,然后按自己的信息,添加如下:@reboot autossh -f -M 26990 -NR 26919:localhost:22 -NR 26910:localhost:3000 -NR 26912:localhost:7861 user_name@IP_server
后记
通过这种方式,就实现了在公司也能访问家里的内部服务器,整个过程不算复杂,但要学会在出现问题的时候,能够各个阶段的验证,一步步排除。比如我最开始,在阿里去的安全策略那里没设置好,折腾了半天。
好了,把一台局域网的电脑开放出去,常用的三种方案我都给大家详细说明了,大家有什么问题,请留言讨论。
参考
- ‣
- ‣
- 作者:可夫小子
- 链接:https://koffuxu.com/article/33c3fcbb-2bbe-44cb-bf82-3e2f219bf534
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。