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

1428 字
7 分钟
[Pcap DNSProxy] 无污染DNS搭建 linux下编译过程全记录
[Pcap DNSProxy] 无污染DNS搭建 linux下编译过程全记录

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

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


Lyoko-Jeremie
/
Pcap_DNSProxy
A Full Backup from https://github.com/chengr28/Pcap_DNSProxy
—
—
GPL-2.0
C++

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

本文主要记录下在 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 对应版本的源码

Warning

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

安装示例:

Terminal window
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 查看最新版本下载地址

安装示例:

Terminal window
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 查看最新版本下载地址

安装示例:

Terminal window
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 查看最新版本下载地址

安装示例:

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

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

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

libsodium#

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

安装示例:

Terminal window
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检查是否安装

Warning

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

安装示例:

Terminal window
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#

编译安装#

Terminal window
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 软件目录

Terminal window
cd /usr/local/Pcap_DNSProxy

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

Terminal window
[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=程序所在目录的绝对路径

例如:

Terminal window
ExecStart=/usr/local/Pcap_DNSProxy/Pcap_DNSProxy
WorkingDirectory=/usr/local/Pcap_DNSProxy

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

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

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

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

例如:

Terminal window
NAME=Pcap_DNSProxy
PATH=/usr/local/Pcap_DNSProxy

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

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

Enjoy#

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

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

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

[Pcap DNSProxy] 无污染DNS搭建 linux下编译过程全记录
https://moe.best/posts/pcap-dnsproxy-linux/
作者
神代綺凛
发布于
2018-08-03
许可协议
CC BY-NC-SA 4.0
相关文章智能推荐
1
[ChinaDNS] 无污染的智能路由 DNS 折腾记
教程手上有台去年被京东云骗了买的80多rmb一年的1M小水管机子,闲着也是闲着,就打算用 ChinaDNS 项目部署一个无污染的DNS服务,其中遇到了许多坑,弄清楚了之后我觉得很有必要写一篇教程(特别是在用H大的老毛子固件上的ChinaDNS的朋友们需要看一看),其中涉及到 DNS 污染的问题是重点
2
[ChinaDNS] 无污染的智能路由 DNS 折腾记 #2
教程这篇文章算是上一篇文章的完善,教你如何将 ChinaDNS 与 DNSMasq 结合起来用,使其更加稳定并且可以支持 TCP 查询
3
[overture] 无污染的智能 DNS 折腾记 #4
教程我是在大概三个月前得知了 overture 并开始使用,其相对 ChinaDNS 的优点是设置更丰富、使用国内外 DNS 的判断逻辑更完善、支持 ECS (edns-client-subnet),并且设置比 Pcap DNSProxy 简单很多。 本文会介绍在 PC 及 openwrt 路由器上部署 overture 的方法和要点。
4
[ChinaDNS] 无污染的智能路由 DNS 折腾记 #3
教程没想到这个系列还能有第三集,应该是完结篇了。这次是因为前不久试用了一下 Linux 的 Windows 子系统,发现意外的不错,与 Windows 本身契合度很高,于是在 Windows 里跑 DNSMasq + ChinaDNS 的设想得以实现√
5
[Linux] 一键全自动 dd 安装 Windows
教程在 Linux 机器上一键全自动安装 Windows 系统,突破没有 VNC,没有救援模式,内存比 dd 包小的限制。使用 Debian Live CD 中的 busybox 做中间媒介,经过复杂的处理,使得即使没有 DHCP 能够让 Windows 获取网络参数,也能让 Windows 操作系统在开机的第一时间能够连通网络。
随机文章随机推荐
Profile Image of the Author
神代綺凛
专业咕咕
分类
标签
站点统计
文章
107
分类
15
标签
269
总字数
140,468
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
EdgeOne Pages
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0
文章目录