Ubuntu 安装 dnsforwarder

By | 2018-11-27

apt-get install build-essential libcurl4-openssl-dev automake-1.15

git clone http://github.com/holmium/dnsforwarder.git

cd dnsforwarder

make && make install

配置文件内容如下:

# DNS 转发器的配置文件

# Configuration File for dnsforwarder

# 此配置文件最好是 ANSI 编码的

# 相对路径的写法

# Windows:

#  支持用 `% %’ 包围起来的相对路径,比如 `%SYSTEMROOT%\System32\drivers\etc\hosts’。

#  `%PROGRAMDIRECTORY%’ 表示程序所在的文件夹。

#  `%CONFIGFILEDIRECTORY%’ 表示配置文件所在的文件夹。 (since 6.1.3)

#

# Linux:

#  支持类似 `${HOME}’ 的变量,比如 `${HOME}/hosts’。

#  `${PROGRAMDIRECTORY}’ 表示程序的配置文件夹,一般为 `/root/.dnsforwarder/’,执行 `dnsforwarder -p’ 可以获得具体的位置。

#  `${CONFIGFILEDIRECTORY}’ 表示配置文件所在的文件夹。 (since 6.1.3)

##################################################

#

# 日志文件设置

#

##################################################

# LogOn <BOOLEAN>

# 是否打开文件日志输出 (since 5.0.4)

LogOn on

# LogFileThresholdLength <NUM>

# 单个日志文件大小的临界值(字节)(since 5.0.4)

# 当日志文件大小超过这个临界值后,当前的日志文件将会被重命名,然后建立一个新的日志文件,继续记录日志

LogFileThresholdLength 102400

# LogFileFolder <PATH>

# 设定日志文件所在的文件夹 (since 5.0.4)

# 日志文件初始的文件名为 `dnsforwarder.log’,当超过临界值之后,将会被重命名为 `dnsforwarder.log.1’、`dnsforwarder.log.2′ 等等,然后重新建立一个 dnsforwarder.log’ 文件

# 此路径的默认值为程序所在的文件夹(Windows)或程序的配置文件夹(Linux)

LogFileFolder

##################################################

#

# 本地

#

##################################################

# UDPLocal <IP[:PORT]>,<IP[:PORT]>,…

# 设置在本地开启的接口的IP地址和端口,可以是本地回环地址 (127.0.0.1) ,本地局域网,以及互联网 (since 6.0.0)

# 如果是 IPv6 地址,请在IP两端加上方括号(不包含端口部分),例如 [::1]:53 (本地回环)、[fe80::699c:f79a:9bb6:1]:5353 (since 6.0.0)

# 可以设置多个地址,用半角逗号(`,’)分割

# 如果不指定端口,则默认为 53

#

# 示例:

# UDPLocal 127.0.0.1:53,[::1]:53

UDPLocal 127.0.0.1:53

# 这一版本暂时不支持在本地开启 TCP 端口,以后会加上

##################################################

#

# IP 选择策略

#

##################################################

#########################

# 服务器地址

#########################

# UDPGroup <IP1[:PORT],IP2[:PORT],…> <DOMAIN1,DOMAIN2,…> <on|off>

# 设置一个 UDP 上游服务器组,并指定通过这些上游服务器查询的域名 (since 6.0.0)

# 第一部分参数“<IP1[:PORT],IP2[:PORT],…>”,用于指定 UDP 上游服务器,不写端口则默认使用 53 端口

# 第二部分参数“<DOMAIN1,DOMAIN2,…>”,用于指定通过这些 UDP 上游服务器查询的域名,可以包含通配符

# 第三部分参数“<on|off>”,用于指定是否开启并发查询,`on’ 为开启,`off’ 为不开启

# 并发查询指的是,向所有指定的 UDP 服务器发送查询请求,取最先接受到的未屏蔽的回复作为查询结果,并丢弃其余的回复

# 可以有多条 `UDPGroup’ 选项

