祥林嫂

Bind+Pcap DNSProxy搭建无污染纯净DNS过程
前言众所周知,国内网络环境不是特别的好,尤其是运营商劫持DNS,经常莫名地弹出广告,部分网站域名不能正常被解析,莫...
扫描右侧二维码阅读全文
30
2019/06

Bind+Pcap DNSProxy搭建无污染纯净DNS过程

前言

众所周知,国内网络环境不是特别的好,尤其是运营商劫持DNS,经常莫名地弹出广告,部分网站域名不能正常被解析,莫名其妙地打不开,或者时好时坏 。正好有个1M带宽的阿里云学生服务器,用处不大一直都在吃灰,所以不如搭建一个无污染DNS

注意:当前部分网站被SNI封锁,即使使用纯净无污染DNS也无法访问

1 初始环境


境内服务器(以阿里云学生ECS服务器为例)

可选:境外服务器(以阿里香港轻量服务器为例)

注意:由于部分域名在透过53端口使用TCP协议查询时会被TCP Reset,所以必须使用运行在大陆外的非53端口的DNS服务器。

2 境外服务器配置(可选内容,可以直接跳到步骤3)


DNS服务器分为缓存型、转发型和权威型三种,由于我们的目的是为了将查询转发给另外一台解析服务器,所以我们将会配置一个转发型服务器。

2.1 安装Bind

在Ubuntu下,Bind软件可以直接从apt源中安装,运行下列命令即可安装Bind及其相关工具:

sudo apt upgrade
sudo apt install bind9 bind9utils bind9-doc

安装完毕以后即可开始配置服务器。

2.2 配置转发型DNS服务器

Bind配置文件默认位于/etc/bind。进入该目录并修改named.conf.options

cd /etc/bind
sudo vim named.conf.options

当前文件应该为这样:

options {
        directory "/var/cache/bind";

        dnssec-validation auto;

        auth-nxdomain no;    # conform to RFC1035
        listen-on-v6 { any; };
};

由于这个服务器仅供国内服务器中转查询,所以我们要设置一个访问权限控制列表,即ACL。

options内容块上方,创建一个名为acl的内容块。我们需要为该ACL组创建一个标签,这里我们就叫它goodclients

acl allowclients {
    localhost;
    localnets;
    . . .
};

options {
    . . .

在本内容块内,列出被允许使用该DNS服务器的主机IP地址和网络即可。

配置好ALC后即可编辑options块了,配置文件应该看起来是这个样子的:

acl allowclients {
        Your Mainland Server's IP;
        localhost;
        localnets;
};

options {
        directory "/var/cache/bind";

        recursion yes;
        allow-query { allowclients; };

        forwarders {
                8.8.8.8;
                8.8.4.4;
        };
        forward only;

        dnssec-validation auto;

        auth-nxdomain yes;    # conform to RFC1035
        listen-on port 443 { any; };
        listen-on-v6 port 443 { any; };
};

listen-on listen-on port 443 { any; };和listen-on-v6 port 443 { any; };指bind监听于443端口(IPv4&IPv6),端口号可以自行修改,但不能为53或留空。

2.3 检查配置文件并重启Bind

输入sudo named-checkconf进行检查:

若配置文件语法无误,则终端将不会有输出,否则这是配置文件有误。

确认无误后,输入以下指令重启Bind以使配置生效:

3 境内服务器配置


由于境内和境外服务器之间的53端口通讯几乎会被劫持,所以境内服务器使用Pcap DNSProxy来建立境内与境外服务器之间透过非53端口的域名查询连接。

3.1 环境要求

由于Pcap DNSProxy没有提供Linux可用的二进制包,所以需要下载源码编译安装。

必须完整支持 C++ 14 标准,可任选其一:

  • GCC/g++最低版本要求 5.0
  • Clang/LLVM 最低版本要求为 3.4

本文以GCC为例

GCC

使用gcc -v命令查看gcc版本,若版本过低请尝试sudo apt upgrade升级或自行编译安装新版gcc。

3.2 安装Pcap DNSProxy

cd /usr/src
git clone https://github.com/chengr28/Pcap_DNSProxy.git
cd Pcap_DNSProxy/Source/Auxiliary/Scripts
chmod +x CMake_Build.sh
./CMake_Build.sh
cp -r /usr/src/Pcap_DNSProxy/Source/Release /usr/local/Pcap_DNSProxy

这样Pcap DNSProxy将会被安装于/usr/local/Pcap_DNSProxy

3.3 修改配置

首先进入 Pcap DNSProxy 软件目录并编辑Config.conf

cd /usr/local/Pcap_DNSProxy
sudo vim Config.conf

配置文件如下:

[Listen]
Operation Mode = Server

[DNS]
Outgoing Protocol = IPv4 + TCP

[Addresses]
IPv4 Main DNS Address = Your Abroad Server's IP:443
IPv4 Alternate DNS Address = 208.67.220.220:443|208.67.222.220:443|208.67.220.222:443
IPv4 Local Main DNS Address = 119.29.29.29:53
IPv4 Local Alternate DNS Address = 1.2.4.8:53|223.5.5.5:53|114.114.114.114:53
IPv6 Main DNS Address = Your Abroad Server's IP:443
IPv6 Alternate DNS Address = [2620:0:CCD::2]:443
IPv6 Local Main DNS Address = [240c::6666]:53
IPv6 Local Alternate DNS Address = [240c::6644]:53

[Switches]
Domain Case Conversion = 0
EDNS Label = 1
EDNS Client Subnet Relay = 1

其中:

  • 第二行Operation ModeServer时才能被外部设备访问
  • 第五行指定使用TCP协议查询DNS,避免UDP被QoS二无法查询
  • 第八行和第十二行,若跳过了步骤二则Server Address填写为208.67.222.222:443[2620:0:CCC::2]:443,反之则使用自己海外服务器IP地址

3.4 注册系统服务

执行下列命令添加Systemctl控制服务

sudo vim Pcap_DNSProxy.service
ExecStart=/usr/local/Pcap_DNSProxy/Pcap_DNSProxy
WorkingDirectory=/usr/local/Pcap_DNSProxy

然后执行./Linux_Install.Systemd.sh即可安装服务

# 服务控制
systemctl start|stop|restart|status Pcap_DNSProxy.service

4 Enjoy


将您的设备DNS设置为您(境内)服务器的IP地址

版权声明:本文部分内容参考自 Pcap DNSProxy 无污染DNS搭建 linux下编译过程全记录, 本文版权归 祥林嫂 所有

本文链接:https://swjtu.today/archives/bind-pcap-dnsproxy.html

所有原创文章采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。
您可以自由的转载和修改,但请务必注明文章来源并且不可用于商业目的。

我的文章对您有帮助吗?
我很可爱 请给我钱
最后修改:2019 年 07 月 19 日 12 : 36 AM
如果觉得我的文章对你有用,请随意赞赏

发表评论