需求:建立内部域名供使用,通过外网DNS将请求解析到内网DNS服务器上进行二次转发目前情况:内网DNS服务器192.168.100.68。现选定一级域名locala.net,客户机统一使用公司现有外网DNS服务器192.168.99.99,现公司运维人员已经将访问*.locala.net的请求(ns记录)全部指向192.168.100.68。现象就是ping  locala.net,a.locala.net以及b.locala.net全部返回192.168.100.68,如果访问a.locala.net/help也可以成功显示内容(与192.168.100.68/help一样)。问题:由于测试期间可能需要频繁创建/删除二级域名,如a.locala.net,b.locala.net,并使客户端访问a.locala.net的时候解析到对应的内网服务器如192.168.100.1,b.locala.net解析到100.2等等,我在192.168.100.68上的角色中添加了DNS服务器,但是无论怎么配置,最终的结果依旧是*.locala.net的请求全部指向192.168.100.68,,只有当客户机使用内网DNS的时候才会实现我需要的那种分发,请问各位高手,如果必须使用公司外网的DNS(192.168.99.99),应该如何配置192.168.100.68上的DNS服务,才能实现将任意的二级域名解析到内网其他的服务器上。

解决方案 »

  1.   

    外网DNS配主域名,转发到内网再匹配二级域名?
      

  2.   

    昨天就看到你这问题了,解释起来太麻烦了,一直没有空回答,现在刚好有点时间,大概说一下吧。
    首先,DNS服务一定需要一台DNS服务器来提供,接受客户端解析域名的请求,返回对应的IP(也有反向解析)。假设我在万网买了一个顶级域名locala.net,这代表着,我可以任意修改这个域名下的记录,比如a.locala.net解析到192.168.100.1。
    1. 最广泛的做法是,我不自建DNS服务器,直接在万网的域名管理后台维护解析记录(增删改),此时DNS服务由万网的服务器提供,DNS的解析记录存放在万网服务器上;
    2. 我也可以自建一台DNS服务器(满足两个条件:我有固定的外网IP,比如 111.222.33.44 ,并且发布DNS服务的端口能让别人访问到),到注册商那里把域名的管理服务器IP改为我自己的这个111.222.33.44,我这台自建服务器就成了locala.net的权威服务器,解析不再由万网提供,万网只是在别人解析的时候把请求引导到我这台服务器上。这两种是公网的情况(用户位于互联网),此外还有一种情况,我可以自己搭一个DNS服务器(作为非权威服务器,或者冒充权威服务器),只存放固定的某几条记录供客户端用,剩下的让客户端自己去公网DNS服务器解析(这个叫DNS转发),这种应用可用在公网也可用在私网(比如我要在局域网里搭一个网站,配一个域名叫www.baidu.com,就可以用这种方法实现),当然这么一说你可能也明白了,这个方案的其中一种用途就是DNS劫持。一般需要联网的客户端,TCP/IP设置里有一项是DNS服务器地址(比如常见的8.8.8.8,114.114.114.114),客户端在遇到域名的时候向DNS服务器请求解析结果,DNS服务器发现自己没有记录,会向根服务器逐级(根域到顶级域再到二级域的方向)请求解析结果并返回给客户端(这叫递归解析);也有另一种模式,叫迭代解析,当DNS服务器发现没有记录,直接返给客户端另一个DNS服务器的地址,让客户端自己去联系,一路下去直到最终解析出来。说一下你测试时碰到的问题:其实你碰到的不是问题,这些结果才是你当前配置下应该有的正常结果。你混淆的是DNS服务器和DNS解析结果,DNS的解析出IP以后,就是最终的结果了,整个解析过程结束,不会继续往下解析下去。
    分析一下:DNS服务器是192.168.99.99,记录是a.locala.net,解析成192.168.100.68;
    客户端用tcp去连abc.com的5000端口时(真实的业务,网站也好,socket也好),只要DNS服务器是A,正常情况下就一定返回192.168.100.68,这时客户端拿到解析结果以后就开开心心地直接访问192.168.100.68的5000端口去了。总之,你向192.168.99.99请求了a.locala.net,它也告诉了你192.168.100.68,这就是全部。虽然你在192.168.100.68上搭了DNS服务,如果你仔细回想一下整个流程就会发现,192.168.100.68上的DNS服务根本没有出场机会。
    所以
        1. 要么在192.168.99.99上将locala.net的请求做DNS转发,转到192.168.100.68上(需要能被192.168.99.99访问到 dns端口)
        2. 要么直接把你客户端的DNS服务器指给192.168.100.68
        3. 要么直接在192.168.99.99上维护locala.net域的DNS记录。最后,我给的测试建议是这样:
    1. 直接在测试端的HOSTS文件里(C:\windows\system32\drivers\etc\hosts或者/etc/hosts)添加对应的解析记录,这是最方便最快捷的方法,维护简单,而且不会有缓存干扰。维护本机HOSTS记录甚至可以专门写一个程序去做,这样更省事。
    2. 次一点的方案,如果客户端在内网,也可以在内网自建DNS服务器解析locala.net,剩下所有的请求都转发到正常的DNS服务器上,将测试端的DNS设为自建DNS服务器(很多路由器直接就带劫持域名的功能,推荐你去看一下说明书是否有名字类似dns mapping、自定义DNS记录的功能),这种方案,需要在修改DNS记录以后,客户端清除一下自身的DNS缓存(ipconfig /flushdns),你之前测试失败。
    其它乱七八糟的方案完全不用考虑。