#UDPGroup 1.2.4.8:53,114.114.114.114 * on

# TCPGroup <IP1[:PORT],IP2[:PORT],…> <DOMAIN1,DOMAIN2,…> <no|PROXY1[:PORT],PROXY2[:PORT],…>

# 设置一个 TCP 上游服务器组,并指定通过这些上游服务器查询的域名 (since 6.0.0)

# 第一部分参数“<IP1[:PORT],IP2[:PORT],…>”,用于指定 TCP 上游服务器,不写端口则默认使用 53 端口

# 第二部分参数“<DOMAIN1,DOMAIN2,…>”,用于指定通过这些 TCP 上游服务器查询的域名,可以包含通配符

# 第三部分参数“<no|PROXY1[:PORT],PROXY2[:PORT],…>”,用于指定查询时使用的 Socks5 代理,不写端口则默认使用 1080 端口。`no’ 代表不使用代理

# 可以有多条 `TCPGroup’ 选项

#

# 示例一:

#  TCPGroup 1.2.4.8:53,114.114.114.114 *.example.com 192.168.50.5:8080,192.168.50.6:8080

# `*.example.com’ 将通过 192.168.50.5:8080 或 192.168.50.6:8080 两个 Socks5 代理,使用 TCP 协议向 1.2.4.8:53 或 114.114.114.114 进行查询

# 示例二:

#  TCPGroup 8.8.8.8,114.114.114.114:53 * no

# `*.example.com’ 将使用 TCP 协议直接向 8.8.8.8 或 114.114.114.114:53 进行查询,不使用代理

TCPGroup 8.8.8.8,8.8.4.4,208.67.222.222:443 * no

# GroupFile <PATH>

# 从文件加载服务器组 (since 6.1.3)

# 服务器组文件的写法请参阅:http://github.com/holmium/dnsforwarder/wiki/GroupFile-%E7%9A%84%E5%86%99%E6%B3%95-%7C-How-to-write-GroupFiles

# 可以有多条 `GroupFile’ 选项

#

# 示例一:

#  GroupFile D:\group.txt

#

# 示例二:

#  GroupFile /etc/group.txt

GroupFile

# 注意:

# 1.对于没有指定服务器的域名,会随机选择一个服务器组进行查询。

# 2.如果某域名匹配多个服务器组,则选择的顺序如下:

#   (1) 优先选择不含通配符的匹配项,如果仍然有多条匹配,则选择匹配度最高的那个,

#       如果匹配度相同的情况下仍然有多条匹配,则选择最后一个。

#       (例如 `ipv6.microsoft.com’ 比 `microsoft.com’ 对于域名 `teredo.ipv6.microsoft.com’ 的匹配度更高)

#   (2) 然后选择包含通配符的匹配项,如果有多条匹配,则选择第一个;

# 组合示例:

# 一、以 microsoft.com 或 office.com 结尾的域名通过 UDP 服务器 1.2.4.8 查询,其它域名通过 TCP 服务器 8.8.4.4 查询:

#  UDPGroup 1.2.4.8 microsoft.com,office.com on

#  TCPGroup 8.8.4.4 * no

# 两行顺序请保持一致

#########################

# 服务器选项

#########################

# BlockIP <IP1>,<IP2>,…..

# 阻挡含有以下 IP 地址(支持 IPv4 和 IPv6 地址)的 DNS 数据包 (since 6.0.0)

# IPv6 地址不用加方括号

BlockIP 243.185.187.39,46.82.174.68,37.61.54.158,93.46.8.89,59.24.3.173,203.98.7.65,8.7.198.45,78.16.49.15,159.106.121.75

# IPSubstituting <IP1 IP’1>,<IP2 IP’2>,…..

# 替换 DNS 数据包中的 IP 地址(只支持 IPv4 地址) (since 5.0.1)

# 例如:

# IPSubstituting 127.0.0.1 1.2.0.127

# 的效果是把 DNS 数据包中所有的 127.0.0.1 地址替换为 1.2.0.127

