1.安装
1.1.Dockerfile
这个镜像自带webmin,不需要手动安装;手动安装webmin参考官网:https://webmin.com/download/
FROM sameersbn/bind
# 复制自定义的配置文件
COPY named.conf.options /etc/bind/named.conf.options
COPY named.conf.local /etc/bind/named.conf.local
# 暴露 DNS 服务端口
EXPOSE 53
# 启动 BIND 服务
CMD ["/usr/sbin/named", "-g"]
1.2 named.conf.options
options {
directory "/var/cache/bind";
dnssec-validation auto;
recursion yes;
allow-query { any; };
# allow-query-cache { any; };
listen-on { any; };
listen-on-v6 { any; };
max-cache-ttl 3600;
forwarders {
8.8.8.8;
};
};
1.3 named.conf.local
zone "test.com" {
type master;
file "/var/lib/bind/test.com.hosts";
};
zone "test.net" {
type forward;
forward only;
forwarders { 8.8.8.8; };
};
1.4启动
docker build -t bind9 .
docker run --name bind9 -d --restart=always \
--publish 9000:53/tcp --publish 9000:53/udp --publish 10000:10000/tcp \
bind9
检查启动情况:docker ps
如果一直在重启,查看日志:docker logs bind9
2.配置
2.1控制台
启动成功后,访问端口10000可进入控制台。初始账号密码:root/password
参考:https://juejin.cn/post/7147536857298993189
2.2反向解析
在/etc/bind/named.conf.default-zones下添加配置
zone "2.0.192.in-addr.arpa" IN {
type master;
file "/etc/bind/2.0.192.in-addr.arpa";
allow-update { none; };
};
在上面配置的file路径下创建文件,也可以docker打包时复制到容器中。
$TTL 604800
@ IN SOA ns1.example.com. admin.example.com. (
3 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns1.example.com.
;
$ORIGIN 2.0.192.in-addr.arpa.
2 IN PTR host2.example.com.
100 IN PTR server100.example.com.
;
3.测试
替换成启动时配置的实际ip和port
nslookup -port=9000 b.test.com 0.0.0.0
dig @0.0.0.0 -p 9000 b.test.com
nslookup -port=9000 192.0.2.100 0.0.0.0
dig @0.0.0.0 -p 9000 -x 192.0.2.100
4.监控
4.1 bind_exporter
下载bind_exporter
curl -s https://api.github.com/repos/prometheus-community/bind_exporter/releases/latest | grep browser_download_url | grep linux-amd64 | cut -d '"' -f 4 | wget -qi -
解压&移动
tar xvf bind_exporter*.tar.gz
sudo mv bind_exporter-*/bind_exporter /usr/local/bin
新增bind9配置并重启
(centos)sudo vim /etc/named.conf
(ubuntu)sudo vim /etc/bind/named.conf.options
statistics-channels {
inet 127.0.0.1 port 8053 allow { any; };
};
sudo systemctl restart named
创建Prometheus用户组和用户
sudo groupadd --system prometheus
sudo useradd -s /sbin/nologin --system -g prometheus prometheus
创建systemd配置
sudo tee /etc/systemd/system/bind_exporter.service<<EOF
[Unit]
Description=Prometheus
Documentation=https://github.com/digitalocean/bind_exporter
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=prometheus
Group=prometheus
ExecReload=/bin/kill -HUP \$MAINPID
ExecStart=/usr/local/bin/bind_exporter \
--bind.pid-file=/var/run/named/named.pid \
--bind.timeout=20s \
--web.listen-address=0.0.0.0:9153 \
--web.telemetry-path=/metrics \
--bind.stats-url=http://localhost:8053/ \
--bind.stats-groups=server,view,tasks
SyslogIdentifier=prometheus
Restart=always
[Install]
WantedBy=multi-user.target
EOF
重启&启动
sudo systemctl daemon-reload
sudo systemctl restart bind_exporter.service
sudo systemctl enable bind_exporter.service
检查
systemctl status bind_exporter.service
sudo ss -tunelp | grep 9153
4.2 Prometheus
创建用户组和用户
sudo groupadd --system prometheus
sudo useradd -s /sbin/nologin --system -g prometheus prometheus
创建数据目录
sudo mkdir /var/lib/prometheus
创建配置目录
for i in rules rules.d files_sd; do sudo mkdir -p /etc/prometheus/${i}; done
下载安装包
mkdir -p /tmp/prometheus && cd /tmp/prometheus
curl -s https://api.github.com/repos/prometheus/prometheus/releases/latest \
| grep browser_download_url \
| grep linux-amd64 \
| cut -d '"' -f 4 \
| wget -qi -
解压&移动数据
tar xvf prometheus*.tar.gz
cd prometheus*/
sudo mv prometheus promtool /usr/local/bin/
sudo mv prometheus.yml /etc/prometheus/prometheus.yml
sudo mv consoles/ console_libraries/ /etc/prometheus/
cd ~/
rm -rf /tmp/prometheus
新增job配置
sudo vim /etc/prometheus/prometheus.yml
- job_name: dns-master
static_configs:
- targets: ['0.0.0.0:9153']
labels:
alias: dns-master
创建systemd配置
sudo vim /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus
Documentation=https://prometheus.io/docs/introduction/overview/
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
Environment="GOMAXPROCS=1" #这里修改为CPU核数
User=prometheus
Group=prometheus
ExecReload=/bin/kill -HUP $MAINPID
ExecStart=/usr/local/bin/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/var/lib/prometheus \
--web.console.templates=/etc/prometheus/consoles \
--web.console.libraries=/etc/prometheus/console_libraries \
--web.listen-address=0.0.0.0:9090 \
--web.external-url=
SyslogIdentifier=prometheus
Restart=always
[Install]
WantedBy=multi-user.target
设置权限
for i in rules rules.d files_sd; do sudo chown -R prometheus:prometheus /etc/prometheus/${i}; done
for i in rules rules.d files_sd; do sudo chmod -R 775 /etc/prometheus/${i}; done
sudo chown -R prometheus:prometheus /var/lib/prometheus/
启动
sudo systemctl daemon-reload
sudo systemctl start prometheus
sudo systemctl enable prometheus
检查
systemctl status prometheus
4.3 Grafana
添加Data Sources
1.登录到 Grafana 界面。
2.在左侧菜单栏中,点击“Configuration”(配置),然后选择“Data Sources”(数据源)。
3.点击“Add data source”(添加数据源)按钮。
4.在“Type”(类型)下拉菜单中,选择“Prometheus”。
5.在“Name”(名称)字段中,为数据源输入一个有意义的名称,例如“Prometheus Server”。
6.在“URL”字段中,输入 Prometheus 服务器的地址,通常是 http://your-prometheus-server:9090 ,请将 your-prometheus-server 替换为您实际的 Prometheus 服务器的主机名或 IP 地址。
7.(可选)根据您的需求设置其他选项,如访问模式、HTTP 配置等。
8.点击“Save & Test”(保存并测试)按钮。如果配置正确,您应该看到“Data source is working”(数据源正常工作)的消息。
导入
1.在左侧菜单栏仪表板中选择“导入”。
2.输入模板ID 1666,选择上面导入的数据。
5.参考
https://bind9.readthedocs.io/en/latest/chapter1.html
https://cn.linux-console.net/?p=22001
https://computingforgeeks.com/monitor-bind-dns-server-with-prometheus-grafana/
https://computingforgeeks.com/install-prometheus-server-on-centos-rhel/
https://computingforgeeks.com/install-grafana-and-influxdb-on-centos-rhel/
网友评论