2025年6月7日星期六

自建权威DNS,托管域名与记录管理

        自建权威DNS的过程有时间整理后再写吧,先写一下如何托管别人的域名,如何新增加zone,如何新增A记录,AAAA记录等。

环境准备:

        由于是自己编译的最新稳定版bind 9.20.9,所以和使用apt-get工具安装的bind路径完全不一样,我安装的路径和版本如下:

DNS服务器:bind-9.20.9
源码路径:/opt/bind-9.20.9
编译后生成的可执行文件路径:/opt/bind-9.20.9/bin/
named路径:/opt/bind-9.20.9/bin/named/named
named-checkconf 工具路径:/opt/bind-9.20.9/bin/check/named-checkconf
named-checkzone 工具路径:/opt/bind-9.20.9/bin/check/named-checkzone
rndc 工具路径:/opt/bind-9.20.9/bin/rndc/rndc
配置文件路径 :/etc/bind/
这里托管的新域名是 liuyu.us.kg

主权威DNS配置:

1 named配置里新增zone

sudo vim /etc/bind/named.conf.local

追加下面的配置


zone "liuyu.us.kg" {
type master;
file "/etc/bind/zones/liuyu.us.kg.zone";
allow-transfer { 203.0.113.46;2001:0db8:85a3:0000:0000:8a2e:0370:7334; };
also-notify{ 203.0.113.46;2001:0db8:85a3:0000:0000:8a2e:0370:7334; }; 
};

allow-transfer里面填写的是[从权威DNS服务器]的IP,表示允许 [从权威DNS服务器] 同步的IP。 
also-notify 表示有更新的话会主动通知[从权威DNS服务器]

2 创建新增zone的配置文件

sudo vim /etc/bind/zones/liuyu.us.kg.zone

新增加下面的配置:

$TTL 604800 ;
@ IN SOA ns1.f78fkdns.top. admin.f78fk.com. (
2025060601 ; serial
3600 ; refresh
600 ; retry
604800 ; expire
3600 ) ; minimum

IN NS ns1.f78fkdns.top.
IN NS ns2.f78fkdns.top.
 
@ IN A 198.51.100.23
@ IN AAAA 2001:0db8:85a3::8a2e:0370:7335

www IN A 192.0.2.101
www IN AAAA 2001:0db8:85a3::8a2e:0370:7336

         这里自描述了ns1.f78fkdns.top. 和 ns2.f78fkdns.top. 是liuyu.us.kg的权威DNS服务器,增加了liuyu.us.kg的A记录和AAAA记录,增加了子域www.liuyu.us.kg的A记录和AAAA记录。
refresh 1小时,retry 10分钟,expire 7天 ,minimum 一小时,其余项保持默认7天。
serial 2025060601,代表今天的日期,最后的01代表首次修改,以后每次更新一次数字手动+1,比如下次新增加了MX记录,这个数字就改成2025060602.

3 使配置生效

# 1. 检查 BIND 主配置文件语法
named-checkconf

# 2. 检查 zone 文件语法
named-checkzone liuyu.us.kg /etc/bind/zones/liuyu.us.kg.zone

# 3. 重新载入配置文件,识别新 zone
rndc reconfig

# 4. 加载zone
rndc reload liuyu.us.kg

# 5. 确认zone 是否加载成功 (可选)
rndc zonestatus liuyu.us.kg

# 6. 之后修改了 zone 文件只需要重新加载当前 zone
rndc reload liuyu.us.kg



从权威DNS配置:

1 named配置里新增zone

sudo vim /etc/bind/named.conf.local

追加下面的配置


zone "liuyu.us.kg" {
type slave;
masters { 203.0.113.66;2001:0db8:85a3::8a2e:0370:7337; }; // 主权威DNS 的 IP
file "/etc/bind/zones/liuyu.us.kg.zone";
};

2 使配置生效

# 1. 检查 BIND 主配置文件语法
named-checkconf

# 2. 重新载入配置文件,识别新 zone
rndc reconfig

# 3. 确认zone 是否加载成功 (可选)
rndc zonestatus liuyu.us.kg

# 4. 主动发起 zone 拉取 (可选,一般会自动)
rndc retransfer liuyu.us.kg

域名注册商设置:

