lala.im:NixOS配置NSD(Authoritative DNS name server)

運維技術·lala.im · 2022-08-31 · 114 人浏览

原文地址: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

正常的话就能返回正确的解析结果:

範例

運維技術 lala.im
Theme Jasmine by Kent Liao