公益DNS总是会遇到各种各样的问题,终止服务或者天天被打。想要建一个自己的私用。但是有问题:
- 小鸡只有一台,但是443端口已经给nginx了,也没必要为了443端口和一个负载不高的个人服务再买一台vps,怎么办
搜索了半天,踩了一两个坑
Adguard Home搭建
简单的事情,官方一键脚本
1
|
curl -sSL https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh
|
80端口也是nginx在监听,网页就保持在3000端口,然后用nginx反代。基本操作。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
server {
server_name 〈域名〉;
listen 80;
listen [::]:80;
location / {
return 301 https://$server_name$request_uri;
}
}
server {
server_name 〈域名〉;
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m; # about 40000 sessions
ssl_session_tickets off;
ssl_certificate 证书位置
ssl_certificate_key 密钥位置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
ssl_prefer_server_ciphers off;
# In case of an old server with an OpenSSL version of 1.0.2 or below,
# leave only prime256v1 or comment out the following line.
ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
ssl_stapling on;
ssl_stapling_verify on;
# the nginx default is 1m, not enough for large media uploads
client_max_body_size 16m;
ignore_invalid_headers off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location / {
proxy_pass http://127.0.0.1:3000;
}
}
|
之后防火墙把3000端口关掉,反正用不着
先把doh跑起来
决定好doh用的域名,申请证书
1
|
certbot certonly --standalone --agree-tos -d 〈doh域名〉
|
域名随意,也可以是刚才网页面版的域名。如果已经有证书了直接用也可以,但cloudflare的源证书不行 (废话
之后nginx的套娃行为,没有有效证书有点麻烦,所以哪怕准备托管到cloudflare也要申请一个证书
设置Adguard Home
操作没什么好说的
随意指定一个非标端口作为Adguard Home的DoH监听端口
反正不需要公网访问,也可以防火墙上关掉它
理论上来说Nginx模块完整的话QUIC和TLS也能设置?但是懒得弄,暴露vps的地址,又容易被干扰
- Adguard Home设置里的证书需要填写刚才申请的证书。
添加nginx配置
- 这里的doh域名证书可以填写刚才申请的证书。
- 需要托管到cloudflare的话也可以填写cloudflare提供的源证书。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
server {
listen 80;
listen 443 ssl http2;
server_name 〈doh域名〉;
ssl_certificate doh域名证书位置
ssl_certificate_key doh域名密钥位置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
ssl_prefer_server_ciphers off;
ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
ssl_stapling on;
ssl_stapling_verify on;
location /dns { # PATH可以自定义
proxy_http_version 1.1;
proxy_set_header Host $http_host;
proxy_buffering off;
proxy_redirect off;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass https://〈doh域名〉/dns-query;
}
}
|
*理论上来说这样就可以跑在443端口了,但还是连不通。
最后发现似乎是vps本身的dns解析没有更新,或者套了cloudflare,或者刚才关闭了防火墙端口,总之无法直接连接本机的非标端口doh。
解决方法非常简单,解析不到,加进host不就可以了吗(
直接解析到127.0.0.1,结束