Note

前言

上一章我们实现了wireguard在任意地方安全的访问家庭网络,这章我们将实现自定义域名和DDNS动态更新公网ip的需求。

自定义域名

内网自定义域名有什么好处:

  • 防止ip变更之后的访问难题

想象一下这样一个场景,一开始我内网部署了一个jellyfin服务,ip为192.168.5.132,但某天我的网段变了,我得用192.168.1.132这个ip去访问,这时好不容易浏览器记住的密码和所有缓存信息都失效,还有有记错ip需要重新查看的烦恼。

  • 有记忆特征

ipv4是4段数字,即使家里网段固定只需要记忆一段的数字,那也是0-254共255个数字,数字的记忆对人类来说是不如字符来的方便的,jellyfin132请问你是更喜欢记忆哪一个,虽然自建服务也可以通过搭建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

image.png

可以看到一级域名和二级域名都正常返回了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

访问[http://openwrt.linkzz.hm]:

image.png

反代成功

DDNS

家宽虽然有公网ip,但ip并不是固定的,运营商有策略不定期更换公网ip,每次更换之后如果没有在家,而且没有其他渠道查看公网ip,这时wireguard就失去与家里的连接了,为了避免这种情况,我们需要用一个固定的域名来解析家里的公网ip,然后依靠DDNS服务定时更新解析的ip地址。

R2s固件已经安装了DDNS的Luci,我们直接配置就好了

image.png

我的域名解析是Cloudflare托管的,我们安装Cloudflare的ddns脚本包:

opkg install ddns-scripts-cloudflare

获取Cloudflare API Token

在”我的个人资料“ -> "API令牌"处创建一个API令牌

image.png

模板选择”编辑区域DNS“

image.png

区域资源选择要包括的域名,TTL按需求选择。

image.png

创建好之后Cloudflare还给出了测试脚本,测试一下正常把Token保存起来。

DDNS脚本配置

新建一个服务:

image.png

填上相关信息:

image.png

  • 查询主机名:你要使用的域名,该域名必须存在dns解析,也就是要预先将现在的公网ip和这个域名绑定,如:mc.example.com
  • DDNS服务商:选择cloudflare.com-v4
  • 域名:二级域名和一级域名要用”@“符号连接,如:[email protected]
  • 用户名: Bearer
  • 密码:上面申请的 API Token

选择ip来源:

image.png

看到pid号就代表已经运行成功:

image.png

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界面,直接使用默认配置,勾选自动激活,启动即可。

image.png

结语

本章实现了自定义域名和DDNS的功能,对于我平时对旁路网关的使用需求已经足够了,现在局域网的设备已经完全可以将网关设置为我们的R2s正常上网,公网的访问也可以通过wireguard进行,当然,生命不休,折腾不止,后面如果有新的折腾方向,我会再来更新,敬请期待!

0
0
...
...
...
Avatar