Pages

Saturday, 29 June 2019

在mac系统上,DNS over HTTPS的客户端程序之一 -cloudflared

混淆才是王道,虽然这样会让网管很头疼,但在严重审查的地区,还是值得一试的。尽管现在人们对于 DoH (DNS over HTTPS)的态度还颇有争议,但还是有很多互联网机构支持了它——直接使用 HTTP/2 或者 HTTPS 协议进行请求,这下你就很难专门把 DNS 流量单独分离出来进行干扰了。

尤其对于自建 DNS 服务器来说,甚至可以直接隐藏在网站之后!

要使用 DoH,使用brew install cloudflare/cloudflare/cloudflared 即可安装,运行命令  sudo cloudflared proxy-dns 来临时启动它进行测试,你可以看到它使用了两个上游服务器:
INFO[0000] Adding DNS upstream                           url="https://1.1.1.1/dns-query"

INFO[0000] Adding DNS upstream                           url="https://1.0.0.1/dns-query"

结果还是正常返回了,第一次查询时间稳定在 300ms 以内,服务本身自带了缓存功能,第二次查询之类的自然就是 0ms 了。

测试成功后,需要给 cloudflared 进行配置,这样它才能以服务的形式自动启动:
mkdir -p /usr/local/etc/cloudflared
nano /usr/local/etc/cloudflared/config.yml
内容如下:
proxy-dns: true
proxy-dns-upstream:
- https://1.1.1.1/dns-query
- https://1.0.0.1/dns-query
- https://mydomain.com/dns-query

你可以看到,在/usr/local/etc/cloudflared/config.yml文件中我们给了这两个默认的上游服务器,你也可以在这里添加更多,
比如:https://mydomain.com/dns-query ,使用自己搭建的doh server.
然后,

cd /usr/local/etc/cloudflared && sudo cloudflared即可。

总之,在创建好配置文件之后,我们再来执行命令将服务安装到系统当中:
sudo cloudflared service install

INFO[0000] Applied configuration from /usr/local/etc/cloudflared/config.yml

INFO[0000] Installing Argo Tunnel as an user launch agent

INFO[0000] Outputs are logged in /tmp/com.cloudflare.cloudflared.out.log and /tmp/com.cloudflare.cloudflared.err.log

现在,你就可以按 ctrl + c 停掉刚刚测试用的临时服务了,然后用命令启动系统服务: sudo launchctl start com.cloudflare.cloudflared

或运行:
$ sudo cloudflared

INFO[0000] Build info: {GoOS:darwin GoVersion:go1.11.1 GoArch:amd64} 

INFO[0000] Version 2019.6.0                             

INFO[0000] Flags                                         proxy-dns=true proxy-dns-upstream="https://1.1.1.1/dns-query, https://1.0.0.1/dns-query"

INFO[0000] Adding DNS upstream                           url="https://1.1.1.1/dns-query"

INFO[0000] Adding DNS upstream                           url="https://1.0.0.1/dns-query"

INFO[0000] Starting DNS over HTTPS proxy server          addr="dns://localhost:53"

INFO[0000] cloudflared will not automatically update when run from the shell. To enable auto-updates, run cloudflared as a service: https://developers.cloudflare.com/argo-tunnel/reference/service/ 

INFO[0000] Starting metrics server                       addr="127.0.0.1:59130"

系统配置:
现在,我们已经启动了DoH(dns proxy server通常会占用本地的 53 端口)你只需要配置本地机器的 dns server为127.0.0.1即可。

使用 DoH 速度快些但干扰严重——这也可能和 DoH 公共服务器还不是很多有关(毕竟很容易就给你干掉 IP 了),总之,这种手段是自建dns服务器绝佳的选择,简单、快捷,还很轻松。

行文仓促,我目前已经在使用 argo tunnel ,也就是 cloudflared 了,自带 DNS 缓存,即使不使用前置 DNS 缓存也能很好的运行。

ref: https://developers.cloudflare.com/argo-tunnel/reference/service/

以wireguard vpn为例:
sudo networksetup -setdnsservers "Wi-Fi" Empty && sudo networksetup -setdnsservers "Wi-Fi" 127.0.0.1

sudo wg-quick up wg0 

sudo networksetup -setdnsservers "Wi-Fi" Empty && sudo networksetup -setdnsservers "Wi-Fi" 127.0.0.1

sudo cloudflared
(如果过了一段时间,不能解析域名了,那么就重启dns proxy server程序-cloudflared)

如果想断开vpn,则:

sudo wg-quick down wg0

ref: https://developers.cloudflare.com/1.1.1.1/dns-over-https/cloudflared-proxy/
---------------------------------

dnss

cd $GOPATH

go install blitiri.com.ar/go/dnss
(dnss就会出现在$GOBIN/里面)

sudo dnss -enable_dns_to_https -https_upstream="https://1.1.1.1/dns-query"
或者:

sudo dnss -enable_dns_to_https -https_upstream="https://1.0.0.1/dns-query"
from https://blitiri.com.ar/git/r/dnss/b/next/t/f=README.md.html
-------------

P.S. 上面这个cloudflared果然只维持了一天就不行了,cloudflared就连不上1.1.1.1或1.0.0.1了。

你也可以自建'DNS over HTTPS' DNS PROXY SERVER,请参考此文:High performance DNS over HTTPS client & server 
------

相关帖子:https://briteming.blogspot.com/2018/07/argo.html