自从找联通的师傅把家里的光猫改成桥接模式并开通公网IP之后,笔者便在折腾NAS的道路上一去不复返。
我在NAS上搭建了工作中常用的服务,gitea、yApi、jenkins、outline等,搭建了这个博客网站(采用frp进行内网穿透,解决运营商屏蔽443端口的问题),还将自己的小程序(小程序搜索:认真谈恋爱)的服务端放在NAS上,整体来说为自己创造了不少价值。
最近打算把近期折腾NAS的过程记录下来,同时也算做个分享,本篇内容主要是说明网络部分,也就是如下图蓝色区块的搭建。
开通公网IP
这个是一切的起点,所有的服务,想在公网爆露出去,最好的办法就是开通公网IP,公网IP不是固定IP,经常有朋友把他们弄混。
2022年的时候师傅表示300M以上的带宽默认都是公网IP,后面政策会不会变还不清楚。
注意:开不了公网IP的话还有个折中办法,采用内网穿透的方式,在此推荐使用frp,frp的速度要比花生壳内网穿透快很多(但比公网IP方式慢)。关于frp的使用以及如何免费使用第三方frp可以参考这篇文章。
光猫改桥接模式
之所以要把光猫改成桥接是因为,运营商送的光猫并不具备DDNS和端口转发功能,我们需要使用自己的路由器进行拨号,开启DDNS,同时进行端口转发。给装宽带的师傅打电话,他们远程就能改。
开启端口映射
在这里我主要的映射有:
- NAS SSH,这样在外网可以用ssh连接NAS(我将NAS的SSH端口设置为了2200)。
- OpenWRT,在NAS里装的旁路由,如果家中没有路由器的时候可以当作备选方案。
- Minio,文件存储服务,因为需要公网访问9000和9001这两个端口,所以没有放到traefik后面。
- Treafik,类似Nginx,但原生支持对docker的反向代理。8443→NAS 443,880→NAS 80.
注意:如果家中没有路由器或者路由器不支持端口映射,也可以用NAS安装旁路由来实现拨号,具体可以参考这篇文章。
购买域名
别的地方的钱都可以省,但是买域名的钱还是出一下吧,价格不贵,而且能极大的提升各项服务的体验。
我的域名是在花生壳买的,同时将域名的服务商改成了DNSPod,修改方式参考这篇文章。
域名添加A记录,其中主机域名设为*,记录值随便设置,可以先设置为1.1.1.1。
开启DDNS
DDNS其实就是动态的调整DNS服务器中的A记录,实现的前提就是域名服务商提供API来修改域名的A记录,我们在需要使用DDNS的地方通过脚本来获取可能动态会变动的公网IP,然后通过API告诉域名服务商修改A记录。
因此,实现DDNS需要做两件事:第一,获取DNSPod的API Token;第二,在本地用程序获取公网IP地址并使用DNSPod API更新A记录。
获取DNSPod Token
在DNSPOD的控制台中,如下图所示点击API密钥中。
点击DNSPod Token并创建密钥,记录下ID和Token。
动态更新DNS
我在威联通上通过docker-compose来实现DDNS。
在nas上合适的位置创建目录,并创建如下文件。
其中docker-compose文件如下:
---
version: "2.1"
services:
ddns-go:
image: jeessy/ddns-go
container_name: ddns-go
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
network_mode: "host"
restart: unless-stopped
在ddns-go目录下执行命令docker-compose up -d
命令来启动ddns-go,使用docker-compose logs -f
来查看启动日志,如果启动没有问题,那么就可以使用浏览器访问http://192.168.31.206:9876来访问。ddns-go的配置界面如下:DNS服务商选择Dnspod;ID和Token设置为上面记录的值;Domains设置为*.dreamlyn.cn。
啰嗦一句,最开始的时候,我是将DDNS的域名设置为home.dreamlyn.cn,并将*.dreamlyn.cn的cname设置为home.dreamlyn.cn。但这样设置的话,后面在使用traefik进行DNS Challenge时会存在问题,不得已只好将DDNS直接设置为*.dreamlyn.cn。
在其他配置中,设置登录用户名、密码并保存。
查看右侧的日志并登录DNSPod的后台看*.dreamlyn.cn的A记录是否变更,如变更,则说明DDNS安装成功。
至此,我们便打通了从 外网到NAS的线路,也就是说访问*.dreamlyn.cn:880时会映射到NAS的80端口,访问*.dreamlyn.cn:8443则会映射到NAS的443端口。