神代綺凛

[Pcap DNSProxy] 无污染DNS搭建 linux下编译过程全记录
Pcap DNSProxy 是一个基于 WinPcap/LibPcap 用于过滤 DNS 投毒污染的工具,提供便捷...
扫描右侧二维码阅读全文
03
2018/08

[Pcap DNSProxy] 无污染DNS搭建 linux下编译过程全记录

Pcap DNSProxy 是一个基于 WinPcap/LibPcap 用于过滤 DNS 投毒污染的工具,提供便捷和强大的包含正则表达式的修改 Hosts 的方法,以及对 DNSCurve/DNSCrypt 协议、并行和 TCP 协议请求的支持。多服务器并行请求功能,更可提高在恶劣网络环境下域名解析的可靠性。

Head Pic: 「A sinner has no right of choice」/「Nahaki」のイラスト [pixiv]
罪人没有选择的权利 #杀戮天使

Pcap DNSProxy

(疑似原作者迫于某种压力删库,目前该链接为项目的备份)

本文主要记录下在 linux 上编译 Pcap DNSProxy 的步骤和过程,以在国内 linux 服务器上搭建可用的无污染 DNS

注意,本文并非萌新向,并且对于这篇文章我不会回答任何与你编译时出错相关的问题(因为这程序编译要求真的很多,而且过程复杂,奇奇怪怪的问题也多),请自行运用百度谷歌解决,并且本文也包含了其中一些我遇到的问题的解决方法

如果你只想在自己的 Windows 电脑上使用 Pcap DNSProxy,那么无需阅读本文,直接查看 作者给出的使用说明 即可

MacOS 用户也需要自行编译,可以参考本文部分相关内容,以及 作者给出的 MacOS 下的使用说明

环境需求

源代码编译器

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

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

此处以 GCC 举例

GCC

使用gcc -v命令查看 gcc 版本,可到 http://ftp.gnu.org/gnu/gcc/ 找到所有 gcc 对应版本的源码