# 仅替换通过服务器(TCP 和 UDP)查询而来的 DNS 数据包,对于缓存中和 Hosts 中的结果无效

# 多条替换项目用半角逗号 (`,’) 分隔,也可以写多行 `IPSubstituting’

IPSubstituting

# BlockNegativeResponse <BOOLEAN>

# 是否过滤来自上游服务器的查询未成功的响应 (since 6.1.1)

# 查询未成功指:格式错误、服务器错误、域名不存在和服务器拒绝请求等

# 参见 RFC 6895,`2.3.  RCODE Assignment’

BlockNegativeResponse false

#########################

# IP 列表(仅支持 IPv4 地址)

#########################

# IP 列表用于自动检测一组 IP 地址,将相应最快的 IP 地址甄选出来

# GoodIPList <NAME> <INTERVAL>

# 定义一个 IP 列表,<NAME> 为改列表的名称,<INTERVAL> 为检测列表中 IP 地址有效性的间隔时间(毫秒)

# 例如:

#  GoodIPList list1 60000

# GoodIPListAddIP <LIST_NAME> <IP:PORT>

# 向一个 IP 列表中添加 IP 地址

# 例如:

#  GoodIPListAddIP list1 120.0.0.1:80

#########################

# Hosts

#########################

# Hosts <STRING>

# Hosts 文件的 URL,可以是本地 Hosts 文件 (以 file:// 开头,支持相对路径),也可以是网络上的 Hosts 文件 (以 http:// 或者 http:// 开头)。 (since 5.0.5)

# 例如 file://C:/Windows/System32/drivers/etc/hosts 或 file:///etc/hosts 或 http://xxx.com/hosts

# 写多条 `Hosts’ 可以指定多个 Hosts 文件,路径两头不要加引号

# 在 Hosts 文件中,支持通配符 (`*’ 和 `?’) (只能在域名中出现通配符)

# Hosts 文件必须是原始格式,不能是压缩文件或者 HTML 文件

# Hosts 文件最好是 ANSI 编码的

# Hosts 中的 IPv6 地址不用加方括号

# 如果保留为空,则不从文件载入 Hosts

Hosts

# HostsUpdateInterval <NUM>

# 重新载入 Hosts 文件的间隔时间,秒 (since 2.2)

# -1 表示不重新载入

# 如果保留为空,则使用默认值 (18000)

HostsUpdateInterval 18000

# HostsDownloadPath <PATH>

# Hosts 文件的下载到本地文件的路径 (不是文件夹路径) (since 2.2)

# 例如 C:\Windows\Temp\hosts 或者 /tmp/hosts

# 支持相对路径 (since 5.0.3)

# 如果文件存在则覆盖

# 如果保留为空,则默认在与程序所在相同的文件夹内(Windows)或程序的配置文件夹内(Linux)

HostsDownloadPath

# HostsScript <PATH>

# 在每次下载完 Hosts 文件后、加载 Hosts 文件之前执行的脚本 (since 2.2)

# 支持相对路径 (since 5.0.3)

# 如果保留为空,则不执行脚本

HostsScript

# HostsRetryInterval <NUM>

# 当网络 Hosts 下载失败后的重试时间,秒 (since 2.2.2)

# 仅对网络 Hosts 有效

# 如果保留为空,则使用默认值 (30)

HostsRetryInterval 30

# AppendHosts <HOSTS>,<HOSTS>,…

# 附加的 hosts,即使 `Hosts’ 选项为空也照样载入 (since 2.2.2)

# <HOSTS> 的写法与文件中的一样,同样支持通配符

# IPv6 地址不用加方括号

# 多条 hosts 可以用半角逗号分隔开,也可以写多条 `AppendHosts’

# 比如可以写成:

#  AppendHosts 127.0.0.1 123.com,127.0.0.1 456.com,1.2.3.4 foobar.*

# 也可以分多条写:

#  AppendHosts 127.0.0.1 123.com

#  AppendHosts 127.0.0.1 456.com

