旧电脑改造服务器和外网访问家庭nas/软路由实战记录

对于旧电脑,很多时候都闲置在家,技术好一些的同学可能会把他改造成软路由,但是很多旧电脑都只有百兆接口,作为软路由也未必能满足现在家里动辄500M,1000M的宽带。技术差一些的,可能会直接去闲鱼上卖掉,虽然可能只能卖几十块钱,毕竟也能买点菜或者买包烟。还有的小伙伴会改造成nas,但是nas本身也不贵,而且旧电脑硬盘有限,不是一个很好的选择。最近在家中没法出门,刚好手边有一台旧电脑,突然阿里云提醒我服务器到期了,必须续费了,我就突发奇想,尝试把旧电脑改造成云服务器。
那么就先介绍一下我的这台旧电脑,是很久以前(2016年)在闲鱼上淘的,当时以600元的价格购入。
在这里插入图片描述
这款笔记本采用了AMD Fusion APU E-300的CPU,主频为1.3GHz,内存2G,放在2016年也只能算个上网本,放在今天可就是电子垃圾的水平了。甚至连手机的性能也不如。这款笔记本打开网页都能卡上半天,基本没有正常使用的可能。

给旧电脑刷Ubuntu系统并暴露22端口

要开始改造成服务器,第一步就是刷上喜欢的系统。这里我采用的是Ubunutu20.03的发行版,LinuxMint。各位可以去官网下载:https://linuxmint.com/。下载过后就要开始制作U盘启动盘,在Windows,MaxOS系统下,都有常用的制作启动盘软件,我用的是MacOS下的BalennaEtcher(https://www.balena.io/etcher/)。整个过程也是非常傻瓜,打开软件后选择刚才下载的LinuxMint镜像,写入U盘,几分钟过后,就完成了制作。然后插上U盘,开机进BIOS,选择从U盘启动,一路安装即可。

安装完成后,需要给这台Ubuntu暴露22端口

sudo apt install openssh-server

如果该电脑有防火墙,还需执行:

sudo ufw allow ssh

网络拓扑

接下来,我想花一些时间和各位聊下如何进行网络拓扑。如果您的旧电脑可以直接暴露在公网上,那么这件事情就变得非常简单了。也就是说,你的电脑能够直连你家的猫(调制解调器)拨号,或者只通过二层设备(例如交换机)连接猫拨号,并且(划重点),你的宽带运营商提供给你一个固定外网IP。然而,大多数情况下,移动宽带用户是一定拿不到固定外网IP,而电信宽带用户不一定能拿到固定外网IP。再说,一般家里都会在猫后面加装路由器或者其他NAT设备,这样,你的旧电脑的IP一般都是192.168.*.*的形式。就必须进行端口映射。我的网络拓扑如下:
请添加图片描述
当然,您也可以根据自己的实际情况进行调整。例如:如果您家中只有一级路由,则可以直接在旧电脑上配置frpc客户端。如果您的一级路由可以支持frpc功能,则可以在一级路由上配置fprc等等。

施工

购买ECS、购买域名并解析

既然网络拓扑已经设计好,那么可以开始实施了。首先,我们要把云端的资源配置好。我这里选择的是阿里云,您也可以根据自己的实际情况选择天翼云或腾讯云。第一步当然是购买ESC服务器啦,大家可能要问,你利用旧电脑就是为了节省ECS的费用,但是为了利用起来,不得不又买了一个ECS,这不是多此一举吗?这个问题问得很好。这里的ECS就是为了解决内网穿透的中继问题,但是你只要购买一个,你就可以利用这台中继,访问包括旧电脑在内的所有内网设备,例如nas、软路由、二级路由等等。购买好ECS过后,还需要购买一个域名。一般的域名一年50多元,经济实惠。然后把您的域名解析到ECS的IP上。请添加图片描述
解析完成之后,测试一下,果然已经能够正确被DNS识别了。
请添加图片描述

在ECS上部署frps

