Pcap DNSProxy 是一个基于 WinPcap/LibPcap 用于过滤 DNS 投毒污染的工具,提供便捷和强大的包含正则表达式的修改 Hosts 的方法,以及对 DNSCurve/DNSCrypt 协议、并行和 TCP 协议请求的支持。多服务器并行请求功能,更可提高在恶劣网络环境下域名解析的可靠性。
Head Pic: 「A sinner has no right of choice」/「Nahaki」のイラスト [pixiv] 罪人没有选择的权利 #杀戮天使
Pcap DNSProxy
chengr28/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]
安装示例:
代码语言:javascript复制 复制1
2
3
4
5
6cd /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 使用的是国内主机,下载通常十分龟速,因此你也可以在自己的电脑上使用代理或多线程下载工具之类的加速下载好依赖库源码然后放到源码根目录中再执行此命令,可直接跳过下载阶段
以下是所需四个依赖的下载地址:
代码语言:javascript复制 复制1
2
3
4ftp://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 查看最新版本下载地址
安装示例:
代码语言:javascript复制 复制1
2
3
4
5
6cd /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 查看最新版本下载地址
安装示例:
代码语言:javascript复制 复制1
2
3
4
5
6cd /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 查看最新版本下载地址
安装示例:
代码语言:javascript复制 复制1
2
3
4
5
6cd /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.
错误,则
复制1
2
3
4# Ubuntu / Debian
apt-get install -y flex bison
# CentOS
yum install -y flex bison
如果遇到缺少yacc
的错误,同上方一样安装byacc
包即可
libsodium
可到 https://github.com/jedisct1/libsodium/releases 查看最新版本下载地址
安装示例:
代码语言:javascript复制 复制1
2
3
4
5
6cd /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 的报错的话,你仍需要按照下方方法手动编译安装一次
安装示例:
代码语言:javascript复制 复制1
2
3
4
5
6cd /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
编译安装
代码语言:javascript复制 复制1
2
3
4
5
6cd /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 软件目录
代码语言:javascript复制 复制1cd /usr/local/Pcap_DNSProxy
编辑Config.conf
,修改以下提到的部分配置内容
只是我个人推荐,你当然可以按照自己的意愿更改设置,请参考 软件作者非常负责写的这个很长很长的配置文件说明文档
复制1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20[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
时才能允许外网设备
- Operation Mode 为
- DNS
- 通过 TCP 使用 OpenDNS 避免 UDP 有时因被 QoS 而无法查询
- Addresses
- 对于国外域名使用 OpenDNS
- 对于国内域名使用 DNSPod > CNNIC | 阿里 | 114
- Switches
- 关闭域名随机大小写转换(因为目前实际上没什么必要
- 开启 EDNS
注册系统服务
如果你的系统支持使用systemctl
控制服务
编辑Pcap_DNSProxy.service
文件:
ExecStart=
程序所在目录的绝对路径,并在最后加上程序的名称
WorkingDirectory=
程序所在目录的绝对路径
例如:
代码语言:javascript复制 复制1
2ExecStart=/usr/local/Pcap_DNSProxy/Pcap_DNSProxy
WorkingDirectory=/usr/local/Pcap_DNSProxy
然后执行./Linux_Install.Systemd.sh
即可安装服务,服务会自动启动
复制1
2# 服务控制
systemctl start|stop|restart|status Pcap_DNSProxy.service
如果你的系统只支持使用service
控制服务
编辑PcapDNSProxyService
文件:
NAME=
程序的名称
PATH=
程序的绝对路径
例如:
代码语言:javascript复制 复制1
2NAME=Pcap_DNSProxy
PATH=/usr/local/Pcap_DNSProxy
然后执行./Linux_Install.SysV.sh
即可安装服务,服务会自动启动
复制1
2# 服务控制
service Pcap_DNSProxy start|stop|restart|status
Enjoy
将你的计算机的 DNS 设置为你服务器的 DNS
服务器记得配置防火墙(或/且安全组)开放53
端口,如果你不懂请自行百度