芊芊梅竹 發表於 2020-9-27 19:12:00

本机域名泛解析

<p><span style="font-size: 18pt">  </span></p>
<p><span style="font-size: 18pt">最近遇到一个问题,需要在服务器上对域名进行泛解析,比如访问百度的域名统统解析到 6.6.6.6,然而发现 hosts 文件根本就不支持类似 *.baidu.com 的这种写法。</span></p>
<p><span style="font-size: 18pt">于是乎就在网上找了下资料,发现可以通过 Dnsmasq 来解决这个问题,原理其实就是本机的 DNS 指向 Dnsmasq 服务器,然后 Dnsmasq 通过类似通配符 (*) 的方式进行匹配,凡是匹配到 *.baidu.com 的都解析到 6.6.6.6。 <strong>利用 Dnsmasq 实现 hosts 泛解析</strong></span></p>
<p><span style="font-size: 18pt"><strong>环境介绍</strong></span></p>
<pre class="prism-token tokenlanguage-javascript"><span style="font-size: 18pt">$ uname <span class="token operator">-a
Linux ansheng <span class="token number">3.10<span class="token punctuation">.<span class="token number">0<span class="token operator">-<span class="token number">957.1<span class="token punctuation">.<span class="token number">3<span class="token punctuation">.el7<span class="token punctuation">.x86_64 #<span class="token number">1 SMP Thu Nov <span class="token number">29 <span class="token number">14<span class="token punctuation">:<span class="token number">49<span class="token punctuation">:<span class="token number">43 UTC <span class="token number">2018 x86_64 x86_64 x86_64 GNU<span class="token operator">/Linux
$ whoami
root
$ cat <span class="token operator">/etc<span class="token operator">/redhat<span class="token operator">-release
CentOS Linux release <span class="token number">7.6<span class="token punctuation">.<span class="token number">1810 <span class="token punctuation">(Core<span class="token punctuation">)</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre>
<h2 id="%E5%AE%89%E8%A3%85-Dnsmasq"><span style="font-size: 18pt"><strong>安装 Dnsmasq </strong></span></h2>
<p><span style="font-size: 18pt">安装非常简单,通过 yum 即可。</span></p>
<pre class="prism-token tokenlanguage-javascript"><span style="font-size: 18pt">$ yum install dnsmasq <span class="token operator">-y</span></span></pre>
<p><span style="font-size: 18pt"><strong>配置 Dnsmasq</strong></span></p>
<p><span style="font-size: 18pt">先把配置文件备份一份</span></p>
<pre class="prism-token tokenlanguage-javascript"><span style="font-size: 18pt">$ cp <span class="token operator">/etc<span class="token operator">/dnsmasq<span class="token punctuation">.conf <span class="token operator">/etc<span class="token operator">/dnsmasq<span class="token punctuation">.conf_bak</span></span></span></span></span></span></span></pre>
<p><span style="font-size: 18pt">Dnsmasq 的配置在配置文件中都有详细的说明,你可以通过阅读配置文件的注释更改自己想要的配置,我只是想做泛解析,所以我的配置如下:</span></p>
<pre class="prism-token tokenlanguage-javascript"><span style="font-size: 18pt">$ vim <span class="token operator">/etc<span class="token operator">/dnsmasq<span class="token punctuation">.conf
# 严格按照 resolv<span class="token operator">-file 文件中的顺序从上到下进行 DNS 解析<span class="token punctuation">, 直到第一个成功解析成功为止
strict<span class="token operator">-order

# 监听的 IP 地址
listen<span class="token operator">-address<span class="token operator">=<span class="token number">127.0<span class="token punctuation">.<span class="token number">0.1

# 设置缓存大小
cache<span class="token operator">-size<span class="token operator">=<span class="token number">10240

# 泛域名解析,访问任何 baidu<span class="token punctuation">.com 域名都会被解析到 <span class="token number">6.6<span class="token punctuation">.<span class="token number">6.6
address<span class="token operator">=<span class="token operator">/baidu<span class="token punctuation">.com<span class="token operator">/<span class="token number">6.6<span class="token punctuation">.<span class="token number">6.6</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre>
<p><span style="font-size: 18pt">域名解析默认读取 /etc/hosts 文件到本地域名配置文件(不支持泛域名)。</span></p>
<p><span style="font-size: 18pt">DNS 配置默认读取 /etc/resolv.conf 上游 DNS 配置文件,如果读取不到 /etc/hosts 的地址解析,就会转发给 resolv.conf 进行解析地址。</span></p>
<ul class="ul-level-0">
<li><span style="font-size: 18pt">DNS 配置文件</span></li>
</ul>
<pre class="prism-token tokenlanguage-javascript"><span style="font-size: 18pt">$ vim <span class="token operator">/etc<span class="token operator">/resolv<span class="token punctuation">.conf
# 这些都是常用的DNS,可以配置很多
nameserver <span class="token number">127.0<span class="token punctuation">.<span class="token number">0.1# 一定要放在第一个
nameserver <span class="token number">8.8<span class="token punctuation">.<span class="token number">8.8
nameserver <span class="token number">8.8<span class="token punctuation">.<span class="token number">4.4
nameserver <span class="token number">1.1<span class="token punctuation">.<span class="token number">1.1</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre>
<ul class="ul-level-0">
<li><span style="font-size: 18pt">启动服务</span></li>
</ul>
<pre class="prism-token tokenlanguage-javascript"><span style="font-size: 18pt">$ systemctl enable <span class="token operator">--now dnsmasq
Created symlink <span class="token keyword">from <span class="token operator">/etc<span class="token operator">/systemd<span class="token operator">/system<span class="token operator">/multi<span class="token operator">-user<span class="token punctuation">.target<span class="token punctuation">.wants<span class="token operator">/dnsmasq<span class="token punctuation">.service to <span class="token operator">/usr<span class="token operator">/lib<span class="token operator">/systemd<span class="token operator">/system<span class="token operator">/dnsmasq<span class="token punctuation">.service<span class="token punctuation">.</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre>
<pre class="prism-token tokenlanguage-javascript"><span style="font-size: 18pt">查看运行状态</span></pre>
<pre class="prism-token tokenlanguage-javascript"><span style="font-size: 18pt">$ systemctl status dnsmasq
● dnsmasq<span class="token punctuation">.service <span class="token operator">- DNS caching server<span class="token punctuation">.
   Loaded<span class="token punctuation">: <span class="token function">loaded <span class="token punctuation">(<span class="token operator">/usr<span class="token operator">/lib<span class="token operator">/systemd<span class="token operator">/system<span class="token operator">/dnsmasq<span class="token punctuation">.service<span class="token punctuation">; enabled<span class="token punctuation">; vendor preset<span class="token punctuation">: disabled<span class="token punctuation">)
   Active<span class="token punctuation">: <span class="token function">active <span class="token punctuation">(running<span class="token punctuation">) since 日 <span class="token number">2018<span class="token operator">-<span class="token number">12<span class="token operator">-<span class="token number">23 <span class="token number">09<span class="token punctuation">:<span class="token number">00<span class="token punctuation">:<span class="token number">12 UTC<span class="token punctuation">; 3s ago
Main PID<span class="token punctuation">: <span class="token number">3844 <span class="token punctuation">(dnsmasq<span class="token punctuation">)
   CGroup<span class="token punctuation">: <span class="token operator">/system<span class="token punctuation">.slice<span class="token operator">/dnsmasq<span class="token punctuation">.service
         └─<span class="token number">3844 <span class="token operator">/usr<span class="token operator">/sbin<span class="token operator">/dnsmasq <span class="token operator">-k