接下来我们要在服务器上部署frp。
首先认识一下frp。简单地说,frp就是一个反向代理软件,它体积轻量但功能很强大,可以使处于内网或防火墙后的设备对外界提供服务,它支持HTTP、TCP、UDP等众多协议。在服务器端,我们要运行frp的server版本。我们先去frp的官方github上下载发行版本:https://github.com/fatedier/frp/releases。可以本地下载再scp到服务器上,也可以直接在服务器上下载。
下载完成后,解压(以下载的是0.37.1的版本为例):

tar -zxvf frp_0.37.1_linux_amd64.tar.gz

然后打开解压后的文件夹

cd frp_0.37.1_linux_amd64/

我们注意到,这个文件里有frpc和frps两个可执行文件,分别对应frps_full.ini和frpc_full.ini两个配置文件。我们在这里需要运行的是服务器文件也就是frps,因此也只要选择frps.full.ini进行配置即可。打开frps_full.ini,进行一些配置,配置无需做太大改动,根据自己的需求配置即可。:

# [common] is integral section
[common]
# 如果有多个IP,可以选择绑定到不同的ip上
bind_addr = 0.0.0.0
bind_port = 7000
# udp port to help make udp hole to penetrate nat
bind_udp_port = 7001

# 虚拟主机配置,不能和系统中已监听的端口冲突。http和https可以设置成同一个
vhost_http_port = 8080
vhost_https_port = 4433

# 服务端web面板
dashboard_addr = 0.0.0.0
dashboard_port = 7500
# 设置用户名密码,默认都是admin,请注意做修改
dashboard_user = admin
dashboard_pwd = admin

# 普罗米修斯运维服务,go语言相关监控,可以关闭
enable_prometheus = false

# 设置日志文件地址
log_file = /var/log/frps.log
# trace, debug, info, warn, error
log_level = info
log_max_days = 3
# disable log colors when log_file is console, default is false
disable_log_color = false
# DetailedErrorsToClient defines whether to send the specific error (with debug info) to frpc. By default, this value is true.
detailed_errors_to_client = true


# 最新版本支持的验证方式比较多,这里还是选用token模式
# AuthenticationMethod specifies what authentication method to use authenticate frpc with frps.
# If "token" is specified - token will be read into login message.
authentication_method = token
# AuthenticateHeartBeats specifies whether to include authentication token in heartbeats sent to frps. By default, this value is false.
authenticate_heartbeats = false
# AuthenticateNewWorkConns specifies whether to include authentication token in new work connections sent to frps. By default, this value is false.
authenticate_new_work_conns = false
# auth token 相当于密码,请注意保护
token = my_token

# 允许配置绑定的端口
# only allow frpc to bind ports you list, if you set nothing, there won't be any limit
allow_ports = 2000-3000,3001,3003,6000-7000,4000-50000

# pool_count in each proxy will change to max_pool_count if they exceed the maximum value
max_pool_count = 5

# max ports can be used for each client, default value is 0 means no limit
max_ports_per_client = 0

# TlsOnly specifies whether to only accept TLS-encrypted connections. By default, the value is false.
tls_only = false

# 子域名配置,取决于你使用的dns服务器是否支持泛域名解析,如果不支持,请不要填写。
# 如果填写了域名,客户端只需要填写子域名即可。例如客户端填写 client1,那么访问域名就是 client1.frps.com
subdomain_host = frps.com

# if tcp stream multiplexing is used, default is true
tcp_mux = true

# 定制404页面
# custom_404_page = /path/to/404.html

保存好配置文件后,在项目根目录下运行

nohup ./frps -c frps_full.ini &

即可在后台启动frps。

在ECS上开启指定端口

再接下来就是设计好自己要开的端口。例如,访问旧电脑的我们使用6002端口,访问nas使用6001端口,访问软路由使用6000端口。这样远程设备和局域网内的设备就可以在服务器的指定端口进行通信。
开通端口的第一步,就是去ECS上开通指定的端口,允许所有设备访问:
请添加图片描述
服务器端的配置到这里已经设置好,接下来去配置客户端的内容。我这里使用的家里的软路由作为客户端,原因是软路由的lede/openwrt系统中可以安装frp的客户端,配置方便快捷。如果没有软路由的朋友,也可以直接在自己的旧电脑上修改配置文件frpc_full.ini,并运行

