在本地机器mac上。
mkdir dnsproxy-by-ARwMq9b6
cd dnsproxy-by-ARwMq9b6
wget https://github.com/ARwMq9b6/dnsproxy/releases/download/v0.1.1/dnsproxy-v0.1.1-darwin-amd64.tar.gz
tar xvf dnsproxy-v0.1.1-darwin-amd64.tar.gz
yudeMacBook-Air:dnsproxy-by-ARwMq9b6 brite$ ls
china_domain_list.txt config.toml dnsproxy-v0.1.1-darwin-amd64.tar.gz
china_ip_list.txt dnsproxy gfw_domain_list.txt
yudeMacBook-Air:dnsproxy-by-ARwMq9b6 brite$ cat config.toml
gfw_list = "./gfw_domain_list.txt"
china_list = "./china_domain_list.txt"
china_ip_list = "./china_ip_list.txt"
###########
# DNS 服务器
###########
[dns]
listen = ":53" # 将要开启的本地 DNS 服务器的绑定地址
# 国内 DNS 服务器信息
#[dns.obedient]
#nameserver = "119.29.29.29:53" # DNS 服务器地址
#net = "udp" # 可选值: udp | tcp | tcp-tls
# 国外 DNS 服务器信息
# - enable_dns_over_https == true 时:
# `nameserver` 会默认为 https://dns.google.com/resolve?
# `proxy` 可以是 http, socks5 等代理
# - enable_dns_over_https == false 时:
# `proxy` 不能为 http 代理
#
# 开启 enable_dns_over_https 后 DNS 查询速度会较慢
[dns.abroad]
enable_dns_over_https = false
nameserver = "8.8.8.8:53" # DNS 服务器地址
proxy = "socks5://127.0.0.1:1080"
###########
# 代理服务器
###########
[proxy]
listen = ":1480" # 将要开启的本地代理服务器的绑定地址
proxy_server = "socks5://127.0.0.1:1080" # 已有的 http 或 socks5 代理,非中国大陆网站流量将会被转发到此代理上
proxy_server_external_ip = "" # 代理服务器的公网 IP
# 是为可选项,用于提升代理服务器的 DNS 查询质量
# 通过代理上网并访问 `https://tools.keycdn.com/geo` 之类的网站可看到公网 IP
yudeMacBook-Air:dnsproxy-by-ARwMq9b6 brite$ sudo ./dnsproxy -c config.toml
看到配置文件config.toml里面的"socks5://127.0.0.1:1080" 了吗?意思就是要使用本地机器上运行的某个socks5代理服务器程序(比如ss),转发dns请求到8.8.8.8:53;因为是通过加密的代理转发dns请求,这样就不会受到dns污染了。
实际应用例子:
以wireguard为例。
我们在搭建好wg的服务器端和客户端后,我们在客户机器mac上运行:
sudo wg-quick up wg0
运行此命令后,此命令会把客户机器mac的dns server地址改为8.8.8.8;此时确实可用这个wireguard VPN翻墙。但是维持不了多久,访问某个网址时,就会显示“正在解析主机名”,好长时间都解析不成功,因为本地机器直接去连接8.8.8.8,受到了gfw的干扰,连接失败,所以无法解析域名。那么怎么办呢?我们首先运行命令:
sudo networksetup -setdnsservers "Wi-Fi" Empty && sudo networksetup -setdnsservers "Wi-Fi" 127.0.0.1 ,把客户机器mac的dns server地址改为127.0.0.1,然后
cd ~/dnsproxy-by-ARwMq9b6 && sudo ./dnsproxy -c config.toml
不要关闭此terminal.然后,dns污染的问题就解决了。