<span class="token number">12月 <span class="token number">23 <span class="token number">09<span class="token punctuation">:<span class="token number">00<span class="token punctuation">:<span class="token number">12 ansheng systemd<span class="token punctuation">[<span class="token number">1<span class="token punctuation">]<span class="token punctuation">: Started DNS caching server<span class="token punctuation">.<span class="token punctuation">.
<span class="token number">12月 <span class="token number">23 <span class="token number">09<span class="token punctuation">:<span class="token number">00<span class="token punctuation">:<span class="token number">12 ansheng dnsmasq<span class="token punctuation">[<span class="token number">3844<span class="token punctuation">]<span class="token punctuation">: started<span class="token punctuation">, version <span class="token number">2.76 cachesize <span class="token number">10000
<span class="token number">12月 <span class="token number">23 <span class="token number">09<span class="token punctuation">:<span class="token number">00<span class="token punctuation">:<span class="token number">12 ansheng dnsmasq<span class="token punctuation">[<span class="token number">3844<span class="token punctuation">]<span class="token punctuation">: compile time options<span class="token punctuation">: IPv6 GNU<span class="token operator">-getopt DBus no<span class="token operator">-i18n IDN DHCP DHCPv6 no<span class="token operator">-Lua TFTP no<span class="token operator">-conntrack ipset auth no<span class="token operator">-DNSSEC loop<span class="token operator">-detect inotify
<span class="token number">12月 <span class="token number">23 <span class="token number">09<span class="token punctuation">:<span class="token number">00<span class="token punctuation">:<span class="token number">12 ansheng dnsmasq<span class="token punctuation">[<span class="token number">3844<span class="token punctuation">]<span class="token punctuation">: reading <span class="token operator">/etc<span class="token operator">/resolv<span class="token punctuation">.conf
<span class="token number">12月 <span class="token number">23 <span class="token number">09<span class="token punctuation">:<span class="token number">00<span class="token punctuation">:<span class="token number">12 ansheng dnsmasq<span class="token punctuation">[<span class="token number">3844<span class="token punctuation">]<span class="token punctuation">: ignoring nameserver <span class="token number">127.0<span class="token punctuation">.<span class="token number">0.1 <span class="token operator">- local <span class="token keyword">interface
<span class="token class-name">12月 <span class="token number">23 <span class="token number">09<span class="token punctuation">:<span class="token number">00<span class="token punctuation">:<span class="token number">12 ansheng dnsmasq<span class="token punctuation">[<span class="token number">3844<span class="token punctuation">]<span class="token punctuation">: using nameserver <span class="token number">8.8<span class="token punctuation">.<span class="token number">8.8#<span class="token number">53
<span class="token number">12月 <span class="token number">23 <span class="token number">09<span class="token punctuation">:<span class="token number">00<span class="token punctuation">:<span class="token number">12 ansheng dnsmasq<span class="token punctuation">[<span class="token number">3844<span class="token punctuation">]<span class="token punctuation">: using nameserver <span class="token number">8.8<span class="token punctuation">.<span class="token number">4.4#<span class="token number">53
<span class="token number">12月 <span class="token number">23 <span class="token number">09<span class="token punctuation">:<span class="token number">00<span class="token punctuation">:<span class="token number">12 ansheng dnsmasq<span class="token punctuation">[<span class="token number">3844<span class="token punctuation">]<span class="token punctuation">: using nameserver <span class="token number">1.1<span class="token punctuation">.<span class="token number">1.1#<span class="token number">53
<span class="token number">12月 <span class="token number">23 <span class="token number">09<span class="token punctuation">:<span class="token number">00<span class="token punctuation">:<span class="token number">12 ansheng dnsmasq<span class="token punctuation">[<span class="token number">3844<span class="token punctuation">]<span class="token punctuation">: read <span class="token operator">/etc<span class="token operator">/hosts <span class="token operator">- <span class="token number">6 addresses</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre>
<h2 id="%E6%B5%8B%E8%AF%95"><span style="font-size: 18pt"><strong>测试</strong></span></h2>
<pre class="prism-token tokenlanguage-javascript"><span style="font-size: 18pt">$ ping baidu<span class="token punctuation">.com
PING baidu<span class="token punctuation">.<span class="token function">com <span class="token punctuation">(<span class="token number">6.6<span class="token punctuation">.<span class="token number">6.6<span class="token punctuation">) <span class="token number">56<span class="token punctuation">(<span class="token number">84<span class="token punctuation">) bytes <span class="token keyword">of data<span class="token punctuation">.
<span class="token operator">^C
<span class="token operator">--<span class="token operator">- baidu<span class="token punctuation">.com ping statistics <span class="token operator">--<span class="token operator">-
<span class="token number">2 packets transmitted<span class="token punctuation">, <span class="token number">0 received<span class="token punctuation">, <span class="token number">100<span class="token operator">% packet loss<span class="token punctuation">, time 1000ms

$ ping www<span class="token punctuation">.baidu<span class="token punctuation">.com
PING www<span class="token punctuation">.baidu<span class="token punctuation">.<span class="token function">com <span class="token punctuation">(<span class="token number">6.6<span class="token punctuation">.<span class="token number">6.6<span class="token punctuation">) <span class="token number">56<span class="token punctuation">(<span class="token number">84<span class="token punctuation">) bytes <span class="token keyword">of data<span class="token punctuation">.
<span class="token operator">^C
<span class="token operator">--<span class="token operator">- www<span class="token punctuation">.baidu<span class="token punctuation">.com ping statistics <span class="token operator">--<span class="token operator">-
<span class="token number">2 packets transmitted<span class="token punctuation">, <span class="token number">0 received<span class="token punctuation">, <span class="token number">100<span class="token operator">% packet loss<span class="token punctuation">, time 999ms

