BIND DNS 服务器
本文最后更新于10 天前,其中的信息可能已经过时,如有错误请发送邮件到1979007616@qq.com

前言

BIND(Berkeley Internet Name Domain)作为一款目前市面是最主流的开源DNS软件,占据了市面上DNS服务器软件的九成,市面上的主流操作系统( Linux/Windows/Windows Server) 都可以承载BIND的DNS服务。官网地址:BIND 9 – ISC

安装

这里我使用docker进行安装,所以在此之前确认是否安装了dockerdocker compose,可参考文章:Docker入门基础

新建一个docker-compose.yaml文件:

version: "3.7"
services:
  bind:
    image: sameersbn/bind:latest
    ports:
      - "53:53/tcp"
      - "53:53/udp"
      - "10000:10000" # Web 管理界面端口
    environment:
      - ROOT_PASSWORD=123456 # 设置 Web 管理界面密码
    volumes:
      - ./data:/data # 持久化数据
    restart: always

使用docker-compose up -d新建docker容器,可能会提示53端口被占用了,可通过命令:netstat -tulnp | grep :53,查询是什么进程占用了该端口

这个进程可以停用:

systemctl stop systemd-resolved
systemctl disable systemd-resolved

停用systemd-resolved会导致服务器无法进行解析,需要手动设置DNS解析

vim /etc/resolv.conf
# 添加
nameserver 223.5.5.5

使用docker ps查看服务状态:

配置

Web端访问:https://*.*.*.*:10000/,输入账号密码登录,账号默认是root,密码和配置文件一致。

为了方便配置,进入系统首先设置语言为中文

设置时区

配置文件

编辑配置文件named.conf.options

options {
	directory "/var/cache/bind";

	dnssec-validation no;

    allow-query { any; };      //允许任何IP地址发起DNS查询
    listen-on port 53 { any; };      //监听任意网卡的53端口(默认DNS端口)
	forward only;       //只转发DNS查询,不做递归解析
//指定上游DNS服务器列表,当收到DNS请求时将其转发给这些服务器。
	forwarders {
		1.1.1.1;          //Cloudflare DNS
		119.29.29.29;       //腾讯 DNSPod
		223.5.5.5;       //阿里公共 DNS
		};
	recursion yes;        //启用递归解析(用户查不到时,会去帮你查)
};

//定义一个特殊域名的转发规则,当客户端请求*.cosmax.ad 的域名时,BIND不使用全局的forwarders,而是将请求定向到内部DNS服务器10.220.127.38和10.220.127.53
zone "cosmax.ad" {
    type forward;
    forwarders {
        10.220.127.38;
        10.220.127.53;
    };
};

至此,局域网电脑的DNS设置成服务器IP就可以上网了。搭建这个DNS服务器的主要作用是为了连接本部公司的域网络,所以设置了转发规则,如果只是用做DNS服务器,可以省略转发配置。这只是很浅的应用,深层次的使用还没有实践过。

防火墙设置DNS重定向

使用场景:本地电脑使用公共DNS:223.5.5.5、114.114.114.114、211.136.192.6进行域名解析,但是由于要加入本部的域网络,所以自建了DNS服务器进行域名转发。如果要加域就需要使用DNS服务器地址作为DNS,这明显不利于维护,所以就想通过防火墙将本地的公共DNS重定向到DNS服务器,再通过DNS服务器转发到域服务,这样本地电脑就不要更改网络配置,减少了维护工作量。

飞塔防火墙

飞塔防火墙使用的是【虚拟IP】的功能,设置公共DNS(223.5.5.5)映射到DNS服务器(10.10.181.230)

将常用的DNS都设置映射,然后加入到虚拟IP地址组中

设置防火墙策略,流入接口和流出接口设置成防火墙与核心交换机的接口,目的地址:虚拟IP组,服务:DNS,保存。

还要设置一条策略路由,它的作用我不是很明白,查了下chatgpt:拒绝对目标地址为 10.10.181.230(DNS服务器)的流量使用策略路由,改用默认路由。

可以看到防火墙策略有数据包应该就算设置成功了。

sonicwall防火墙

方法:访问规则 + NAT 把所有 UDP/53 重定向到内网 DNS

首先创建地址对象:Network > Address Objects > Add

依次创建其他公共DNS地址对象,并将他们加入到对象组中(规范化统一管理)

创建服务对象:Objects > Service Objects > Add

创建 NAT 规则:Rules > NAT Policies > Add

创建防火墙访问规则(匹配 NAT):Policy > Access Rules > LAN → WAN

添加一条静态路由到 10.10.181.230,走默认网关:Network > Routing > Add Static Route

Interface:本地 LAN 接口

Gateway: LAN侧默认网关

到这一步就设置完成了,我发现有些步骤看不到流量,应该可以省略,但是我没有去测试,放着不管了。

验证DNS流量命中

为了进一步确认本地电脑是否通过DNS服务器,可以在容器中抓包确认流量命中。

docker exec -it bind9-container-name bash
apt update && apt install -y tcpdump  # 如果没装

#新容器可以没有网络安装tcpdump,需要设置
vim /etc/resolv.conf
nameserver 223.5.5.5

tcpdump -n udp port 53 | grep 10.10.128.30 #筛选日志

可以看到如下日志:

这就说明DNS重定向成功。

小提示:您可以通过RSS订阅本站文章更新,订阅地址:https://blog.xmhweb.cn/feed
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