nohup ./frpc -c frpc_full.ini &

在lede/openwrt上配置frpc

接下来介绍如何在软路由(lede/openwrt)系统上配置frpc。
首先打开lede/openwrt系统,选择“酷软“,再安装frpc,进入到配置页面。
请添加图片描述
服务器地址:就是你购买的ECS的IP
服务器端口:就是配置文件中绑定的服务器端口
底层通讯协议选择tcp
tcp多路复用选择true
连接设置:失败后重复连接
连接密码:就是你在配置文件中配置的密码
http穿透服务端口选择80
https穿透服务端口选择443
(注意,当使用80和443端口的时候,一般需要进行域名备案,这里可以自行备案,详情参照各大云服务提供商,都有备案服务,备案服务需要等管局审批,一般需要10-20个工作日)
日志选项默认即可。

然后到了frpc穿透配置中
服务名称可以根据目的填写
如果需要ssh访问,协议类型选择tcp,如果是网页访问,协议类型选择http。例如,我需要外部既可以通过网页访问我内网的nas,也可以通过ssh访问nas,那么应该填写两条记录,分别是http的协议和tcp的协议。
域名一般使用二级域名,也就是你的域名加上一个前缀。如果是ssh访问,则域名不用填写。
内网地址就是在本局域网内,指定服务所在的地址,因为我的frpc服务是配置在lede上的,但ssh的机器并不是lede本身,而是内网内的一台旧电脑,因此内网地址应该填写为旧电脑的内网IP,例如:192.168.100.240。如果您的frpc配置机器和旧电脑是同一台电脑,IP可以写作127.0.0.1。如果是ssh服务,内网端口一般写作22,如果是http访问,则根据你内网服务暴露的端口来决定,一般网页都是80,而群晖的nas有自己专用的端口5000。对于http服务来说,远程端口一般默认为80,但是对于ssh服务需要指定端口,也就是刚才我们设计的端口6000,6001,6002。最后两个参数默认为关闭。

测试

到这里,所有的配置已经大功告成。我们首先通过外网来访问一个nas试试
请添加图片描述
顺利外网上了内网的群晖管理页面,万一出差在外,需要翻看以前的照片,没问题,直接登陆访问即可!

如果刚好在家,家里人告诉我网络坏了,没关系,自己动手就能进到家中软路由的管理页面。
请添加图片描述
接下来测试下ssh连接是否正常。
我们先来连接旧电脑:

ssh -oPort=6002 旧电脑用户名@服务器IP

请添加图片描述
顺利登陆

接下来测试下ssh连接软路由

ssh -oPort=6000 软路由用户名@服务器IP

请添加图片描述
顺利登陆,如果软路由上跑的clash挂了,家里看不了Youtube,登不了Twitter了,没问题,远程帮忙搞定!

最后测试下nas

ssh -oPort=6001 nas用户名@服务器IP

请添加图片描述
虽然nas说了,官方不建议你通过ssh来登陆系统,但是有个备份功能还是挺不错的,毕竟nas上还能装nodejs,能跑docker,多一种方法,多一种选择。

总结

此次实战中,解决了旧电脑利用率不高的问题,家庭网络出现故障出差在外无法现场解决的问题。如果以后自己搭建nas或黑群晖,没有quickconnect的情况下,这样的方式很好的解决了在外访问家庭nas的问题。

番外

如果配合上Windows的远程桌面使用,就能打造属于自己的云电脑。
配置方法也非常简单,首先在windows电脑上开启远程桌面功能
在软路由上使用TCP连接,映射端口为3389(远程桌面端口)
请添加图片描述

然后在macOS上下载Microsoft Remote Desktop软件,添加电脑为
请添加图片描述
然后点击保存,连接,输入电脑的用户名和密码后,就能享受远程控制家里windows电脑的便捷啦!
请添加图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