$ ping pan<span class="token punctuation">.baidu<span class="token punctuation">.com
PING pan<span class="token punctuation">.baidu<span class="token punctuation">.<span class="token function">com <span class="token punctuation">(<span class="token number">6.6<span class="token punctuation">.<span class="token number">6.6<span class="token punctuation">) <span class="token number">56<span class="token punctuation">(<span class="token number">84<span class="token punctuation">) bytes <span class="token keyword">of data<span class="token punctuation">.
<span class="token operator">^C
<span class="token operator">--<span class="token operator">- pan<span class="token punctuation">.baidu<span class="token punctuation">.com ping statistics <span class="token operator">--<span class="token operator">-
<span class="token number">2 packets transmitted<span class="token punctuation">, <span class="token number">0 received<span class="token punctuation">, <span class="token number">100<span class="token operator">% packet loss<span class="token punctuation">, time 999ms</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre>
<p><span style="font-size: 18pt">由上可以看到,几乎访问任何 baidu.com 的域名都会被解析到 6.6.6.6,基本上就达到了我们最初的目的。</span></p>
<h2 id="%E5%88%A9%E7%94%A8-Dnsmasq-%E7%BC%93%E5%AD%98%E7%89%B9%E6%80%A7%E5%AE%9E%E7%8E%B0-DNS-%E5%8A%A0%E9%80%9F"><span style="font-size: 18pt"><strong>利用 Dnsmasq 缓存特性实现 DNS 加速</strong></span></h2>
<h2 id=""><span style="font-size: 18pt">&nbsp;</span></h2>
<p><span style="font-size: 18pt">Dnsmasq 还有一项非常有用的功能就是可以对已经解析过的域名进行缓存,下次在访问这个域名的时候就可以直接返回 IP 地址,而不再需要经过 DNS 查询,这对于扶墙的来说,其实也算是一点优化,默认已经配置好了,我们只需要来演示下缓存的效果。</span></p>
<ul class="ul-level-0">
<li><span style="font-size: 18pt">安装 dig 工具</span></li>
</ul>
<pre class="prism-token tokenlanguage-javascript"><span style="font-size: 18pt">$ yum install bind<span class="token operator">-utils <span class="token operator">-y</span></span></span></pre>
<ul class="ul-level-0">
<li><span style="font-size: 18pt">演示效果</span></li>
</ul>
<pre class="prism-token tokenlanguage-javascript"><span style="font-size: 18pt">$ dig www<span class="token punctuation">.centos<span class="token punctuation">.com <span class="token operator">| grep <span class="token string">"Query time"
<span class="token punctuation">;<span class="token punctuation">; Query time<span class="token punctuation">: <span class="token number">88 msec
$ dig www<span class="token punctuation">.centos<span class="token punctuation">.com <span class="token operator">| grep <span class="token string">"Query time"
<span class="token punctuation">;<span class="token punctuation">; Query time<span class="token punctuation">: <span class="token number">0 msec
$ dig www<span class="token punctuation">.centos<span class="token punctuation">.com <span class="token operator">| grep <span class="token string">"Query time"
<span class="token punctuation">;<span class="token punctuation">; Query time<span class="token punctuation">: <span class="token number">0 msec
$ dig www<span class="token punctuation">.centos<span class="token punctuation">.com <span class="token operator">| grep <span class="token string">"Query time"
<span class="token punctuation">;<span class="token punctuation">; Query time<span class="token punctuation">: <span class="token number">0 msec
$ dig www<span class="token punctuation">.youtube<span class="token punctuation">.com <span class="token operator">| grep <span class="token string">"Query time"
<span class="token punctuation">;<span class="token punctuation">; Query time<span class="token punctuation">: <span class="token number">28 msec
$ dig www<span class="token punctuation">.youtube<span class="token punctuation">.com <span class="token operator">| grep <span class="token string">"Query time"
<span class="token punctuation">;<span class="token punctuation">; Query time<span class="token punctuation">: <span class="token number">0 msec
$ dig www<span class="token punctuation">.qq<span class="token punctuation">.com <span class="token operator">| grep <span class="token string">"Query time"
<span class="token punctuation">;<span class="token punctuation">; Query time<span class="token punctuation">: <span class="token number">71 msec
$ dig www<span class="token punctuation">.qq<span class="token punctuation">.com <span class="token operator">| grep <span class="token string">"Query time"
<span class="token punctuation">;<span class="token punctuation">; Query time<span class="token punctuation">: <span class="token number">0 msec</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre>
<p><br class="Apple-interchange-newline"><br></p><br><br>
来源:https://www.cnblogs.com/dissipate/p/13741324.html
頁: [1]
查看完整版本: 本机域名泛解析