#  AppendHosts 1.2.3.4 foobar.*

#

# 也可以定义指向一个 IP 列表的 Hosts 项(仅支持 IPv4 地址),例如:

#  AppendHosts <list1> www.123.com

# 此时 www.123.com 将会指向 list1 中最快的 IP 地址。

#

# 也可以定义 CName 的 Hosts 项,例如:

#  AppendHosts www.google.cn *.google.com

# 这样所有匹配 *.google.com 的域名都将指向 www.google.cn 的 IP 地址 (since 2.3)

#

# 如果使某些域名跳过在 hosts 中的查询,可以

#  AppendHosts @@ *.012345.com

# 这样所有匹配 *.012345.com 的域名都不会在 hosts 中查询

#

# 各种 hosts 的优先级从高到低

# 带 `@@’ 的禁止项

# 一般 hosts 项

# CName hosts 项

AppendHosts

# BlockIpv6WhenIpv4Exists <BOOLEAN>

# 如果一个域名在 Hosts 被指定了一个 IPv4 地址(包括文件 Hosts 和 `AppendHosts’ 指定的 Hosts),那么拒绝对这个域名的 IPv6 地址查询 (since 5.0.12, renamed after 6.0.0)

BlockIpv6WhenIpv4Exists false

##################################################

#

# 缓存控制

#

##################################################

# UseCache <BOOLEAN>

# 是否使用缓存(默认为文件缓存) (since 2.2)

# 可选值:`false’ 或 `true’

UseCache false

# CacheSize <NUM>

# 缓存大小 (字节)

# 缓存大小不能小于 102400 (100KB) (since 2.3)

CacheSize 1048576

# MemoryCache <BOOLEAN>

# 是否使用内存缓存,而不是文件缓存 (since 2.3.2)

# 如果 `UseCache’ 为 `false’,此选项无效

# 可选值:`false’ 或 `true’

MemoryCache true

# CacheFile <PATH>

# 手工指定缓存文件 (不是文件夹) (since 2.3)

# 支持相对路径 (since 5.0.3)

# 如果保留为空,则默认在与程序所在相同的文件夹内(Windows)或程序的配置文件夹内(Linux)

# 如果 `MemoryCache’ 为 `true’,此选项无效

CacheFile

# IgnoreTTL <BOOLEAN>

# 是否忽略 TTL (since 2.2)

# 可选值:`false’ 或 `true’

# 为 `true’ 时将忽略 TTL,此时所有的缓存条目将不会被移除

# 为 `false’ 时不忽略 TTL,缓存条目将会按照 TTL 的时间来移除

# 当 `UseCache’ 的值为 `false’ 时,此选项无效

IgnoreTTL false

# OverrideTTL <NUM>

# 强制使所有缓存的条目的 TTL 为 <NUM> (since 2.2)

# 若 <NUM> 为 -1,则表示不进行强制

# 当 `UseCache’ 的值为 `false’ 时,此选项无效

# 此选项等同于 `CacheControl * fixed <NUM>’ (since 5.0.18)

OverrideTTL -1

# MultipleTTL <NUM>

# 将所有缓存条目的 TTL 加倍,倍数为 <NUM> (since 2.2)

# 当 `UseCache’ 的值为 `false’ 时,此选项无效

# 当 `IgnoreTTL’ 的值为 `true’ 时,此选项无效

# 此选项等同于 `CacheControl * vari <NUM>x+0′ (since 5.0.18)

MultipleTTL 1

# CacheControl <DOMAIN> [$[$]]<TYPE> [ARGUMENT]

# 控制域名 <DOMAIN> 的缓存行为 (since 5.0.18)

# 如果缓存未开启,则此选项无效

# <DOMAIN> 是域名;[$[$]] 是传染设定;<TYPE> 是类型;[ARGUMENT] 是参数

# <DOMAIN> 支持通配符,支持尾部匹配

# <TYPE> 有以下可选项(均为小写):

