目录

实验室网络解析 (内网穿透)

  之前师兄在群里发了学校实验室两台服务器和之江实验室两台服务器的SSH连接方法,讲了在实验室怎么连和在外面怎么连。当时就觉得很高级,也没有细品为什么要这么连,内外网跳板机是如何实现的…后来师兄爱飞的鸟 在一台闲置主机上装了Linux系统,并配置了内网穿透,使得外网也能连接这台主机。我当时还不懂实验室外网跳板机和师兄配置内网穿透这两者的关系,后来请教师兄后才豁然开朗,它们原来是一件事!

  于是我也找了台实验室闲置的主机(最后一台了hhh),装了Linux系统,配置了内网穿透,然后我也拥有了一台16GB内存的服务器😍。这篇文章就来梳理一下实验室的网络情况以及实现原理

一、内网、外网、跳板机、ssh

这是实验室的网络拓扑情况:

      /实验室网络解析(内网穿透)/a.png

  我们实验室的电脑,不管是连接无线网i-HDU,还是插网线连接网络,都会进入学校内网,IP地址为10.X.X.X;之江实验室也同样有属于他们自己的内网。用户主机2为在实验室(即在学校内网中)的电脑,用户主机3为外网的电脑。主机J既是内网跳板机又是外网跳板机(还是window系统的),它能访问zjlab内网,也能被外网的主机所访问。基于以上情况,产生了以下问题:

  1. 用户主机2如何连接服务器A、B?
  2. 用户主机2如何连接服务器C、D?
  3. 用户主机3如何连接服务器A、B?
  4. 用户主机3如何连接服务器C、D?
  5. 用什么工具连?怎么连?
  6. 跳板机是什么?有什么作用?
  7. 主机j是如何实现内网跳板机的?
  8. 主机j是如何实现外网跳板机的?

1.用户主机2如何连接服务器A、B?

  它们都处在同一个hdu内网之中,互相是能识别各自10.X.X.X的IP地址的,所以可以直接访问。

2.用户主机2如何连接服务器C、D?

  服务器C、D在之江内网,而内网跳板机能访问zjlab;内网跳板机在hdu内网中,因此主机2能直接访问内网跳板机。所以,主机2就可以用内网跳板机当作跳板,来连接服务器C、D。

3.用户主机3如何连接服务器A、B?

  主机3在外网,它能访问到外网跳板机,外网跳板机在hdu内网,因此主机3可以用外网跳板机当跳板,来连接hdu内网的服务器C、D。

4.用户主机3如何连接服务器C、D?

  主机3能连接外网跳板机,而外网跳板机和内网跳板机其实是同一台主机J,因此外网跳板机还能访问zjlab。所以,主机3还可以通过外网跳板机来连接服务器C、D。

5.用什么工具连?怎么连?

  通过ssh远程连接的工具有很多,比如terminal终端、xshell、termius、vscode等。个人用下来觉得vscode最好用,因为可以直接操作服务器里的文件。当然只是shell操作的话,用termius也很方便(比xshell好用很多),但是termius需要去申请一个github学生包的会员,我觉得挺难申请的。下面只介绍vscode连接方法。

  vscode远程连接需要下载remote-ssh插件,下载完成后按VSCode Remote ssh跳板机配置 所说配置即可。

 之后可以再去搜索一下vscode ssh 免密登录,将主机的公匙放到服务器用户主目录/.ssh/authorized_keys中即可,可参考vscode设置remote-ssh并免密登录 。这里我遇到了一个坑,明明我配置好了,但是免密登录一直都没有生效,后来翻了很多博客,发现有些博客有sudo chmod 700 ~/。ssh这一步,我执行后,免密登录就成功了。我觉得大概率原本的.ssh文件没有执行权限,所以进不去。

 以下是我实验室主机的部分config文件(“打码”处理了,内网穿透本身就不安全,万一导致实验室被网络攻击沦陷了就g了🤡)。(连接腾讯云服务器需要跳,是因为学校内网不允许我们直接ssh连接外网的服务器)。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Host 内网跳板机J
    # 跳板机的ip地址
    HostName 10.XXX.XXX.XXX
    # 你跳板机的用户名
    User J
    # 跳板机登录端口 
    Port 22

Host zjlabC    
    # 目标机的ip地址
    HostName 10.XXX.XXX.XXX
    # 你目标机的用户名
    User serverC
    # 目标机登录端口 
    Port 22
    ProxyCommand C:\Windows\System32\OpenSSH\ssh.exe  -W %h:%p 内网跳板机J

Host 腾讯云服务器
    # 目标机的ip地址
    HostName koisecret.site
    # 你目标机的用户名
    User me
    # 目标机登录端口 
    Port 22
    ProxyCommand C:\Windows\System32\OpenSSH\ssh.exe  -W %h:%p zjlabC

 以下是我外网笔记本的部分config文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
Host 外网跳板机J
    # 跳板机的ip地址
    HostName 124.222.XXX.XXX     # 是个公网ip地址
    # 你跳板机的用户名
    User J
    # 跳板机登录端口 
    Port 22
    
Host zjlabC    
    # 目标机的ip地址
    HostName 10.XXX.XXX.XXX
    # 你目标机的用户名
    User serverC
    # 目标机登录端口 
    Port 22
    ProxyCommand C:\Windows\System32\OpenSSH\ssh.exe  -W %h:%p 外网跳板机J

 可以根据配置文件,理解一下到底是怎么连的。

