通过路由器端口转发实现外网SSH访问局域网服务器

背景

近期在学习MySQL,完成了Mac端的学习,开始学习服务器部署的进阶内容。起初不打算实际操作了,在本地Mac端实验或者云了内容即可。但仔细想感觉如果没有实地部署操作,经历过程,总是没有什么竞争力,以后实操也会出问题,于是还是打算部署一下。

考虑在宿舍Windows系统安装虚拟机部署,在实验室远程访问宿舍的虚拟机,但是远程桌面的卡顿不能接受,也懒得再弄个路由器解决IP问题,于是这个方式否定了。实验室有好几台服务器,直接在上面装,然后局域网环境内SSH连接,是我想到的很好的解决方法。

因此昨天花了一晚上解决Ubuntu的MySQL8.0安装,也大费周章。

由于需要在宿舍学习,此时无法直接访问局域网内的服务器,考虑解决这个问题。问了实验室的朋友,他不给我解决,但是提供了一些方法。于是我自己搜了一些内网穿透、端口转发的相关内容,需要在服务器端安装工具或者使用成品商业软件,都不是我想要的。此时想到朋友之前让我测试过在宿舍访问他在局域网内树莓派上部署的Blog,是一个不错的方向,之前有印象是他通过路由器转发实现的,于是我也尝试一下。

经过一番折腾和交流,花了大概一个半小时的时间解决了这个问题

路由器端口转发

在路由器管理界面有虚拟服务器的功能,设置服务器端口和IP地址。局域网外访问该路由器的IP地址和服务端口,会被转发到端口转发指定的局域网内IP地址和相同端口

路由器管理界面

原来我以为路由器的服务端口和目标IP地址的端口是不同的,没有找到如何继续修改端口的方式。经过实验,发现在局域网外可以用不指定端口,使用默认端口22访问到朋友的树莓派,而不能指定端口访问到我想要访问到内容。

这里还踩了Ubuntu如何对外开放端口、Ubuntu防火墙的坑。问了朋友才知道,我以为的两个不同端口其实是绑定的,须是同一端口。

因为SSH的默认22端口转发已经被树莓派占用,路由器不能再指定访问服务器的22端口,我想要通过SSH访问服务器,只能是修改服务器上SSH的默认端口,并在端口转发进行设置。

这里走了捷径,直接让朋友把树莓派的SSH端口改了,我就直接用了默认22端口

密钥问题

在局域网外测试访问配置的服务器,遇到了问题

1
2
3
4
5
6
7
8
9
10
11
12
13
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
[...].
Please contact your system administrator.
Add correct host key in */.ssh/known_hosts to get rid of this message.
Offending RSA key in*d/.ssh/known_hosts:86
RSA host key for [...] has changed and you have requested strict checking.
Host key verification failed.

查询和问了朋友发现是因为用这个IP和端口SSH过树莓派,而修改到服务器后,密钥发生了变化,因此删除已有密钥,即可以成功访问服务器。

改进方向

  • 修改服务器SSH默认端口
  • 配置免密登录

后记

写完发现其中技术要点不多,主要还是文字表达-。-当个故事看吧。

最后,感谢小玉