原文地址:https://lala.im/8470.html,請支持原作者!該處僅作轉載。
首先在域名注册商那里添加胶水记录(glue record)这里以namecheap为例:
我这里添加了两个记录,分别是ns1和ns2,指向自己的服务器公网ip,添加完成后点搜索看看能不能搜到,能搜到就说明添加成功了:
然后把域名的ns服务器改为自己的,例如你的域名是example.com,你刚才添加的胶水记录是ns1和ns2,那么这里就填写ns1.example.com和ns2.example.com:
编辑configuration.nix:
nano /etc/nixos/configuration.nix
引入nsd.nix:
{
imports =
[
./hardware-configuration.nix
./lnmp.nix
./mastodon.nix
./peertube.nix
./nextcloud.nix
./nsd.nix
];
}
新建nsd.nix:
nano /etc/nixos/nsd.nix
我的配置如下:
{ config, pkgs, lib, ... }:
{
services.nsd = {
enable = true;
interfaces = [
"0.0.0.0"
"::"
];
zones."example.com" = {
data = ''
$ORIGIN example.com.
$TTL 1800
@ IN SOA ns1.example.com. admin.example.com. (
2022083101 ; serial number
10800 ; Refresh
3600 ; Retry
604800 ; Expire
3600 ; Negative response caching TTL
)
NS ns1.example.com.
ns1 A 1.2.3.4
@ A 1.2.3.4
www A 1.2.3.4
'';
};
zones."example2.com" = {
data = ''
$ORIGIN example2.com.
$TTL 1800
@ IN SOA ns1.example.com. admin.example2.com. (
2022083101 ; serial number
10800 ; Refresh
3600 ; Retry
604800 ; Expire
3600 ; Negative response caching TTL
)
NS ns1.example.com.
@ A 1.2.3.4
www A 1.2.3.4
'';
};
};
}
一个services.nsd.zones.name对应一个域名,多个域名就添加多个zones.name即可。例如上面的配置就有2个域名,分别是example.com和example2.com
每次修改区域记录后,soa记录里面的serial number记得往上增加,比如起始值是2022083101,修改一次记录后就可以改为2022083102。
配置完成后重建系统:
nixos-rebuild switch
测试解析是否正常:
dig +short @8.8.8.8 NS example.com
dig +short @8.8.8.8 A example.com
正常的话就能返回正确的解析结果: