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

2021-06-10 11:25:20 浏览数 (1)

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.错误,则

代码语言:javascript复制
 复制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,修改以下提到部分配置内容 只是我个人推荐,你当然可以按照自己的意愿更改设置,请参考 软件作者非常负责写的这个很长很长的配置文件说明文档

代码语言:javascript复制
 复制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时才能允许外网设备
  • 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即可安装服务,服务会自动启动

代码语言:javascript复制
 复制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即可安装服务,服务会自动启动

代码语言:javascript复制
 复制1
2# 服务控制
service Pcap_DNSProxy start|stop|restart|status

Enjoy

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

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

0 人点赞