新春献礼!无污染私人安全DNS服务器

2014-01-29 21:49:13 +08:00
 adrianzhang
这个是一个在虚拟机里运行的DNS服务器,在局域网中,只要运行,将其他电脑的DNS设置指向它,就好了。智能找到正确的IP地址。用https访问一些不能访问的网站,比如google全套服务,有惊喜!下载地址: http://bcs.duapp.com/raspberrypi/index.html
35768 次点击
所在节点    Linux
101 条回复
adrianzhang
2014-01-31 23:33:01 +08:00
@kawaiiushio 暂时看不了主页,被黑(污染、墙)了吧?你的项目是什么呢?
kawaiiushio
2014-01-31 23:52:44 +08:00
adrianzhang
2014-02-01 14:34:46 +08:00
@kawaiiushio blog设计很精美!
kawaiiushio
2014-02-01 18:35:23 +08:00
@adrianzhang (//∇//)
adrianzhang
2014-02-02 15:06:14 +08:00
主站地址更改为http://bcs.duapp.com/secdns/index.html
请关注微博及时获取更新,微博页面地址: http://weibo.com/laorendiannao
关注微信获得帮助,万一微博被k,可以从微信获取微博最新地址。微信号:SecDNS
SkyFvcker
2014-02-02 18:47:07 +08:00
额,这么简单的功能为啥要用虚拟机……
https://github.com/henices/Tcp-DNS-proxy
adrianzhang
2014-02-02 19:40:31 +08:00
@SkyFvcker 前面有解释,设备多或者不能改。
szpunk
2014-02-03 10:57:37 +08:00
目前 Windows/Linux 下(可用于防止污染的)最完美的 DNS 转发器是

DNSForwarder https://github.com/holmium/dnsforwarder/

你想到没想到的功能它都有了。

主要功能看看配置文件大概就知道了:

# DNS 转发器的配置文件
# Configure File for dnsforwarder
# 此配置文件最好是 ANSI 编码的

##################################################
#
# 本地
#
##################################################

# LocalInterface <IP>
# 设置在本地开启的界面,可以是本地回环地址 (127.0.0.1) ,本地局域网,以及互联网 (since 2.2)
# 如果是 IPv6 地址,请在地址两端加上方括号,例如 [::1] (本地回环)、[fe80::699c:f79a:9bb6:1] (since 2.3)
LocalInterface 127.0.0.1

# LocalPort <NUM>
# 本地开启的端口 (since 2.2)
LocalPort 53

# OpenLocalTCP <BOOLEAN>
# 在本地开启TCP,以便接收TCP协议的查询 (since 2.2)
# 可选值:`false' 或 `true'
OpenLocalTCP false

##################################################
#
# IP 选择策略
#
##################################################

#########################
# 服务器地址
#########################

# 您可以设置两组上游服务器,
# 一组是用 TCP 协议的服务器 (由 `TCPServer' 指定),
# 另一组是用 UDP 协议的服务器 (由 `UDPServer' 指定)

# 选项 `PrimaryServer' 用来指定首选的服务器(同时也指定了协议)
# 任何不在排除列表 (或者 GFW List) 中的域都会优先通过首选服务器及其协议来查询,
# 在排除列表 (或者 GFW List) 中的域会优先使用另一组服务器并通过另一种协议查询。
# PrimaryServer
# 首选服务器 (since 2.2)
# 可选值:`TCP' 或 `UDP'
PrimaryServer UDP

# TCPServer <IP[:PORT]>
# 指定用 TCP 协议查询的上游服务器 (since 2.2)
# 可以指定多个服务器,服务器之间用半角逗号隔开 (since 2.3)
# 如果不加端口号,则默认为 53 (since 2.3)
# 例如 192.168.1.2:300 以及 4.2.2.2 (since 2.3)
# 对于IPv6地址,请在地址两端加方括号,例如 [2001:4860:4860::8888] 以及加端口的形式 [2001:4860:4860::8888]:53 (since 2.3)
TCPServer 8.8.4.4,8.8.8.8

# UDPServer <IP[:PORT]>
# 指定用 UDP 协议查询的上游服务器 (since 2.2)
# 可以指定多个服务器,服务器之间用半角逗号隔开 (since 2.3)
# 如果不加端口号,则默认为 53 (since 2.3)
# 例如 192.168.1.2:300 以及 4.2.2.2 (since 2.3)
# 对于IPv6地址,请在地址两端加方括号,例如 [2001:4860:4860::8888] 以及加端口的形式 [2001:4860:4860::8888]:53 (since 2.3)
UDPServer 8.8.8.8,114.114.115.115

# DedicatedServer <DOMAIN1 SERVER_IP1>,<DOMAIN2 SERVER_IP2>,...
# 为某些域名指定专门的查询服务器,而不使用服务器列表(`TCPServer' 和 `UDPServer')中的服务器 (since 2.5 b1)
# 格式为:域名 服务器地址
#
# 例如:DedicatedServer www.google.com 8.8.8.8
# 这样所有对域名 www.google.com 的查询都通过 8.8.8.8 这个服务器来进行
# 如果所指定的域名不在排除列表中,那么将通过 `PrimaryServer' 所指定的协议与服务器通讯,
# 否则将通过另一种协议与服务器通讯。
# 不同项之间用半角逗号 (`,') 分隔,同时注意最后不要有逗号
# 可以有多条 `DedicatedServer' 选项
DedicatedServer

#########################
# 服务器选项
#########################

# AllowFallBack <BOOLEAN>
# 如果第一次对某个域名(不在排除列表和 GFW List 中)查询失败,是否再次用另一种协议及其服务器查询 (since 2.5 b1)
# 对于已经指定专用服务器的域名,只切换协议
# 可选值:`false' 或 `true'
AllowFallBack false

# TimeToServer <NUM>
# 与服务器的超时时间,毫秒 (since 2.2)
TimeToServer 3000

# ParallelQuery <BOOLEAN>
# 是否启用 UDP 并发查询 (since 2.6 b1)
# 并发查询指的是,向所有指定的 UDP 服务器发送查询请求,取最先接受到的有效回复作为查询结果,并丢弃其余的回复
# 开启此选项必须保证 `UDPServer' 中的服务器都是 IPv4 或者都是 IPv6 的
# 此选项不影响 `DedicatedServer' 的设置,也就是说,对于已经指定专用服务器的域名,只通过专用服务器进行查询
# 可选值:`false' 或 `true'
ParallelQuery true

# UDPAntiPollution <BOOLEAN>
# 是否开启 UDP 防污染 (since 2.6 b1)
# “防污染”指的是过滤伪造的 DNS 数据包
# 开启时需要保证 `UDPServer' 中存在国外的 DNS 服务器,如果配合使用 `UDPBlock_IP' 选项将大大提高过滤的精确度
# 可选值:`false' 或 `true'
UDPAntiPollution true

# UDPBlock_IP <IP1>,<IP2>,.....
# 阻挡含有以下 IP 地址(只支持 IPv4 地址)的 UDP DNS 数据包 (since 2.6 b1)
# 以下列表中已经含有部分伪造的 IP 地址,可以执行 `dnsforwarder -P' 来获取更多伪造的 IP 地址
# 如果 `UDPAntiPollution' 为 `false',此选项无效
UDPBlock_IP 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

#########################
# 排除列表
#########################

# ExcludedDomain <DOMAIN1>,<DOMAIN2>,.....
# 排除列表,每个域之间用半角逗号 (`,') 分隔,同时注意最后不要有逗号 (since 2.2)
# 支持通配符。 (since 2.2.2)
# 一个项目如果不含通配符,则从域名尾部开始匹配,例如 `123.com' 则会匹配所有以 `123.com' 结尾的域名。
# 如果含通配符则严格按照通配符来匹配。
# 可以有多条 `ExcludedDomain' 选项 (since 2.2.2)
ExcludedDomain

# GfwList <STRING>
# 加载 GFW List (since 2.2.3)
# GFW List 中的域名将被添加到排除列表
# 只有当 `PrimaryServer' 的值为 `UDP' 才会加载 GFW List (否则排除掉全用 UDP 了)
# 如果保留为空,则不载入 GFW List
#GfwList https://autoproxy-gfwlist.googlecode.com/svn/trunk/gfwlist.txt

# GfwListBase64Decode <BOOLEAN>
# GFW List 是否需要 Base64 解码
# 可选值:`false' 或 `true'
GfwListBase64Decode true

# GfwListUpdateInterval <NUM>
# 重新载入 GFW List 的间隔时间,秒 (since 2.2.4)
# -1 表示不重新载入
# 如果保留为空。则使用默认值 (7200)
GfwListUpdateInterval 7200

# GfwListRetryInterval <NUM>
# 当下载 GFW List 失败后的重试时间,秒 (since 2.2.4)
# 如果保留为空,则使用默认值 (30)
GfwListRetryInterval 30

# GfwListDownloadPath <STRING>
# GFW List 下载到本地文件的路径 (since 2.3)
# 如果保留为空,则默认在与程序所在相同的文件夹内
GfwListDownloadPath

#########################
# Hosts
#########################

# Hosts <STRING>
# Hosts 文件路径 (绝对路径),可以是本地 Hosts 文件,也可以是网络上的 Hosts 文件 (以 http:// 或者 https:// 开头)。 (since 2.2)
# 例如 C:\Windows\System32\drivers\etc\hosts 或 /etc/hosts 或 http://xxx.com/hosts
# 在 Hosts 文件中,支持通配符 (`*' 和 `?') (只能在域名中出现通配符)
# 路径两头不要加引号
# Hosts 文件必须是原始格式,不能是压缩文件或者 HTML 文件
# Hosts 文件最好是 ANSI 编码的
# Hosts 中的 IPv6 地址不用加方括号
# 如果保留为空,则不从文件载入 Hosts
Hosts

# HostsUpdateInterval <NUM>
# 重新载入 Hosts 文件的间隔时间,秒 (since 2.2)
# -1 表示不重新载入
# 如果保留为空,则使用默认值 (600)
HostsUpdateInterval 1800

# HostsDownloadPath <STRING>
# 当 Hosts 为网络 Hosts 时,Hosts 文件的下载到本地文件的路径 (不是文件夹路径) (since 2.2)
# 例如 C:\Windows\Temp\hosts 或者 /tmp/hosts
# 绝对路径,路径两头不要加引号
# 如果文件存在则覆盖
# 对本地 Hosts 文件此选项无效
# 如果保留为空,则使用默认路径 (默认在与程序所在相同的文件夹内 (since 2.3) )
HostsDownloadPath

# HostsScript <STRING>
# 当 Hosts 为网络 Hosts 时,在每次下载完 Hosts 文件后、加载 Hosts 文件之前执行的脚本 (since 2.2)
# 绝对路径,路径两头不要加引号
# 对本地 Hosts 文件此选项无效
# 如果保留为空,则不执行脚本
HostsScript

# HostsRetryInterval <NUM>
# 当网络 Hosts 下载失败后的重试时间,秒 (since 2.2.2)
# 仅对网络 Hosts 有效
# 如果保留为空,则使用默认值 (30)
HostsRetryInterval 30

# AppendHosts <HOSTS>,<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.*
#
# 也可以定义 CName 的 Hosts 项,例如:
# AppendHosts www.google.cn *.google.com
# 这样所有匹配 *.google.com 的域名都将指向 www.google.cn 的 IP 地址 (since 2.3)
#
# 如果使某些域名跳过在 Hosts 中的查询,可以
# AppendHosts @@ *.012345.com
# 这样所有匹配 *.012345.com 的域名都不会在 Hosts 中查询
AppendHosts

##################################################
#
# 缓存控制
#
##################################################

# UseCache <BOOLEAN>
# 是否使用缓存(默认为文件缓存) (since 2.2)
# 可选值:`false' 或 `true'
UseCache true

# CacheSize <NUM>
# 缓存大小 (字节)
# 缓存大小不能小于 102400 (100KB) (since 2.3)
CacheSize 1048576

# MemoryCache <BOOLEAN>
# 是否使用内存缓存,而不是文件缓存 (since 2.3.2)
# 可选值:`false' 或 `true'
MemoryCache true

# CacheFile <STRING>
# 手工指定缓存文件 (不是文件夹) (since 2.3)
# 如果保留为空,则默认在与程序所在相同的文件夹内
# 如果 `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' 时,此选项无效
# 当 `IgnoreTTL' 的值为 `true' 时,此选项无效
OverrideTTL -1

# MultipleTTL <NUM>
# 将所有缓存条目的 TTL 加倍,倍数为 <NUM> (since 2.2)
# 当 `UseCache' 的值为 `false' 时,此选项无效
# 当 `IgnoreTTL' 的值为 `true' 时,此选项无效
# 当 `OverrideTTL' 的值不为 -1 时,此选项无效
MultipleTTL 3

# 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

##################################################
#
# 杂项
#
##################################################

# UDPThreads <NUM>
# 在本地进行 UDP 监听的线程数 (since 2.2)
UDPThreads 3

# 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

# RefusingResponseCode <NUM>
# 当拒绝一次查询(`DisabledType' 或者 `DisabledDomain')的时候所返回的状态码 (since 2.6 b1)
# 参见 RFC 1035,`4.1.1. Header section format',`Response code'
RefusingResponseCode 0

# DomainStatistic <BOOLEAN>
# 是否启用域名统计 (since 2.5 b1)
# 可选值:`false' 或 `true'
DomainStatistic false

# StatisticUpdateInterval <NUM>
# 域名统计刷新时间间隔(秒) (since 2.5 b1)
StatisticUpdateInterval 29
Semidio
2014-02-03 11:00:10 +08:00
@adrianzhang 直接在路由器上装dnscrypt不就行了嘛?
adrianzhang
2014-02-03 11:02:19 +08:00
@Semidio SecDNS主要给没刷路由器的人使用。
szpunk
2014-02-03 11:07:38 +08:00
@Semidio 直接装 dnscrypt 会严重影响国内某些使用 CDN 加速的网站,得不偿失。
adrianzhang
2014-02-03 11:08:09 +08:00
@szpunk SecDNS与DNSForwarder的不同之处在于,SecDNS的智能转发列表是自动学习自动更新的,只要运行,不需要手工去配置SecDNS本身。现在有很多与DNSforwarder一样功能的软件,但是需要安装和配置,适合于懂得技术的人,有自己手工调整的乐趣。而SecDNS更适合于那些不想每天折腾如何防止污染,想局域网内所有设备都能防止DNS污染。不想买VPN/VPS等,不想搭Shadowsocks等的人。从这个角度说,SecDNS与DNSForwarder有点像Mac与Linux这样的对比。
pythonee
2014-02-07 22:28:09 +08:00
@adrianzhang 能否说说这个自动学习,自己更新的实现说下,别就一句是云,是加密的UDP这种我们听不懂的语言啊,这个东西能看到源码的吗,怎么感觉就是开箱即用的虚拟机
alexecn
2014-02-09 00:33:09 +08:00
过完年了,google也送礼。youtube支持https模式访问视频了。
用OPenerdns: 42.120.21.30 。
浏览器直接就可以看https://www.youtube.com了。视频还挺流畅的。

OpenerDNS项目地址:https://code.google.com/p/openerdns/
geeklian
2014-02-09 00:36:42 +08:00
....为啥要打包做成Vmware虚拟机。

bin和exe不好么。。
adrianzhang
2014-02-09 00:52:45 +08:00
@pythonee
@alexecn
@geeklian SecDNS能自动学习是因为每次启动的时候都会下载配置,存储在云中的配置是根据污染情况调整的,有自动,有手工。搭建一个国内的DNS是方便,但是用的人多了会被黑客们污染掉或者和谐掉。而运行SecDNS相当于直接把DNS服务器放家里,永远不会因为发布在公网的DNS被污染或和谐而导致用户另寻他途。
GPU
2014-02-09 01:37:35 +08:00
想问配置要求如何 . 能不能运行在水星4530 , 或者说树莓派这些设备 .
geeklian
2014-02-09 01:58:51 +08:00
好吧...其实工作原理不在乎。

只是感觉为了一个DNS,废掉300MB内存和CPU的休眠。。损失太大了。
kqz901002
2014-02-09 11:54:28 +08:00
@adrianzhang 可以做成debian的包可以么?可以造福广大linux用户
standin000
2014-02-09 12:07:30 +08:00
@szpunk 不懂?怎么解释。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/98664

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX