海运的博客

ubuntu安装Knot 域名权威Authoritative DNS服务器配置ddns动态更新ip

发布时间:February 4, 2021 // 分类:DNS // No Comments

目前在使用dnspod更新ddns ip,但是dnspod免费账号ttl最低设置为600,对于要求及时更新的可自己搭建dns服务器更新ddns,本文使用knot,相对bind有占用资源小,配置简单优点。

apt install knot knot-dnsutils

生成远程更新验证key并添加到配置文件,首行格式用于客户端knsupdate验证key:

keymgr -t key_knsupdate
# hmac-sha256:key_knsupdate:USWfnZKqVwfbv/rcaJtyJA+Evj9eS6v23BmXFO0h0r0=
key:
  - id: key_knsupdate
    algorithm: hmac-sha256
    secret: USWfnZKqVwfbv/rcaJtyJA+Evj9eS6v23BmXFO0h0r0=

knot配置文件,knsupdate和主从同步可使用key或ip认证:

server:
    identity: 
    version: 
    nsid: 
    rundir: "/run/knot"
    user: knot:knot
    #listen: [ 0.0.0.0@53, 127.0.0.1@53, ::1@53 ]
    listen: 192.168.1.1@53

log:
  - target: syslog
    any: info

# hmac-sha256:key_knsupdate:USWfnZKqVwfbv/rcaJtyJA+Evj9eS6v23BmXFO0h0r0=
key:
  - id: key_knsupdate
    algorithm: hmac-sha256
    secret: USWfnZKqVwfbv/rcaJtyJA+Evj9eS6v23BmXFO0h0r0=

remote:
  - id: slave
    address: 192.168.2.1@53
    key: key_knsupdate

  - id: master
    address: 192.168.1.1@53
    key: key_knsupdate

acl:
  - id: acl_slave
    #address: 192.168.2.1
    key: key_knsupdate
    action: transfer

  - id: acl_master
    #address: 192.168.1.1
    key: key_knsupdate
    action: notify

  - id: acl_knsupdate
    #address: [ 127.0.0.1, 192.168.1.1 ]
    key: key_knsupdate
    action: update

template:
  - id: default
    storage: "/var/lib/knot"
    file: "%s.zone"

zone:
    # Master zone
  - domain: ddns.haiyun.me
    notify: slave
    #acl: acl_slave
    acl: [ acl_slave, acl_knsupdate ]

knot dns主从同步配置,以上配置文件zone为master,slave要将zone替换为:

zone:
    # Slave zone
  - domain: ddns.haiyun.me
    master: master
    zonefile-load: whole
    acl: acl_master

zone文件:

cat /var/lib/knot/ddns.haiyun.me.zone 
;; Zone dump (Knot DNS 2.7.8)
ddns.haiyun.me.         3600    SOA     ns1.haiyun.me. admin.haiyun.me. 2021020415 60 60 1800 60
ddns.haiyun.me.         3600    NS      ns1.haiyun.me.
ddns.haiyun.me.         3600    NS      ns2.haiyun.me.
1.ddns.haiyun.me.       10      A       1.1.1.1
1.ddns.haiyun.me.       10      AAAA    ::1
www.ddns.haiyun.me.     10      A       1.1.1.1
;; Written 6 records
;; Time 2021-02-04 17:52:03 CST

使用knsupdate动态更新dns ip:

cat > cmd.txt << EOF
server 127.0.0.1
zone ddns.haiyun.me.
del 1.ddns.haiyun.me.
add 1.ddns.haiyun.me. 10 A 1.1.1.1
add 1.ddns.haiyun.me. 10 AAAA ::1
show
send
answer
quit
EOF
knsupdate -y "hmac-sha256:key_knsupdate:USWfnZKqVwfbv/rcaJtyJA+Evj9eS6v23BmXFO0h0r0=" cmd.txt

或通过knotc更改dns记录:

knotc zone-begin ddns.haiyun.me
knotc zone-set ddns.haiyun.me www 10 A 1.1.1.1
knotc zone-commit ddns.haiyun.me

参考:
https://www.knot-dns.cz/docs/2.7/html/reference.html
https://www.knot-dns.cz/docs/2.7/singlehtml/index.html
https://en.wikipedia.org/wiki/Comparison_of_DNS_server_software
https://blog.groverchou.com/2020/08/10/Knot-DNS-%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/

此内容被密码保护

发布时间:February 21, 2013 // 分类:DNS,KMS // No Comments

请输入密码访问

Bind为域名邮箱添加SPF记录

发布时间:August 25, 2012 // 分类:Mail // No Comments

在垃圾邮件泛滥的今天,邮件服务器和域名设置SPF是必不可少的,之前有介绍PostFix下配置SPF验证,那怎么能证明自己服务器发出的邮件能被对方视为来源正确呢,那就为自己的域名添加SPF记录吧。
SPF记录以TXT格式配置在DNS中,可以使用以下参数定义信任地址:

include #调用特定域名的SPF进行验证
ip4 #使用 IPv4 进行验证
ip6 #使用 IPv6 进行验证
a  #使用域名A记录验证
mx #使用MX记录验证
ptr #使用PTR进行验证

定义匹配时的返回值:

+ #默认,通过
- #硬失败
~ #软失败
? #不置可否

SPF书写示例:

"v=spf1 +a:www.haiyun.me +ip4:192.168.1.0/24 -all"
#定义www.haiyun.me的A记录IP和192.168.1.0/24网段,其它全部为不信任,+默认可略。

将域名SPF添加到BIND DNS服务器