6.跳板机是什么?有什么作用?

 简单来说,跳板机就是一个桥梁,他和她无法交流,你和她、你和他能交流,你就去当个跳板机,他和她就能交流了。

 其实,任何电脑都能当跳板机,无需任何配置,只要一台电脑能访问到另一台电脑,你就可以通过这台电脑去访问那台电脑。就像之江实验室的服务器zjlabC可以直接访问到我的腾讯云服务器,那么无需任何配置,在实验室内网的主机2,就能以zjlabC为跳板机连接腾讯云服务器。

7.主机j是如何实现内网跳板机的?

 也就是说,主机j是如何能访问之江内网的?其实很简单,想想你在外网是怎么连接学校图书馆来查文献的?——vpn。下载easyconnect登录学生账号就可以连接学校的内网了。内网跳板机也就是在主机上下载easyconnect,登录之江实验室的账号密码就可以了。

8.主机j是如何实现外网跳板机的?

 也就是说,主机j是如何能被外网访问的?—–内网穿透!采用内网穿透技术,就能在外网直接连接主机j了,然后就能以主机j为跳板,来访问主机j能访问到的机器(也就是hdu内网和zjlab内网中的所以主机)。

 因此,我在实验室配了一台Linux主机1,明明需求是内网穿透从而外网能直接连接Linux主机1,没想到Linux主机1它还能充当外网跳板机来连接实验室的服务器。(当然我也能通过跳板机j来连接主机1)

二、配置内网穿透前了解的Linux知识

Linux权限

总的来说,就是要知道三个权限:读r(4)、写w(2)、执行x(1),三种用户:所有者、所在组、其他用户。

用户: Linux是多用户多任务的系统,每个用户都有自己的个人隐私,这就是用户的作用。

用户组: Linux是多用户多任务的系统,你想和你团队合作者一起分享某些文件,非团队的用户不能看你分享的文件,这就是用户组的作用。(一个用户可以有多个用户组

其他用户: Linux是多用户多任务的系统,例如一个人陌生人(其他用户)想要进入你家(用户组),你(用户)肯定不会让他进来,也肯定不会把你的隐私(用户拥有的文件)给他看。

文件权限

  • 读( r ): 可否对文件内容的查看。

  • 写( w ): 可否对文件进行修改。(但不能删除该文件)

  • 执行( x ): 可否该文件可以被系统执行。

目录权限:

  • 读( r ): 可否查看此目录下的文件名和目录。
  • **写( w ):**可在该目录下创建、删除、更名或移动文件或目录。
  • 执行( x ): 能否进入目录。一般给任何人看你的目录要同时开放r和x(w权限不要随便给!)

 所以多用户使用同一台Linux服务器的时候,可以通过给用户划分为同一个组,并将文件/文件夹修改用户组,以此达到共享的目的。一般来说,用户目录(/home)下的文件是私有的,其他用户不能访问,一些大家都要用的东西就不要放在家目录里。

 新建文件默认权限为666,新建目录默认权限为777。但是要"减去" umask的值,umask的值可以使用umask命令看到,一般情况下,root用户的为022,普通用户为002。这里的"减"并非数字上相减,而是减去相应的权限。因此,默认情况下,root用户新建文件的权限是644,新建目录权限是755;普通用户新建文件的权限是664,新建目录权限是775

禁止root账户密码登录

root身份是拥有至高无上的权利的,不管有没有设置权限,root身份的用户都可以进行各种操作。Linux系统默认情况下,是可以通过ssh以root权限登录的。但出于安全考虑,这样的权限是不合适的,因为黑客可能通过暴力破解你的root密码,然后进入你的系统。

 同样是出于安全性考虑,我们在日常使用linux系统时,一般是通过普通用户来进行操作,在某些操作需要root权限时,通过su - 命令,或者sudo命名获取root权限进行操作,而不是一直以root用户在系统中横冲直撞,因为说不定什么时候你手一抖,就进行了一些危险性的操作。 操作方法如下(操作前先通过useradd命令创建普通用户):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
通过vim打开该文件:
# vim /etc/ssh/sshd_config

在文件中找到下面一行文字:
#PermitRootLogin no
去掉该行前面的#号,使其成为下面这样:
PermitRootLogin no

接下来,在shell中输入以下命令来重启ssh服务
# service sshd restart

三、frp内网穿透

 接下来就是如何配置内网穿透了,使得外网可以直接连接内网的Linux主机1。前提是你需要有一台共有公网ip地址的服务器。

具体步骤参考了一下两篇文章:

 两篇博客中,一篇是将frp放在用户目录下,一篇是放在各种地方(配置文件放在/etc、日志输出在/var、程序放在/usr),两者各有优劣吧,我选择放在了用户目录下。配置过程中要注意几个点:

  1. Linux服务器如果是刚装的系统,需要去下载openssh才能被ssh访问
  2. 可以只配ssh,像rdp、http这种,用到了再配好了
  3. 服务器端和客户端都nohup后台运行
  4. 启动frpc客户端时报错login to server failed: EOF,客户端配置 common 下 添加 tls_enable = true即可
  5. 如果腾讯云服务器的账号密码和主机1的账号密码不一样,termius每次连接的时候会让你输密码,一样的时候就不用输(不知道是不是因为我没有会员的原因);vscode免密登录就没有这个问题
  6. 注意防火墙问题。像腾讯云、阿里云这种,是有两层防火墙的,一层是主机本身的防火墙(可以用shell命令去设置),一层是服务商提供的防火墙(阿里云是安全组),需要去官网“实例”中去管理。要两层防火墙都开放对应端口。

 配置完成后,就可以用腾讯云服务器的ip地址以及你配置的端口来连接内网的主机了,那台内网的主机也可以成为一个跳板机,用来连接内网的服务器!