家里吃灰的电脑再利用,买个域名就能当服务器用
家里不用的旧电脑经过简单的配置也能当服务器使用。不是那种只能在局域网里自嗨的"服务器",是从外面用手机5G、用公司WiFi都能直接通过域名访问的那种。而且全程只需要花39元购买一个域名。
之前我租了台最低配的ECS跑个人项目,到期续费时发现涨价了不少。为了省点钱,不如把旧电脑再利用一下。IPV6 + DDNS 方案,只需要准备一个域名,就能实现家里电脑当服务器用。
你家宽带大概率已经有IPv6了
我用的是移动宽带,光纤入户。之前一直以为IPv6是个很遥远的东西,直到有天在路由器后台瞥了一眼——嗯?居然已经分配了IPv6地址?
查了一下才发现,三大运营商这几年已经把IPv6铺得差不多了。移动尤其积极,基本上只要你家光猫不是十年前的古董,IPv6默认就是开的。
光猫有IPv6不代表万事大吉了。后面还有几个坑得我挨个说。
配置路由器支持ipv6
路由器也需要配置,我使用的是小米路由器,在路由器运行模式的界面切换到中继模式。连接到路由器的设备直接被分配了ipv6地址,光猫负责ipv6地址的分配。
光猫的IPv6防火墙
光猫设备拿到了公网IPv6地址。路由器工作在了中继模式。从电脑ping外网的IPv6地址也通了。
但是外网设备能访问家里设备吗?不行。后来经过调查发现,光猫默认开启了IPv6入站防火墙,把所有来自外部的请求全挡了。
问题也好解决,登录光猫后关闭ipv6防火墙就好了。
进光猫后台,找"安全"或者"防火墙"相关的设置页,把IPv6入站防火墙关掉。每个光猫的选项位置不同,有的叫"IPv6 SPI防火墙",有的叫"IPv6入站规则"。总之找到它,关掉它。
关掉之后,从外面访问家里的IPv6地址——通了!
IPv6地址居然会变?
家庭宽带的IPv6前缀是通过DHCPv6-PD动态分配的。路由器重启、ISP那边维护、或者DHCPv6租约到期重新获取——这些情况都可能导致你的前缀发生变化。前缀一变,后面所有设备的地址就全跟着变了。 为了应对ipv6地址变化,我们需要一个DDNS(Dynamic DNS)服务。通过将域名和IPv6地址做一个映射,来实现动态更新IPv6地址。
DDNS方案:Python脚本 + 阿里云域名
写个脚本,每隔几分钟检测一次本机的稳定IPv6地址,如果变了就调阿里云API更新域名的AAAA记录。
域名我用的阿里云,便宜。.cn后缀的一年三十多块,.com也就六七十。在阿里云控制台申请就行,跟买东西一样,没什么好说的。
然后是权限。别用你的主账号AccessKey,去RAM访问控制创建一个子账号,专门给DDNS脚本用。权限给最小化——只需要三个操作:DescribeDomainRecords、AddDomainRecord、UpdateDomainRecord。
脚本的逻辑其实很简单:
整个脚本不到200行,纯Python标准库,不需要pip install任何东西。Python 3.6以上就行,现在几乎所有Linux发行版都自带了。
定时任务用cron,每5分钟跑一次:
*/5 * * * * /usr/bin/python3 /opt/ddns/ddns.py>>/var/log/ddns.log2>&15分钟这个频率我觉得刚好。够快——就算前缀变了,最多5分钟的不可达时间。也够慢——一个月下来API调用次数也就八千多次,阿里云的免费额度完全够用。
跑起来了
到现在跑了两个多星期,还算稳定。 现在在外面用手机5G打开浏览器,输入域名,直接就能访问到家里那台电脑上的服务。跟访问云服务器没什么区别。
总结
当然,免费的东西总有代价。家里宽带的上行带宽一般就30~50Mbps,跟云服务器比确实差了点意思。另外运营商基本都会封掉80和443端口(家庭宽带不允许对外提供标准Web服务),你得换别的端口,比如8080、8443。
还有稳定性——家里断个电断个网,服务就挂了。不像云服务器有SLA兜底。
但如果你跟我一样,只是跑个个人项目、搭个开发测试环境、挂个API或者私人网盘之类的,这个方案绰绰有余。