type
Post
status
Published
date
Aug 27, 2024
slug
summary
tags
建站
category
技术分享
icon
password
Tweet Link
Staus
Done
类型
文章
平台
公众号
CSDN
💡
大家好,我是可夫小子,《小白玩转ChatGPT》专栏作者,关注AIGC、互联网和自媒体。
要把内网的一台的Ubuntu服务器让外面也能访问,总共有三种可行的方案,前面已经介绍了远程桌面工具Teamviewer电信公网IP端口映射两种方式,今天就来介绍更健壮稳定的方式——ssh反向代理。
大概的框架图如下,今天就从服务器购买到设置,手把手的教程,让你花费100块以内,就拥有一个强大的「云服务器」。
 
notion image

服务器B购买与设置

  1. 点击阿里云产品链接,购买服务器
    1. notion image
      第一年很便宜,82块/年,用来玩玩绝对没压力。
  1. 在系统镜像中选择Ubuntu,点击立即购买完成支付,你将获得一台云服务器,这台服务器将有基本运行的Ubuntu系统的配置,并且拥有固定的外网IP。
    1. notion image
  1. 进入控制台,设置允许密码登陆。 选择第1个,立即登陆
    1. notion image
      修改允许密码登陆修改如下 vim /etc/ssh/sshd_config 设置为yes
      notion image
      然后重启服务:sudo service ssh restart
  1. 重置密码
    1. 然后退出来,再次进入控制台,选择第2个登陆,第一次需要设置密码。设置好密码之后,这样通过ssh终端进行登陆了。
      notion image
  1. 设置安全规则
    1. 阿里云的案例规格比较麻烦,先有安全组,然后还有防火墙。基本思路就是先把防火墙关掉,保留阿里云的安全的安全策略即可。
      • 防火墙
      确保ufw status是非激活的状态
      notion image
      • 安全规则
      这里要注意一下,阿里云的服务器有两种:ECS和轻量应用服务器
      notion image
      如果ECS是在安全组里面管理进出口端口策略,先进入安全组管理页面,选择自己服务器的区域,添加如下规则:
      notion image
      如果是轻量应用服务器,本案例就是这种类型,就在它的实例里面防火墙→管理规则
      notion image
      我们是选择的轻量服务器产品,所以就设置这个产品的的管理规则,我开放了26919到26990的端口
      notion image
  1. 接下来,需要设备一下服务器的ssh配置,打开TCP端口转发,vim /etc/ssh/sshd_config
    1. notion image
      再重启服务:service ssh restart

服务器A的设置

  1. 在A的机器上执行ssh反向代理
    1. 这条命令就是是在远程服务器B开了一个端口26919,与本机A的端口22进行了数据转发。即以后所有访问B的26919端口的数据,就到达A的22。通过这样的反向代理实现了内部机器的访问。
  1. 在服务器B,查看一下端口,26919端口已经正常监听了
    1. notion image
  1. 在服务器B上登陆测试: ssh koffu@localhost -p 26919
    1. notion image
      可以看到B到A完成正常登陆,说到B到A的通道打通了。接下来就是在我们另外一电脑C,通过B访问A。
       

公司电脑C的连接

  1. 在第三台电脑C上,先测试端口
    1. 说明26919端口访问正常
      如果没有返回,或者超时,就需要看一下防火墙和安全策略的配置
      notion image
  1. 接着使用ssh -p 26919 Username_A@IP_B即可正常访问
    1. notion image
到此,电脑C,通过外网(阿里云)服务器B,就访问到A家里的设备了。这种映射是路由网关自动维持的,不会持续下去,如果连接断开或者网络不稳定都会导致通信失败,我们还需要改用autossh来保持这样的反向代理连接,接着往下着。
 

Autossh和后端运行、开机运行

这样 NAT 路由/防火墙就会在内网主机和外网主机之间建立映射即可相互通信了。但这种映射是路由网关自动维持的,不会持续下去,如果连接断开或者网络不稳定都会导致通信失败,这时内网主机需要自动重连机制了。autossh就是这个问题的解决方案
如果要打开调试信息,可以在前面加AUTOSSH_DEBUG=1
notion image
映射多个端口,那就加多个-NR的参数,如下
开机自启动,可以通过cron方案,只需要添加一句命令就可以搞定。
crontab -e进入任务编辑界面,然后按自己的信息,添加如下:

后记

通过这种方式,就实现了在公司也能访问家里的内部服务器,整个过程不算复杂,但要学会在出现问题的时候,能够各个阶段的验证,一步步排除。比如我最开始,在阿里去的安全策略那里没设置好,折腾了半天。
好了,把一台局域网的电脑开放出去,常用的三种方案我都给大家详细说明了,大家有什么问题,请留言讨论。

参考

  • 利用反向ssh从外网访问内网主机-腾讯云开发者社区-腾讯云
  • SSH反向连接及Autossh - eshizhan - 博客园