迁移Knot DNS的从属节点
之前自建的DNS节点中有一个为了支持乌克兰特意将EU节点放到了乌克兰,在之前的一段时间偶尔会出现失去链接的情况,但持续时间和频率还能接受于是便一直没管,直到最近可能是因为俄罗斯侵略战争的关系,乌克兰的节点每天都在失去链接(空路由),每天频次在30次以上,持续时间从几分钟到几小时不等,于是便决定将乌克兰节点迁移到德国.
迁移前准备
- 一个新的vm
- knot dns
由于迁移时节点处于离线状态,无法获得节点内配置文件等信息,所以本次迁移将根据其余的节点创建新的配置信息.
knotdns的版本尽量保持和其它节点的版本相同
修改配置文件和导入db
首先从另外一个从属节点拿出/etc/knot/knot.conf
配置文件,直接放到新的vm中然后修改remote
字段,将其修改为主节点和其他从属节点信息
然后执行knotc conf-import /etc/knot/knot.conf
将其导入数据库,然后执行systemctl restart knot
重启knotdns
添加域名修改其他节点配置
首先去主节点执行knotc conf-read 'zone.domain'
查看已经存在的域名
然后将显示的域名列表复制出来改成knotc命令,类似下面这样
knotc conf-begin
knotc conf-set 'zone.domain' 'demo.lan'
knotc conf-set 'zone.domain' 'demo2.lan'
knotc conf-set 'zone.domain' 'demo3.lan'
knotc conf-commit
然后将配置放到新的vm中执行后,运行systemctl restart knot
重启knotdns
然后执行systemctl status knot
查看当前状态,这时你会看到一对错误,大概意思是无法从远端同步信息,这时因为主节点和其他从属节点没有修改remote的ip导致的,更换vm后需要修改其它节点上的remote节点的ip
假设你替换的节点叫eu,之前ip为1.1.1.1当前新的vm的ip为1.1.1.2,那么你需要将如下命令复制到主节点和其它节点上执行
knotc conf-begin
knotc conf-unset remote[eu].address 1.1.1.1@53
knotc conf-set remote[eu].address 1.1.1.2@53
knotc conf-commit
执行后再去新的vm上执行systemctl restart knot
后再通过systemctl status knot
查看状态时会发现错误消失了,但是如果你立即尝试通过新的vm解析会发现域名没有记录,这时不要慌,因为数据同步需要一段时间,过一会再看就会有了.
修改胶水记录/ns记录
当更换玩节点后你需要将原本ns记录的胶水记录的ip和其A以及AAAA指向修改,修改方法就不叙述了.
如果节点有设置备份不要忘记将旧节点的备份停止.
至此,节点就已经迁移完成了.