用technitium开启ipv6 DNS

我本来是用1panel跑Adguard Home,也就想着用1panel来运行technitium,可是如果直接进行递归解析,容器没有ipv6。我想过让1panel的docker支持ipv6,可是1panel官方文档导入需要一个ipv6的ip段,可我的v6地址是/128的,所以也不行。于是不用docker容器,直接运行。

需要做三件事情

  1. 安装technitium,在官网找到一键安装脚本即可,面板默认端口是5380。进去后台用户名是admin,不能改,它会弹框让修改密码。之后在setting – optional protocols中打开DNS over HTTP(注意不是DNS over HTTPS),这个可以直接反代来用,更灵活。
  2. 安装acme.sh来申请ssl证书以及自动更新。官方的文档很详细了,我用的cloudflare来验证,需要token, zone id,account id
#安装acme.sh
curl https://get.acme.sh | sh -s [email protected]

#导入环境变量
export CF_Token="填DNS token"  
export CF_Zone_ID="填区域ID"  
export CF_Account_ID="填账户ID"

#申请命令
acme.sh --issue --dns dns_cf -d doh.235421.xyz

#安装命令
acme.sh --install-cert -d doh.235421.xyz --key-file /root/certs/key.pem --fullchain-file /root/certs/cert.pem --reloadcmd "systemctl reload nginx"
  1. 安装nginx并配置,这个我不懂,不过还是借助chatGPT顺利跑起来了,配置文件放在/etc/nginx/conf.d/tech.conf长这样:
server {
    # 监听 IPv4 和 IPv6 的 443 端口,启用 SSL
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name doh.235421.xyz;

    # SSL 证书配置
    ssl_certificate /root/certs/cert.pem;
    ssl_certificate_key /root/certs/key.pem;

    # SSL 优化配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    # 同时反代 http://127.0.0.1:5380 和 http://[::1]:5380 到 https://doh.235421.xyz
    location / {
        # 使用 Nginx 支持 IPv4 和 IPv6 的方式反代
        proxy_pass http://[::1]:5380;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    # 同时反代 http://127.0.0.1:5480/dns-query 和 http://[::1]:5480/dns-query 到 https://doh.235421.xyz/doh
    location /doh {
        # 代理本地 IPv4 和 IPv6 的 5480 端口
        proxy_pass http://[::1]:5480/dns-query;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    # 日志配置
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
}

# HTTP 到 HTTPS 的重定向
server {
    listen 80;
    listen [::]:80;

    server_name doh.235421.xyz;

    # 将所有 HTTP 请求重定向到 HTTPS
    return 301 https://$host$request_uri;
}
  • 监听 IPv4 和 IPv6listen [::]:443 ssl;listen [::]:80; 用于监听 IPv6 地址的 443 和 80 端口,listen 443 ssl;listen 80; 用于监听 IPv4 地址的 443 和 80 端口。
  • proxy_pass 支持 IPv4 和 IPv6:使用 proxy_pass http://[::1]:5380; 来代理到本地的 IPv6 回环地址([::1] 是 IPv6 回环地址,等同于 IPv4 的 127.0.0.1)。Nginx 会自动处理 IPv4 和 IPv6。
  • 代理路径/ 路径代理到本地的 5380 端口,/doh 路径代理到本地的 5480 端口,并通过 SSL 访问外部服务。

配置完成用nginx -t检查配置是否有错误,应该显示successful
systemctl restart nginx.service来重启nginx


现在已经搭建完成,可以在technitium后台进行一些配置以适合自己的需求,这样在递归解析时就可以支持ipv6了,也可以开启prefer ipv6。

technitium也支持和Adguard Home一样的拦截列表,可以无痛迁移。

发表评论