去该域名的所属注册服务商管理平台,比如NameSilo官网,登录后更改该域名的NS为ns1.f78fkdns.top和ns2.f78fkdns.top即可。

验证:

        使用在线工具dig https://ip.f78fk.com/dig,输入域名liuyu.us.kg,递归服务器随便选一个,查询类型先选择A记录,勾选trace,点击查询,可以看到最终A记录确实是由权威DNS ns2.f78dkdns.top回复的,也看到了上级域us.kg回复ns1.f78dkdns.top和ns2.f78dkdns.top是liuyu.us.kg的权威服务器,说明域名托管成功。


常用命令:


# 启动 BIND
sudo systemctl start named

# 设置开机自启
sudo systemctl enable named

# 重启 BIND
sudo systemctl restart named

# 检查状态
sudo systemctl status named

# 查看日志
journalctl -u named -n 50 --no-pager
journalctl -xeu named.service

2025年6月4日星期三

acme.sh申请https证书


        之前用过dns方法验证,最后发现其实兼容性不好,比较麻烦,每家dns托管服务商申请api令牌的方法也不同,之后再增加新的域名部署不太方便。

经过试验发现最终其实还是用Http Web服务器的方式验证域名所有权的兼容性最好,速度也快,不容易出现什么奇奇怪怪的bug,所以最近统一把几台服务器的ssl证书申请都部署了 webroot的验证方式。

1 首先安装
curl https://get.acme.sh | sh -s email=my@example.com
邮箱填写自己的常用邮箱,之后续订时失败会发邮件给这个邮箱。安装后会自动把脚本放到这个目录:   ~/.acme.sh/   我用的root账户,所以也就是/root/.acme.sh/acme.sh

2 首次申请证书
~/.acme.sh/acme.sh --issue -d   geoip.qzz.io -d  jpliuyu.duckdns.org   --webroot /var/www/html  --server letsencrypt

命令中,我指定了申请多域名 geoip.qzz.io 和 jpliuyu.duckdns.org,也就是 SAN 证书(Subject Alternative Name)。 最终生成的是一套证书,但是支持多域名, jpliuyu.duckdns.org和geoip.qzz.io都能访问我的网站,这样不会影响老用户使用旧的域名访问。

执行这条命令前,这2个域名都需要在DNS托管服务商那里设置好A记录和AAAA记录,首先确保这2个域名都能成功解析到服务器IP。

参数--server letsencrypt 是可选的,如果不指定默认是ZeroSSL的CA服务商,我个人喜欢letsencrypt,所以这里指定了。

--webroot 指定你的http服务器根目录,我这里是/var/www/html,确保你的服务器可以从外部80端口访问到,如果配置了http 301跳转的话,记得先配置放行/.well-known/acme-challenge路径,nginx的例子:

server {

    listen 80;

    listen [::]:80;

    server_name geoip.qzz.io;

  #  放行 Let's Encrypt 验证请求

    location ^~ /.well-known/acme-challenge/ {

        default_type "text/plain";

        root /var/www/html;

        allow all;

        try_files $uri =404;

    }

    # 其他所有请求都重定向到 HTTPS

    location / {

        return 301 https://$host$request_uri;

    }

}

 

3 安装证书

第二步申请成功后,证书是保存到/root/.acme.sh目录下的,但是这个证书是给acme.sh内部使用的,接下来我们还要安装证书。

~/.acme.sh/acme.sh --install-cert -d geoip.qzz.io \

--cert-file      /home/ubuntu/ssl_file/geoip.qzz.io/cert.pem  \

--key-file       /home/ubuntu/ssl_file/geoip.qzz.io/key.pem  \

--fullchain-file /home/ubuntu/ssl_file/geoip.qzz.io/fullchain.pem \

--reloadcmd   "systemctl reload nginx"

这样证书就被安装到指定的/home/ubuntu/ssl_file/geoip.qzz.io目录下了,安装成功后这里指定了执行命令 systemctl reload nginx ,这样之后脚本自动更新时,也会自动执行这条命令使http服务器生效。

接下来nginx的配置文件里指定ssl证书路径即可。

ssl_certificate     /home/ubuntu/ssl_file/geoip.qzz.io/fullchain.pem;

ssl_certificate_key  /home/ubuntu/ssl_file/geoip.qzz.io/key.pem;

 