@       IN      TXT     "v=spf1 a ip4:184.164.141.188 ~all"
#或
www.haiyun.me.      IN      TXT     "v=spf1 a ip4:184.164.141.188 ~all"

测试SPF是否生效:

dig www.haiyun.me txt +short
"v=spf1 a ip4:184.164.141.188 ~all"

也可以发送到gmail邮箱查看SPF验证结果:

Received-SPF: pass (google.com: domain of admin@www.haiyun.me designates 184.164.141.188 as permitted sender) client-ip=184.164.141.188;
Authentication-Results: mx.google.com; spf=pass (google.com: domain of admin@www.haiyun.me designates 184.164.141.188 as permitted sender) smtp.mail=admin@www.haiyun.me

Bind远程管理rndc配置

发布时间:July 12, 2012 // 分类:DNS // No Comments

rndc可以对本地及远程DNS服务器进行管理、控制而不用重启BIND,配置如下:
1.生成rndc key,用于客户端与服务器进行交互验证:

rndc-confgen -a -u named #生成rndc-key并写入/etc/rndc.key文件

Bind服务器配置:

cat /etc/named.con
include "/etc/rndc.key"; #服务器调用rndc.key
controls {
       inet 0.0.0.0 port 953 #如只允许本地rndc管理填写127.0.0.1
               allow { 127.0.0.1; 192.168.1.3; } keys { "rndckey"; }; #允许通过rndc管理此DNS的IP、KEY
};

配置rndc客户端:

cat /etc/rndc.key
options {
        default-key "rndckey";
        default-server 192.168.1.2; #要管理的DNS地址,管理本地DNS为127.0.0.1
        default-port 953;
};
key "rndckey" {  #复制为rndc.key内容
    algorithm hmac-md5;
    secret "QERkt5B5BTsy3Zmg5wDzqw==";
};

如果有多台DNS服务器,定义不同的服务器及key:

server 192.168.1.3 {
       key "testkey";
};

server 192.168.1.2 {
       key "rndckey";
};

连接指定服务器:

rndc -s 192.168.1.2 status

rndc应用参数:

rndc status #显示DNS运行状态
rndc reload #重新加载配置文件
rndc reconfig #重新加载named.conf和新的域配置文件
rndc dumpdb #导出缓存到文件
rndc flush  #清空缓存

使用BIND配置动态DDNS

发布时间:July 6, 2012 // 分类:DNS // No Comments

BIND下可通过nsupdate远程、本地动态更新域指向,无需重启BIND,即DDNS,相应域规则需配置allow-update权限。
直接允许指定IP更新:

#https://www.haiyun.me
allow-update { 8.8.8.8; };

或以密钥方式验证:

dnssec-keygen -a HMAC-MD5 -b 512 -n HOST ddns #生成密钥类型为HOST,主机名ddns
cat Kddns.+157+61025.key #查看生成的密钥,后续需添加到配置文件中
ddns. IN KEY 512 3 157 S/ZqoSgQB3OZ8M0Bm4rTFJp54zTEZoBqHLMjg/ljdCTH/8VTYMvxornk y0bCpuAC0VwHzX3Eq+2Fymw/L+iQdA==

添加到主配置:

key "ddns" {
        algorithm hmac-md5;
        secret "S/ZqoSgQB3OZ8M0Bm4rTFJp54zTEZoBqHLMjg/ljdCTH/8VTYMvxornk y0bCpuAC0VwHzX3Eq+2Fymw/L+iQdA==";
};
zone "www.haiyun.me" IN { #相应域授权
        type master;
        file "named.www.haiyun.me";
        allow-query { any; };
        update-policy {
        grant ddns name ddns.www.haiyun.me. A; #仅允许对ddns.www.haiyun.me A记录进行更改
        };

复制生成的公钥与私钥到执行更新的服务器,执行更新操作:

nsupdate -k Kddns.+157+61025.key
> server 184.164.141.188
> update delete ddns.www.haiyun.me
> update add ddns.www.haiyun.me 60 A 8.8.8.8
> send
> quit

新建脚本自动更新IP:

#!/bin/bash
while ture
do
interface=pppoe-wan
dnsserver=184.164.141.188
keyfile=/root/Kddns.+157+61025.key
keydir=/root/
domain=ddns.www.haiyun.me
ddnsip=ping -c 1 $domain|grep from|awk '{print $4}'|sed 's/:$//g'
ip=`ifconfig pppoe-wan|grep inet|awk -F"[ ]+|[:]" ' {print $4}'`
if [ $ddnsip == $ip ]
    echo "当前IP没有更改"
else
cd $keydir
echo "server $dnsserver"                       >  ddns
echo "update delete $domain A "               >>  ddns
echo "update add    $domain 600 A $ip"        >>  ddns
echo "send"                                   >>  ddns
nsupdate -k $keyfile -v ddns
fi
sleep 300
done
分类
最新文章
最近回复
  • vincent: 膜拜大佬
  • 海运: proxy-header或proxy_protocol
  • liangjw: 如果是 内部调用 或者 中间存在 代理 而上一个代理又在内网 ,那怎么处理来自代理私有IP?
  • chainofhonor: 感谢,用dnsmasq设置自动判断BIOS和UEFI成功了
  • 海运: 不好意思,这个是很多年前的,现在也许已经不适用,我现在也不用多线了。
  • CQ: -m state --state NEW 替换成-m conntrack --ctstate NEW
  • CQ: 你好,我入站已经成功分流,但是不知道出站怎么设置,PREROUTING替换成POSTROUTI...
  • K: 好的,谢谢,我去试试!
  • 海运: 可以试试3proxy
  • daha: PHP的怎么使用???