IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    用technitium开启ipv6 DNS

    Joomaen发表于 2024-10-02 17:05:16
    love 0

    我本来是用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=my@example.com
    
    #导入环境变量
    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 和 IPv6:listen [::]: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一样的拦截列表,可以无痛迁移。

    用technitium开启ipv6 DNS最先出现在封闭脑袋。



沪ICP备19023445号-2号
友情链接