雇主给了个难题,他搭建了一个openvpn,并且有两个DNS Server,一个是带AD过滤的,一个是不带的。这两个dns服务在同一个机器上,端口不同。

他想让在openvpn的client端配置一下,让客户使用不同的dns server。

找了半天,没有能修改dns port的配置。

于是曲线救国。

方案如下:客户端固定IP,根据不同的来源IP来分发到不同的DNS去。

本来是想用V2EX一个哥们自己写的glider,弄了半天,不知道怎么配,不过功能肯定是能实现的。最差就是自己改go代码了。

快速起见,用了另外一个哥们的dns-dispatcher,就是dns分发,glider是彻底的各种代理转发,链条代理,非常强悍。

克隆dns-dispatcher代码

git clone https://github.com/cathuhoo/dns-dispatcher  

编译:

make  

配置,我们只配置了udp的53端口,标准的DNS端口

vi dns-dispatch.config  
; This is a test configuration file

[main]
file_resolvers = resolvers.txt  
file_policy = policy.txt  
file_log = /var/log/dns-dispatch.log  
file_pid = /var/run/dns-dispatch.pid  
num_threads = 3  
service_port = 53  
#tcpservice_port = 53
daemonize = yes  

配置策略:

vi policy.txt  
ip2 | * | Forward:bind2  
ip1 | * | Forward:bind1  

配置ip1和ip2

vi ip1  
10.10.1.2

vi ip2  
10.10.1.3  

配置bind1和bind2,两个dns在10.10.1.1上,端口分别是5301和5302

vi resolvers.txt  
bind1|10.10.1.1|5301  
bind2|10.10.1.1|5302  

运行:

sudo ./dns-dispatch -c dns-dispatch.config  

OK,搞定,所有的配置都在文件里,还有别的用法,大家用的话自己看文档吧。

最后分别从10.10.1.2和10.10.1.3上面用dig 请求dns server 10.10.1.1,会得到不同的结果

dig -t www.bbb.com @10.10.1.1  
comments powered by Disqus