4  验证

crontab -l

这里会发现自动添加到了定时任务,之后脚本会自动更新证书,并且使用第三步执行过的命令来安装证书。

43 18 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

这里看到,脚本自动加入的crontab 的规则,不是标准的语法,很有可能解析错误,所以我们执行命令 crontab -e 修改这行为正确的语法:

 43 18 * * *  /root/.acme.sh/acme.sh --cron --home  /root/.acme.sh  > /dev/null

然后使用这2个域名访问网站吧,浏览器提示连接安全,证书有效,Firefox访问的话,可以点击小锁标志,更多信息-查看证书-主题替代名称(SAN字段)里显示了此证书覆盖的所有域名,正是前面申请的那2个域名。

之后就等待到期后自动更新并部署吧,最后附上此项目的官方网站。








2025年6月2日星期一

甲骨文VPS,无法获取到IPV6地址

 折腾了好几个小时,无论如何IPV6都无法通信。

面板已经分配了IPV6 , 配置子网,默认路由,但是VPS上总是无法获取到IPV6的地址。

手动配置IPV6地址也无法通信,耗费了半天时间,最后偶然想起来,放行546,547端口竟然一下子就成功了,这个iptables真是坑死我了。


# 清空规则

sudo ip6tables -F

sudo ip6tables -X


# 设置默认策略(DROP)

sudo ip6tables -P INPUT DROP

sudo ip6tables -P FORWARD DROP

sudo ip6tables -P OUTPUT ACCEPT


# 本地回环

sudo ip6tables -A INPUT -i lo -j ACCEPT


# 允许已建立连接的数据流

sudo ip6tables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT


# ICMPv6 必须全部放行

sudo ip6tables -A INPUT -p ipv6-icmp -j ACCEPT

sudo ip6tables -A OUTPUT -p ipv6-icmp -j ACCEPT


# DHCPv6(服务器端口 547,客户端端口 546)

sudo ip6tables -A INPUT -p udp --dport 546 --sport 547 -j ACCEPT

sudo ip6tables -A OUTPUT -p udp --dport 547 --sport 546 -j ACCEPT


# SSH、HTTP、HTTPS、其他自定义端口

sudo ip6tables -A INPUT -p tcp --dport 22 -j ACCEPT

sudo ip6tables -A INPUT -p tcp --dport 80 -j ACCEPT

sudo ip6tables -A INPUT -p tcp --dport 443 -j ACCEPT


# 确认是否放行成功
sudo ip6tables -L INPUT -n --line-numbers

# 保存防火墙配置
sudo netfilter-persistent save

# 申请IP吧,一下子就成功了
dhclient -v -6 enp0s6


Ubuntu24.04配置IPV6防火墙

#  查看当前规则

sudo ip6tables -L INPUT -n --line-numbers


# 放行 SSH (22)
sudo ip6tables -A INPUT -p tcp --dport 22 -j ACCEPT

# 放行 HTTP (80)
sudo ip6tables -A INPUT -p tcp --dport 80 -j ACCEPT

# 放行 HTTPS (443)
sudo ip6tables -A INPUT -p tcp --dport 443 -j ACCEPT

# 放行自定义端口(TCP 和 UDP 的 10000)
sudo ip6tables -A INPUT -p tcp --dport 10000 -j ACCEPT
sudo ip6tables -A INPUT -p udp --dport 10000 -j ACCEPT

# 放行已经建立的连接
sudo ip6tables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

# 最后拒绝其他
sudo ip6tables -P INPUT DROP

# 保存规则
sudo netfilter-persistent save

# 如果提示未安装:
sudo apt install iptables-persistent
sudo netfilter-persistent save


2025年6月1日星期日

Ubuntu24.04刷新DNS缓存

#刷新缓存

resolvectl flush-caches 


#查看缓存

resolvectl statistics

 

 # 如果装了bind

 sudo rndc flush


wsl.exe --update 已禁止 403

 wsl.exe --update 

已禁止 (403)。


解决方法:

关闭代理。


 wsl.exe --install

已禁止 (403)。


解决方法:

关闭代理。

XG-040G-XX SuPassword 解密工具

 买了新光猫 XG-040G-TF ,  所以写了一个 SuPassword 解密工具, 以备不时之需 . 点击下载