自动分流的Shadowsocks搭建(二)

使用dnsmasq自建DNS服务器

  • 为啥要自建DNS
    • 国内DNS被污染
    • 使用国外DNS的话, 由于国外流量均从隧道出, 国内域名会被解析到国外地址
    • Shadowsocks是将DNS请求封装, 通过ss协议送到服务端, 再由服务端发出DNS请求
  • 为啥要使用dnsmasq
    • 一开始我是用的Bind9, 然后出现了非常奇妙的bug

    “Bind9 不是随机返回DNS查询结果的错误生成器吗?” — 蛤力橙

  • 安装dnsmasq

  • 配置
    • 所有dnsmasq配置文件均放到/etc/dnsmasq.d/下即可
    • 我的配置非常简单, 只有两个配置文件

  • 根据自身情况选择要不要去掉/etc/default/dnsmasq中的IGNORE_RESOLVCONF=yes的注释

    If the resolvconf package is installed, dnsmasq will use its output
    rather than the contents of /etc/resolv.conf to find upstream
    nameservers. Uncommenting this line inhibits this behaviour.
    Not that including a “resolv-file=” line in
    /etc/dnsmasq.conf is not enough to override resolvconf if it is
    installed: the line below must be uncommented.

劫持DNS请求

  • 建好DNS服务之后, 搭好Shadowsocks服务端, 用PC连接测试了一下, 一切正常, 然后用Android试了一下发现访问国内网站的流量也被分到了国外
  • 查看Shadowsocks log和抓包发现Android客户端的DNS是写死的使用8.8.8.8:53 tcp查询
  • 于是把8.8.8.8:53的TCP请求全部劫持到127.0.0.1:53就行了, 直接附上iptables配置:

完成

  • 于是上一篇中提到的启动脚本就变成了下面这个样子:

Leave a Comment

电子邮件地址不会被公开。 必填项已用*标注