被污染事件促使我重新考虑自建公网DoH服务的必要性。我拥有一个已备案的域名、一台线路良好的闲置香港服务器以及阿里云的免费边缘加速套餐。在普通家宽环境下,通过CURL测试,整个服务响应时间不到0.3秒,表现良好。我最终选择了Docker部署satishweb/doh-server来实现这一服务。以下是核心的Docker部署命令和Nginx配置。Docker部署命令如下:

docker run -d --name doh-server \
  -p 8053:8053 \
  -e UPSTREAM_DNS_SERVER="udp:1.1.1.1:53,udp:8.8.8.8:53" \
  -e DOH_HTTP_PREFIX="/dns-query" \
  -e DOH_SERVER_LISTEN=":8053" \
  -e DOH_SERVER_TIMEOUT="10" \
  -e DOH_SERVER_TRIES="3" \
  -e DOH_SERVER_VERBOSE="false" \
  satishweb/doh-server

Nginx配置如下:

server {
  listen 443 ssl default_server;
  listen [::]:443 ssl default_server;
    http2 on;
  server_name server_name xxx.com;  #这里改成你的域名

  server_tokens off;

  ssl_protocols TLSv1.2 TLSv1.3;
  ssl_prefer_server_ciphers on;
  ssl_ciphers EECDH+AESGCM;
  ssl_ecdh_curve secp384r1;
  ssl_session_timeout  10m;
  ssl_session_cache shared:SSL:10m;
  ssl_session_tickets off;
  ssl_stapling on;
  ssl_stapling_verify on;
  ssl_early_data off;
  resolver 1.1.1.1 valid=300s;
  resolver_timeout 5s;
  # HTTP Security Headers
  add_header X-Frame-Options DENY;
  add_header X-Content-Type-Options nosniff;
  add_header X-XSS-Protection "1; mode=block";
  add_header Strict-Transport-Security "max-age=63072000";
  ssl_certificate    /xxx/xxx.pem;             #这里改成你的证书路径
  ssl_certificate_key    /xxx/xxx.pem;         #这里改成你的私钥路径
  location /dns-query {
    proxy_pass       http://localhost:8053/dns-query;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
  }
}

尽管satishweb/doh-server不支持配置上游使用DoH查询,但考虑到我的服务器位于香港,使用备案域名以利用阿里CDN加速的效果,我认为这已经足够。这次自建DoH服务更多是出于个人兴趣和挑战,而非实际需求。

标签: none

评论已关闭