前言
上一章我们实现了wireguard在任意地方安全的访问家庭网络,这章我们将实现自定义域名和DDNS动态更新公网ip的需求。
自定义域名
内网自定义域名有什么好处:
- 防止ip变更之后的访问难题
想象一下这样一个场景,一开始我内网部署了一个jellyfin服务,ip为192.168.5.132
,但某天我的网段变了,我得用192.168.1.132
这个ip去访问,这时好不容易浏览器记住的密码和所有缓存信息都失效,还有有记错ip需要重新查看的烦恼。
- 有记忆特征
ipv4是4段数字,即使家里网段固定只需要记忆一段的数字,那也是0-254共255个数字,数字的记忆对人类来说是不如字符来的方便的,jellyfin
和132
请问你是更喜欢记忆哪一个,虽然自建服务也可以通过搭建dashbord服务如heimdall,但是这样打开网页的效率着实有点低,你需要打开heimdall页面,再去点击相应的链接,同样还要维护服务的变更。
- 签发证书实现https
有了自定义域名,我只需要修改nginx配置,将反代的ip变更即可解决以上2个问题,同时通过自签名的泛域名证书,我可以通过https访问自建服务,https可以开启一些自建服务的一些功能。
Dnsmasq配置
openwrt的dns服务基于dnsmasq,自定义一个内网域名解析我们只需要修改配置即可:
vi /etc/config/dhcp
config dnsmasq
配置下添加list address选项
config dnsmasq
option domainneeded '1'
option localise_queries '1'
option rebind_protection '1'
option rebind_localhost '1'
option local '/lan/'
option domain 'lan'
option expandhosts '1'
option authoritative '1'
option readethers '1'
option leasefile '/tmp/dhcp.leases'
option resolvfile '/tmp/resolv.conf.d/resolv.conf.auto'
option ednspacket_max '1232'
option localuse '1'
list address '/linkzz.hm/192.168.5.120'
option localservice '0'
上面定义了一个linkzz.hm的域名,指向192.168.5.120
,这个ip就是nginx服务的ip,这个指向是支持泛域名的,就是*.linkzz.hm
都是指向nginx的,所有自建服务都可以用子域名来配置nginx,无须再对单独的自建服务添加域名解析。
下面我们尝试一下这个配置是否生效。
先重启一下network服务:
/etc/init.d/dnsmasq restart
查询DNS:
nslookup linkzz.hm 192.168.5.99
可以看到一级域名和二级域名都正常返回了nginx地址
Nginx配置
我的Nginx部署在PVE容器里面,配置一下反代openwrt的80端口:
upstream openwrt-server {
server 192.168.5.99:80;
}
server {
listen 80;
server_name openwrt.linkzz.hm;
location / {
proxy_pass http://openwrt-server;
sendfile off;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
client_max_body_size 10m;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
}
}
测试重启Nginx:
nginx -t && nginx -s reload
反代成功
DDNS
家宽虽然有公网ip,但ip并不是固定的,运营商有策略不定期更换公网ip,每次更换之后如果没有在家,而且没有其他渠道查看公网ip,这时wireguard就失去与家里的连接了,为了避免这种情况,我们需要用一个固定的域名来解析家里的公网ip,然后依靠DDNS服务定时更新解析的ip地址。
R2s固件已经安装了DDNS的Luci,我们直接配置就好了
我的域名解析是Cloudflare托管的,我们安装Cloudflare的ddns脚本包:
opkg install ddns-scripts-cloudflare
获取Cloudflare API Token
在”我的个人资料“ -> "API令牌"处创建一个API令牌
模板选择”编辑区域DNS“
区域资源选择要包括的域名,TTL按需求选择。
创建好之后Cloudflare还给出了测试脚本,测试一下正常把Token保存起来。
DDNS脚本配置
新建一个服务:
填上相关信息:
- 查询主机名:你要使用的域名,该域名必须存在dns解析,也就是要预先将现在的公网ip和这个域名绑定,如:mc.example.com
- DDNS服务商:选择
cloudflare.com-v4
- 域名:二级域名和一级域名要用”@“符号连接,如:[email protected]
- 用户名:
Bearer
- 密码:上面申请的 API Token
选择ip来源:
- IP地址来源:选择URL
- 用于检测的URL:http://checkip.dyndns.com
- 事件网络:选择
br-lan
看到pid号就代表已经运行成功:
KMS服务
KMS是一个windows激活的网络工具,平时都是使用一些公网搭建的KMS服务,今天我们自建一个内网的服务,不使用公网的服务。
安装
在github仓库找到相应平台的安装包,R2s对应的cortex-a53
平台:
wget https://raw.githubusercontent.com/cokebar/openwrt-vlmcsd/gh-pages/vlmcsd_svn1113-1_aarch64_cortex-a53.ipk
opkg install vlmcsd_svn1113-1_aarch64_cortex-a53.ipk
在 github release页面下载最新的ipk包
wget https://github.com/cokebar/luci-app-vlmcsd/releases/download/v1.0.2-1/luci-app-vlmcsd_1.0.2-1_all.ipk
opkg install luci-app-vlmcsd_1.0.2-1_all.ipk
配置
Web端需要退出再登录或者刷新缓存才能看到luci界面,直接使用默认配置,勾选自动激活,启动即可。
结语
本章实现了自定义域名和DDNS的功能,对于我平时对旁路网关的使用需求已经足够了,现在局域网的设备已经完全可以将网关设置为我们的R2s正常上网,公网的访问也可以通过wireguard进行,当然,生命不休,折腾不止,后面如果有新的折腾方向,我会再来更新,敬请期待!