前段时间整了一套主机,3060ti+intel 11600F,终于不用在轻薄本上跑机器学习代码了,也不用因为服务器价格昂贵而发愁了。但是这些仅限在家中使用,一旦外出或者返校,这套主机就在家里吃灰吧,想想一年在家不超过100天时间,买来实在是性价比不高,但是我早有准备,曾有幸在某站上刷过将自家不用的机子改装成服务器的例子,这正好激发了我的兴致,所以说干就干,下面将从原理和实操角度来回顾我装机过程~
PS:为什么是双系统,我想热爱游戏的朋友不会陌生,Win娱乐生产力,Ubuntu学习生产力,不耽误!
由于机子买来自带Win11系统,所以只用准备Ubuntu的安装。Ubuntu系统选用的是20.04版本,2202年了,20年的版本还是稳定可靠的(可以免费安全维护至2025年)。首先,在Ubuntu官网下载系统镜像,由于机子配置还是挺高的,鲁大师跑分能上150万+,所以果断选择了桌面版(就是任性),当然配置不足的还是选择server版吧。
在上文中提到下载系统镜像,如下所示:
下载制作U盘启动盘软件PowerISO
准备一个4G以上的U盘(最好是空U盘,因为制作启动盘时会格式化),注意备份,接着选中工具,制作U盘启动盘。
最后选定镜像文件,确定目标U盘,点击开始即可,这样Ubuntu启动U盘就制作完成。
我们必须分一定的空闲空间给Ubuntu系统运行,所以我们需要在Win系统上进行分盘。分盘步骤如下:
选择未分配区域,右键新建卷,按照要求一步步走,然后再将新建的卷删除,就变成可用空间了。
其实这里我仍然是未分配空间,但是参考别的网上教程,都是会变成可用空间,不过就算这样,之后的系统还是能安装成功的(不知道是不是win11系统问题)。注意系统硬盘分区有两种方式,一种是bios+MBR,一种是uefi+GPT,后者的可以直接分盘,而前者会在一些特殊情况出现问题,具体可以自行百度。
安装之前,要设置BIOS,这个不同主机会有不同的差异,主要以下几点:
我买的是联想刃7000k主机,有可视化界面,所以这一点就友好很多。首先关机,插入启动盘,疯狂按f12进入可视化界面,选择U盘启动,这样就直接进入Ubuntu的安装界面了。一些简单的建议操作如下:
接下来就是安装的重中之重了,创建分区。选中空闲分区点击加号即可设置分区。分区方案有多种,网上和各类教程书上都有详细的方案。我选择的是比较简单的分区方案,共4个分区。
PS:由于安装的时候未截图,所以使用了网图,图片的来源我会在文末链接。
剩下的就是选择区域和填写用户名和密码,等待安装,最后重启,拔掉U盘,选择Ubuntu启动,这样Ubuntu系统就安装完毕了。
使用Ubuntu第一步一定要设置root,因为很多操作需要sudo的权限才能操作。
sudo passwd root
。服务器远程连接一般都是通过ssh进行连接的,那么就得在Ubuntu上安装ssh并设置开机自启,这样就可以一直保持对服务器的连接了。
sudo apt-get install openssh-server
ps -e|grep ssh
sudo vi /etc/ssh/sshd_config
,找到# Port 22,去掉注释改成一个五位数的端口(防止端口扫描)。sudo /etc/init.d/ssh restart
。sudo systemctl enable ssh
。这样,ssh就配置成功了。
在远程连接的路上还是有不少选择的,当然我在第一步就踩了坑,这也是由于我计算机网络知识遗忘了不少,现在终于拾起,倍感惭愧。一开始我是知道可以从互联网服务商那里要求公网IP的,但是一个残酷的现实是,我的房间里没有网线,连接网络必须使用WIFI,这就涉及到NAT,网络地址转换,我的服务器在我家路由器的内网里,外界可能只知道我家的路由器(甚至不知道,后面会有解释),而不知道服务器的存在,那么外界的连接来带家中路由器就戛然而止了,它根本无法连接到我的服务器。那么该如何解决呢?
这里我还想提一嘴在一开始我犯的一个愚蠢的错误。我在Ubuntu上输入ifconfig,根据查询到的IP地址用MobaXterm进行连接,很顺利,一下子就连接上了,我当时还在想要什么公网IP,这样不就轻轻松松连上了!很快我就意识到了错误,我无意发现IP地址的开头是192.168开头,查询了下发现属于C类私网地址,并且我的笔记本也是这个开头的IP。二者在同一私网内,自然能连接起来,搭建服务器的初衷,就是在不同私网的条件下使用,所以这个愚蠢的错误差点让我白折腾一通。
那么向日葵连接,是一个付费的远程的连接工具,当然并不是所有服务都付费,免费的服务已经够我使用了,包括桌面控制、桌面查看和远程文件(SSH需要付费,如何解决看下一节),并且我只要注册好一个账号,让所有的设备都添加到设备列表中,设置开机自启自动连接账号,这样远程操控不要太舒服。
这里附上Ubuntu中向日葵的安装:
安装好后还要设置开机自启,在终端输入gnome-session-properties
,会出现如下窗口
命令中输入向日葵可执行文件的路径即可。
但是向日葵也经常不稳定,比如开机虽然自启,但是自动登录会经常失败,需要刷新一下才行,如果我是远程控制,那么还需要家里有人给我点一下刷新,这么麻烦的事情,还不如拉一条网线呢。这个问题困惑了我很久,一直不知道如何解决,直到今天看到了内网穿透的概念,一瞬间我豁然开朗。
起因还是看了科技宅小明在某站发布的视频,在其中他提及了内网穿透的概念,我特地百度了一下,内网穿透,也即 NAT 穿透,进行 NAT 穿透是为了使具有某一个特定源 IP 地址和源端口号的数据包不被 NAT 设备屏蔽而正确路由到内网主机。这个好,我现在遇到的问题,不就是服务器受到NAT设备屏蔽无法远程连接嘛,那么该如何做呢?(NAT的原理请参考计算机网络大黑书)
百度百科上是这样介绍的:
一个内网客户端使自己的接收端口作为源地址,向对端的发送端口发送一个udp数据包,这个数据包称为打洞包。发送过这个打洞包后,可以在这个内网的出口路由器上产生一条NAT记录,令后续从对端发送端口发来的数据包都不被丢弃, 而是转发给相应的内网客户端的指定端口。
发送过打洞包后,对端发送至本端路由器指定接收端口的数据包,就会根据NAT记录转发至本端的内网服务器接收端口,从而实现了内网服务器接收外网数据包的功能。
另一个内网服务器同样执行上述步骤 (3) 、 (4), 即可实现两端内网服务器相互收发音频数据包的功能。
这个过程听起来很复杂,我解释一下,本质就是两个内网客户端在外网服务器上注册,互相识别(本质是内网所在的路由器互相识别NAT记录),然后进行通信。这有点像探探的喜欢功能,二者只有互相喜欢(指向相同的中转服务器),才能够了解到互相的信息,然后才能够互加微信进行聊天。既然原理已经了解了,那么接下来就是用轮子的问题(PS:向日葵也是基于这个原理实现的)。
这里使用zerotier实现内网穿透。
登录zerotier官网注册账号。
Ubuntu安装zerotier的命令:sudo apt-get update ; sudo apt-get install curl ; curl -s https://install.zerotier.com | sudo bash
。并加入局域网中:sudo zerotier-cli join 命令空格网络ID
。
这样,通过内网穿透技术就实现了外网访问内网的服务器了,我的个人服务器也就搭建完成。
科技宅小明在视频中说,由于IPv4端口号不够用的问题,所以才产生NAT,又由于NAT都不够用的问题,所以产生大内网,即NAT套娃,所以家用路由器的IP可能还是大内网中的一个私有地址,整个大内网甚至覆盖整个小区,如果使用IPv6的话,这样的问题就不复存在了,因为IPv6地址多的用不完(地球上每一粒沙子都可以拥有一个IP),但是由于路由器的限制,导致很多还是只能用IPv4地址,这也就是我不得不通过各种方法实现服务器搭建的原因。
总的来说,这是一篇理论+操作的博客,嫌麻烦的同学可以直接略过理论部分,直接上手,大概率是不会出错的(可能几年后就不好说了)。希望对大家有所帮助,如果有疑惑或者文章部分不严谨的地方,还望批评指正。
参考链接
https://blog.csdn.net/qq_45488453/article/details/107783752
https://www.bilibili.com/video/BV1Qq4y1w7F5
https://blog.csdn.net/weixin_39824834/article/details/111534767
https://blog.csdn.net/qq_41057206/article/details/80534194
https://blog.csdn.net/weixin_40543283/article/details/84728299