#  orig    : 使用原先的 TTL,即不改变指定域名记录的 TTL,此类型无需 [ARGUMENT] 参数

#  nocache : 不缓存指定域名记录,此类型无需 [ARGUMENT] 参数

#  fixed   : 将指定域名记录的 TTL 修改为一个预先指定的常数值,这个值通过 [ARGUMENT] 参数指定

#  vari    : 将指定域名记录的 TTL 修改为一个预先规定的变量,这个变量通过 [ARGUMENT] 参数指定,此时 [ARGUMENT] 参数的格式为 `ax+b’,其中 a、b 为非负整数(需用户手工指定),x 为记录原先的 TTL 值(不需要用户指定)。此选项必须为 `ax+b’ 的形式,不能是 `ax-b’ 或者其它的变体形式

#

# 示例:

# CacheControl baidu.com orig # 不改变以 `baidu.com’ 结尾的域名的 TTL

# CacheControl 163.com nocache # 不缓存以 `163.com’ 结尾的域名

# CacheControl qq.com fixed 500 # 把所有以 `qq.com’ 结尾的域名的 TTL 修改为 500

# CacheControl sina.com.cn vari 2x+200 # 把所有以 `sina.com.cn’ 结尾的域名的 TTL 的值修改为 2x+200,其中 x 是域名记录原先的 TTL 值

#

# 传染机制:

# 某些域名有 CName 记录,例如 www.windowsupdate.com:

# ;; QUESTION SECTION:

# ;www.windowsupdate.com. IN A

#

# ;; ANSWER SECTION:

# www.windowsupdate.com. 3585 IN CNAME windowsupdate.microsoft.nsatc.net.      (记录一)

# windowsupdate.microsoft.nsatc.net. 285 IN CNAME www.update.microsoft.com.nsatc.net. (记录二)

# www.update.microsoft.com.nsatc.net. 285 IN A 134.170.58.222                      (记录三)

# www.update.microsoft.com.nsatc.net. 285 IN A 65.55.50.157                        (记录四)

#

# 如果仅仅指定了 `www.windowsupdate.com’ 的缓存控制,那么 `windowsupdate.microsoft.nsatc.net’ 和 `www.update.microsoft.com.nsatc.net’ 的记录以什么规则进行处理?是继承 `www.windowsupdate.com’ 的缓存设置,还是使用自己专门的设置(如果有的话)?

# 可以指定传染机制来解决这个问题

# 有以下传染机制(以 `www.windowsupdate.com’ 为例):

#  主动传染 : 所有的域名记录不论是否存在单独指定的控制条目,均使用 `www.windowsupdate.com’ 的控制条目

#  被动传染 : 如果存在单独指定的控制条目,那么使用单独指定的控制条目,否则使用 `www.windowsupdate.com’ 的控制条目

#  不传染   : 如果存在单独指定的控制条目,那么使用单独指定的控制条目,如果没有则不修改记录的 TTL 值

# 只有被查询的域名控制条目才具有传染性质

# 写法:

#  主动传染 (此为默认情况):

#   CacheControl www.windowsupdate.com fixed 1000

#   CacheControl 163.com orig

#  被动传染(<TYPE> 前加一个 `$’):

#   CacheControl www.windowsupdate.com $fixed 1500

#   CacheControl sina.com.cn $nocache

#  不传染(<TYPE> 前加两个 `$’):

#   CacheControl www.windowsupdate.com $$fixed 2000

#   CacheControl windowsupdate.microsoft.nsatc.net $$vari 2x+100

#

# 示例(仍然以 `www.windowsupdate.com’ 为例):

#  CacheControl www.windowsupdate.com fixed 1000

#  CacheControl windowsupdate.microsoft.nsatc.net fixed 500

#  效果是:记录一、二、三和四的 TTL 都会被修改为 1000

#

#  CacheControl www.windowsupdate.com $fixed 1000

#  CacheControl windowsupdate.microsoft.nsatc.net fixed 500

