雇主给了个难题,他搭建了一个openvpn,并且有两个DNS Server,一个是带AD广告过滤的,一个是不带的。这两个dns服务在同一个机器上,端口不同。
他想让在openvpn的client端配置一下,让客户使用不同的dns server。
找了半天,没有能修改dns port的配置。
于是曲线救国。
方案如下:客户端固定IP,根据不同的来源IP来分发到不同的DNS去。
本来是想用V2EX一个哥们自己写的glider,弄了半天,不知道怎么配,不过功能肯定是能实现的。最差就是自己改go代码了。
快速起见,用了另外一个哥们的dns-dispatcher,就是dns分发,glider是彻底的各种代理转发,链条代理,非常强悍。
克隆dns-dispatcher代码
1git clone https://github.com/cathuhoo/dns-dispatcher
编译:
1make
配置,我们只配置了udp的53端口,标准的DNS端口
1vi dns-dispatch.config
2; This is a test configuration file
3
4[main]
5file_resolvers = resolvers.txt
6file_policy = policy.txt
7file_log = /var/log/dns-dispatch.log
8file_pid = /var/run/dns-dispatch.pid
9num_threads = 3
10service_port = 53
11#tcpservice_port = 53
12daemonize = yes
配置策略:
1vi policy.txt
2ip2 | * | Forward:bind2
3ip1 | * | Forward:bind1
配置ip1和ip2
1vi ip1
210.10.1.2
3
4vi ip2
510.10.1.3
配置bind1和bind2,两个dns在10.10.1.1上,端口分别是5301和5302
1vi resolvers.txt
2bind1|10.10.1.1|5301
3bind2|10.10.1.1|5302
运行:
1sudo ./dns-dispatch -c dns-dispatch.config
OK,搞定,所有的配置都在文件里,还有别的用法,大家用的话自己看文档吧。
最后分别从10.10.1.2和10.10.1.3上面用dig 请求dns server 10.10.1.1,会得到不同的结果
1dig -t www.bbb.com @10.10.1.1