我本来是用1panel跑Adguard Home,也就想着用1panel来运行technitium,可是如果直接进行递归解析,容器没有ipv6。我想过让1panel的docker支持ipv6,可是1panel官方文档导入需要一个ipv6的ip段,可我的v6地址是/128的,所以也不行。于是不用docker容器,直接运行。
需要做三件事情
- 安装technitium,在官网找到一键安装脚本即可,面板默认端口是5380。进去后台用户名是admin,不能改,它会弹框让修改密码。之后在setting – optional protocols中打开DNS over HTTP(注意不是DNS over HTTPS),这个可以直接反代来用,更灵活。
- 安装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"
- 安装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一样的拦截列表,可以无痛迁移。