#  效果是:记录一、三和四的 TTL 会被修改为 1000,记录二的 TTL 会被修改为 500

#

#  CacheControl www.windowsupdate.com $$fixed 1000

#  CacheControl windowsupdate.microsoft.nsatc.net fixed 500

#  效果是:记录一的 TTL 会被修改为 1000,记录二的 TTL 会被修改为 500,记录三和四的 TTL 不会被修改

# ReloadCache <BOOLEAN>

# 当程序启动时是否重新载入已有的文件缓存 (since 2.2.3)

# 已有的缓存大小必须和 `CacheSize’ 所指定的大小相等

# 可选值:`false’ 或 `true’

# 如果 `MemoryCache’ 的值为 `true’,此选项无效

ReloadCache false

# OverwriteCache <BOOLEAN>

# 如果已有的文件缓存无法重载,是否直接将其覆盖掉 (since 2.3)

# 可选值:`false’ 或 `true’

# 如果 `MemoryCache’ 的值为 `true’,此选项无效

# 如果 `ReloadCache’ 的值为 `false’,此选项无效

OverwriteCache false

##################################################

#

# 杂项

#

##################################################

# DisabledType <NUM1>,<NUM2>,…..

# 禁止查询的 DNS 类型列表,每个类型(用数字代表)之间用半角逗号 (`,’) 分隔 (since 2.2)

# 所有的 DNS 类型:

# A       1   IPv4 地址

# AAAA       28   IPv6 地址

# APL        42

# CERT       37

# CNAME       5

# DHCID      49

# DLV     32769

# DNAME      39

# DNSKEY     48

# DS      43

# HIP        55

# IPSECKEY   45

# KEY        25

# KX      36

# LOC        29

# MX      15

# NAPTR      35

# NS       2   Name Server

# NSEC       47

# NSEC3      50

# NSEC3PARAM 51

# PTR        12   Domain pointer

# RRSIG      46

# RP      17

# SIG        24

# SOA         6   start of authority record

# SPF        99

# SRV        33

# SSHFP      44

# TA   32768

# TKEY      249

# TSIG      250

# TXT        16

# ANY       255

# AXFR      252

# IXFR      251

# OPT        41

DisabledType

# DisabledDomain <DOMAIN1>,<DOMAIN2>,…..

# 禁止查询的域列表,每个域之间用半角逗号 (`,’) 分隔 (since 2.2)

# 支持通配符。 (since 2.2.2)

# 一个项目如果不含通配符,则从域名尾部开始匹配,例如 `123.com’ 则会匹配所有以 `123.com’ 结尾的域名。

# 如果含通配符则严格按照通配符来匹配。

# 可以有多条DisabledDomain (since 2.2.2)

DisabledDomain

# DisabledList <PATH>

# 从文件载入到禁用列表 (since 5.0.3)

# 写多条 `DisabledList’ 可以加载多个文件,路径两头不要加引号

DisabledList

# DomainStatistic <BOOLEAN>

# 是否启用域名统计 (since 2.5 b1)

# 域名信息统计会依照模板文件记录域名的查询情况

# 记录的结果在与程序所在相同的文件夹内(Windows)或程序的配置文件夹内(Linux)的`statistic.html’文件内

# 可选值:`false’ 或 `true’

DomainStatistic false

# DomainStatisticTempletFile <PATH>

# 域名统计的模板文件路径 (since 5.0.23)

# 如果保留为空,则默认为与程序所在相同的文件夹内(Windows)或程序的配置文件夹内(Linux)的`StatisticTemplate.html’文件

DomainStatisticTempletFile

# StatisticInsertionPosition <STRING>

# 指定在模板文件中写入的位置 (since 5.0.23)

# 如果保留为空,则默认为`<!– INSERT HERE –>’

# StatisticInsertionPosition <!– INSERT HERE –>

# StatisticUpdateInterval <NUM>

# 域名统计刷新时间间隔(秒) (since 2.5 b1)

StatisticUpdateInterval 29

發佈留言