编译需时超级久,可能要个把小时,建议使用screen以免中途断开 SSH 连接功亏一篑(。[/scode]

安装示例:

cd /usr/src
wget http://ftp.gnu.org/gnu/gcc/gcc-8.2.0/gcc-8.2.0.tar.gz
tar zxvf gcc-8.2.0.tar.gz > /dev/null
cd gcc-8.2.0
./configure --prefix=/usr --enable-checking=release --disable-multilib (以及适当加上其他很多你使用 gcc -v 看到的编译选项)
make && make install

GCC 依赖

configure 时可能会提示 GMP, MPFR, MPC 缺少或版本过低

可以直接在 GCC 源码目录下执行./contrib/download_prerequisites来自动下载并解压依赖,不过因为我们搭建无污染 DNS 使用的是国内主机,下载通常十分龟速,因此你也可以在自己的电脑上使用代理或多线程下载工具之类的加速下载好依赖库源码然后放到源码根目录中再执行此命令,可直接跳过下载阶段

以下是所需四个依赖的下载地址:

ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2
ftp://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2
ftp://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.0.3.tar.gz
ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-0.18.tar.bz2

CMake

使用cmake --version命令验证是否已安装,并且版本至少需要3.1

可到 https://cmake.org 查看最新版本下载地址

安装示例:

cd /usr/src
wget https://cmake.org/files/v3.12/cmake-3.12.0.tar.gz
tar zxvf cmake-3.12.0.tar.gz
cd cmake-3.12.0
./configure --prefix=/usr
gmake && gmake install

libevent

可到 http://libevent.org 查看最新版本下载地址

安装示例:

cd /usr/src
wget https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/libevent-2.1.8-stable.tar.gz
tar zxvf libevent-2.1.8-stable.tar.gz
cd libevent-2.1.8-stable
./configure --prefix=/usr
make && make install

libpcap

可到 http://www.tcpdump.org/#latest-release 查看最新版本下载地址

安装示例:

cd /usr/src
wget http://www.tcpdump.org/release/libpcap-1.9.0.tar.gz
tar zxvf libpcap-1.9.0.tar.gz
cd libpcap-1.9.0
./configure --prefix=/usr
make && make install

如果 configure 的时候提示Neither flex nor lex was found.错误,则

# Ubuntu / Debian
apt-get install -y flex bison
# CentOS
yum install -y flex bison

如果遇到缺少yacc的错误,同上方一样安装byacc包即可

libsodium

可到 https://github.com/jedisct1/libsodium/releases 查看最新版本下载地址

安装示例:

cd /usr/src
wget https://github.com/jedisct1/libsodium/releases/download/1.0.16/libsodium-1.0.16.tar.gz
tar zxvf libsodium-1.0.16.tar.gz
cd libsodium-1.0.16
./configure --prefix=/usr
make && make install

openssl

可用命令openssl version -a检查是否安装

如果出现已经安装了(系统本身自带)但是后续编译 DNSProxy 时有关于 openssl 的报错的话,你仍需要按照下方方法手动编译安装一次

安装示例:

cd /usr/src
wget https://www.openssl.org/source/openssl-1.1.0h.tar.gz
tar zxvf openssl-1.1.0h.tar.gz
cd openssl-1.1.0h
./config --prefix=/usr
make && make install

部署 Pcap DNSProxy

编译安装

cd /usr/src
git clone https://github.com/Lyoko-Jeremie/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

修改配置

首先进入 Pcap DNSProxy 软件目录

cd /usr/local/Pcap_DNSProxy

编辑Config.conf,修改以下提到部分配置内容
只是我个人推荐,你当然可以按照自己的意愿更改设置,请参考 软件作者非常负责写的这个很长很长的配置文件说明文档

[Listen]
Operation Mode = Server

[DNS]
Outgoing Protocol = IPv4 + TCP

[Addresses]
IPv4 Main DNS Address = 208.67.222.222: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 = [2620:0:CCC::2]: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

部分解释:

  • Listen
    • Operation Mode 为Server时才能允许外网设备
  • DNS
    • 通过 TCP 使用 OpenDNS 避免 UDP 有时因被 QoS 而无法查询
  • Addresses
    • 对于国外域名使用 OpenDNS
    • 对于国内域名使用 DNSPod > CNNIC | 阿里 | 114
  • Switches
    • 关闭域名随机大小写转换(因为目前实际上没什么必要
    • 开启 EDNS

注册系统服务

如果你的系统支持使用systemctl控制服务

编辑Pcap_DNSProxy.service文件:
ExecStart=程序所在目录的绝对路径,并在最后加上程序的名称
WorkingDirectory=程序所在目录的绝对路径

例如:

ExecStart=/usr/local/Pcap_DNSProxy/Pcap_DNSProxy
WorkingDirectory=/usr/local/Pcap_DNSProxy

然后执行./Linux_Install.Systemd.sh即可安装服务,服务会自动启动

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

如果你的系统只支持使用service控制服务

编辑PcapDNSProxyService文件:
NAME=程序的名称
PATH=程序的绝对路径

例如:

NAME=Pcap_DNSProxy
PATH=/usr/local/Pcap_DNSProxy

然后执行./Linux_Install.SysV.sh即可安装服务,服务会自动启动

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

Enjoy

将你的计算机的 DNS 设置为你服务器的 DNS

服务器记得配置防火墙(或/且安全组)开放53端口,如果你不懂请自行百度

搬瓦工VPS优惠套餐,建站稳如狗,支持支付宝,循环出账94折优惠码BWH3HYATVBJW
年付$47CN2线路,1核/1G内存/20G硬盘/1T@1Gbps【点击购买
季付$47CN2 GIA线路,1核/1G内存/20G硬盘/1T@2.5Gbps【点击购买
Last modification:November 2nd, 2019 at 11:09 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment

12 comments

  1. avin  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 80.0.3987.87(Google Chrome 80.0.3987.87)
    依赖都装好了,编译老是在最后一步linking库文件时出错:
    /tmp/ccKmU66d.ltrans8.ltrans.o: In function `TimerCallback_SocketSend(int, short, void*)':

    :(.text+0xc8): undefined reference to `event_base_get_num_events' /tmp/ccKmU66d.ltrans8.ltrans.o: In function `TimerCallback_TransmissionOnce(int, short, void*)': :(.text+0x22fc): undefined reference to `event_base_get_num_events' collect2: error: ld returned 1 exit status CMakeFiles/Pcap_DNSProxy.dir/build.make:616: recipe for target 'Pcap_DNSProxy' failed 0.4.9.10-13都试了,环境树莓派+raspbian strech以及ubuntu 64都试了,结果一样。奇怪的是4.9.9编译成功。搜了下,发现0.4.9.9后面开始Network.cpp文件内容大改,这句引用就是其中之一,不过小白不知道怎么办了,目前只有用0.4.9.9……
  2. Snylonue  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 77.0.3865.120(Google Chrome 77.0.3865.120)
    github好像已经找不到这个repo了
    1. 神代綺凜  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 77.0.3865.120(Google Chrome 77.0.3865.120)
      @Snylonue 疑似作者被迫删库,文章链接已替换成项目的备份
      1. Dylan Wu  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 77.0.3865.90(Google Chrome 77.0.3865.90)
        @神代綺凜 非常感谢文章链接已替换成项目的备份,那么文章里面的配置说明的文件是不是也得改一下 ԅ(¯﹃¯ԅ)
        1. 神代綺凜  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 78.0.3904.87(Google Chrome 78.0.3904.87)
          @Dylan Wu 确实……忘了
  3. Logic  Android 8.0.0(Android 8.0.0) / Google Chrome 69.0.3497.91(Google Chrome 69.0.3497.91)
    支持ECS吗?包括前面写的chinadns
    1. 神代綺凜  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 69.0.3497.92(Google Chrome 69.0.3497.92)
      @Logic chinadns不支持,这个支持
  4. AUK CL  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 67.0.3396.99(Google Chrome 67.0.3396.99)
    已收藏!!正好想找个时间搭建DNS,这下方便多了
  5. ENDER  Mac OS X(Mac OS X) / Safari 11.0(Safari 11.0)
    莫名其妙的114,受不了了。正想搭个DNS,感谢博主。
  6. WeiYuan  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 68.0.3440.106(Google Chrome 68.0.3440.106)
    杀戮的天使很好看的说。(歪楼了,日常来踩踩。博主好久没更新了,rua)
    1. 神代綺凜  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 68.0.3440.106(Google Chrome 68.0.3440.106)
      @WeiYuan 其实是生活太充实(x
      工作日实习周末疯玩
      而且最近也没有什么特别想写的东西
  7. Ekkles  Windows 10 x64 Edition(Windows 10 x64 Edition) / Google Chrome 67.0.3396.99(Google Chrome 67.0.3396.99)
    为干货点赞......虽然我还没看文章内容。