DNSmasq 服务器配置

2023年12月5日

版本 1

查看文件系统版本

[root@localhost ~]# cat /etc/redhat-release

CentOS Stream release 9

查看内核信息

[root@localhost ~]# uname -r

5.14.0-386.el9.x86_64

关闭防火墙

关闭selinux

配置网卡

配置网卡的时候,如果配置网卡完成之后,重启网卡,不能ping外网。

解决 进入/etc/resolv.conf 配置上级的dns解析

配置主机名

hostnamectl set-hostname --static 主机名

前期规划

主机为192.168.8.151 和192.168.8.154

主为151 从为154

查询dnsmasq软件包

yum list dnsmasq

查询 dnsmasq 软件包详情

yum info dnsmasq

DNSmasq 服务器配置_第1张图片

安装 dnsmasq 软件包

使用 yum -y install 命令安装 dnsmasq 软件包

yum -y install dnsmasq

查询软件版本

dnsmasq -v

查看 dnsmasq 安装了哪些组件

rpm -ql dnsmasq

DNSmasq 服务器配置_第2张图片

过滤 dnsmasq 的默认配置文件

查看默认配置文件,其中警号#开头的为注释信息。

[root@hanyw-pgsql conf]# grep -Ev '^$|#' /etc/dnsmasq.conf

user=dnsmasq // 用户 

group=dnsmasq // 用户组 conf-dir=/etc/dnsmasq.d,.rpmnew,.rpmsave,.rpmorig // 配置文件的包含目录

查看 dnsmasq 服务用户

[root@hanyw-pgsql conf]# id dnsmasq

uid=984(dnsmasq) gid=984(dnsmasq) groups=984(dnsmasq)

修改配置

备份原始配置文件到/opt 目录

151主机和154主机一起配置

[root@hanyw-pgsql conf]# cp -av /etc/dnsmasq.conf /opt/

 '/etc/dnsmasq.conf' -> '/opt/dnsmasq.conf'

配置dnsmasq的主配置文件

154主机配置文件

cat >/etc/dnsmasq.conf<

###### hanyw echo $(date +%Y/%m/%d-%H:%S:%M) ######

port=53

resolv-file=/etc/resolv.conf

strict-order

listen-address=192.168.8.154,127.0.0.1

addn-hosts=/etc/dnsmasq_hosts

cache-size=150

conf-dir=/etc/dnsmasq.d,.rpmnew,.rpmsave,.rpmorig

log-facility=/etc/dnsmasqlog/dnsmasq.log

###### hanyw echo $(date +%Y/%m/%d-%H:%S:%M) ######

ldp

配置日志的目的:就是客户端请求dns域名的行为,做分析使用。

151主机配置文件

cat >/etc/dnsmasq.conf<

###### hanyw echo $(date +%Y/%m/%d-%H:%S:%M) ######

port=53

resolv-file=/etc/resolv.conf

strict-order

listen-address=192.168.8.151,127.0.0.1

addn-hosts=/etc/dnsmasq_hosts

cache-size=150

conf-dir=/etc/dnsmasq.d,.rpmnew,.rpmsave,.rpmorig

log-facility=/etc/dnsmasqlog/dnsmasq.log

###### hanyw echo $(date +%Y/%m/%d-%H:%S:%M) ######

ldp

注意:日志需要创建目录/etc/dnsmasqlog

主配置文件也可以添加上级dns,如下图所示

DNSmasq 服务器配置_第3张图片

配置网卡配置文件时需要将dns注释掉

151主机和154主机配置一样

配置本机dns请求的ip地址

154主机配置

[root@localhost etc]# cat /etc/resolv.conf

# Generated by NetworkManager

nameserver 192.168.8.154

nameserver 192.168.8.151

nameserver 8.8.8.8

151主机配置

[root@localhost etc]# cat /etc/resolv.conf

# Generated by NetworkManager

nameserver 192.168.8.151

nameserver 192.168.8.154

nameserver 8.8.8.8

这里就是将本机的dns请求先指向本机,之后本机找不到,再指向8.8.8.8服务器。从上到下。

配置dns域名解析记录

154主机和151主机配置相同

[root@localhost ~]# cat /etc/dnsmasq_hosts

192.168.8.156 www.ljh.com

192.168.8.157 www.ljh.com

这里可以配置nginx 的域名vip

确认dns(本机)配置是否正确

重启系统网络服务

[root@localhost etc]# systemctl restart  NetworkManager

再次查看resolv.conf

[root@localhost etc]# cat /etc/resolv.conf

# Generated by NetworkManager

nameserver 192.168.8.154

nameserver 192.168.8.151

nameserver 8.8.8.8

如果出现下图,则应是网卡配置错误

将网卡的dns配置注释掉。

之后进行重启,再次查看

设置开机自启动

systemctl enable dnsmasq.service

查看dnsmasq 服务

查看 dnsmasq 服务状态

systemctl start dnsmasq

DNSmasq 服务器配置_第4张图片

查看 dnsmasq 的进程

ps axu |grep dnsmasq

过滤服务器端监听的 53 端口库(查看 dnsmasq 服务的端口)

ss -ntpl |grep 53

dnsmasq命令

重启:systemctl reatart dnsmasq

检查语法

[root@localhost ~]# dnsmasq --test

dnsmasq: syntax check OK.

开机自启

systemctl enable dnsmasq.service

检测开机自启是否设置成功

[root@localhost etc]# systemctl list-unit-files |grep -i enable |grep dns

dnsmasq.service                            enabled         disabled

标记为红色的字段,表示 dnsmasq 开机自启动设置成功。

关闭

systemctl stop dnsmasq

开启

systemctl start dnsmasq

dig命令测试

yum install bind-utils

DNSmasq 服务器配置_第5张图片

dig命令 默认不指定@

@指的是dns服务器地址,默认会从本机的/etc/resolv.conf中读取dns的配置

不加@的话,从列表中的第一个dns服务器的ip地址中查找。

DNSmasq 服务器配置_第6张图片

首先要了解什么是dns不可用了,不可用就是/etc/resolv.conf配置文件当中,第一个dns服务器错误,之后会找第二个dns服务器,第二个服务器出错,之后,就会找第三个。以此类推,也就是解析顺序。

同步主 DNS 数据到从 DNS 方案选型

使用系统默认的定时任务结合 rsync

crontab 命令(定时任务)

crontab -e 进入

crontab -l  查看里面内容

rsync 命令

yum -y install rsync

从服务器上面配置秘钥

ssh-keygen

发给主服务器

ssh-copy-id 192.168.8.151

在从服务器上面配置定时任务,定时和主服务器的dnsmasq_hosts文件进行同步。

定时任务

[root@localhost ~]# crontab -l

* * * * * /usr/bin/rsync -az --delete 192.168.8.151:/etc/dnsmasq_hosts /etc/ 2>&1 > /dev/null

缺点

基于分钟级别的数据同步,数据延迟至少在 1 分钟左右,会丢失 1 分钟的数据。

因为系统默认每分钟执行一次,所以数据同步延迟至少在一分钟左右。

进一步改进

使用以下 cron 表达式:

 * * * * * sleep 5; command

这种方法虽然可以实现每 5 秒钟执行一次的效果,但它并不是最稳定和可靠的方式, 因为它依赖于操作系统在给定时间精度上的准确性。如果您需要更加精确的任务调度,建议 使用类似 systemd 或者其他的调度工具来处理。

[root@localhost ~]# crontab -l

* * * * * /usr/bin/rsync -az --delete 192.168.8.151:/etc/dnsmasq_hosts /etc/ 2>&1 > /dev/null ; sleep 5

内置定时器

使用systemd内置的定时器和systemctl命令来实现每5秒执行一次任务

在/etc/systemd/system/目录下创建一个新的文件系统example.service,并写入以下内容

演示配置没有完成

nfs共享存储

解决dns服务器的数据一致性的问题

主从服务器的dnsmasq_hosts 文件全部挂载到nfs服务器上面进行挂载

安装

查看 nfs-utils 软件包是否存在

yum info nfs-utils

安装 nfs-utils 软件包

yum install -y nfs-utils

查看共享服务器的提供的共享文件夹

showmount -e ip(文件服务器的ip地址)

如下图所示

这里的话共享服务器提供的共享目录是/data,但是我们需要将etc/dnsmasq_hosts 文件挂载共享服务器上面

解决

在本机上面创建/data/dnsmasq/etc/目录,之后在该目录下创建/etc/dnsmasq_hosts 的软链接。

创建dns域名解析的目录

mkdir -pv /data/dnsmasq/etc/

挂载 NFS 共享存储

mount -t nfs 共享服务器ip地址:/data/nfs/bj-server /data/dnsmasq/etc/

永久挂载

进入 /etc/fstab 文件里面

写入 本机ip地址   对方的共享目录   本机挂载的目录   nfs   dafaults   0 0

例子:

创建软链接

ln -sv  /etc/dnsmasq_hosts  /data/dnsmasq/etc

也可以在/data/dnsmasq/etc目录下执行

ln -sv  /etc/dnsmasq_hosts .

mount -a 将 /etc/fstab 中定义的所有档案系统挂上

如果要考虑ngs共享存储挂了的话,在/etc/fstab 文件里面再挂载一个共享文件服务器的ip地址,但是该行的配置要注释掉,之后可以写一个脚本,检测如果共享服务器挂掉之后,可将备用的配置前面的#号注释掉。

keepalived实现dns集群高可用 主从架构

前期配置

角色

ip

主机名

vip

域名

软件

dns服务器

192.168.8.151

dnsM151

192.168.8.156

www.ljh.com

大炮

dns服务器

192.168.8.154

dnsB154

192.168.8.157

www.ljh.com

大炮

安装keepalived

yum -y install  keepalived

抢占模式

就是主服务器挂掉之后,备用服务器顶上,之后如果主服务器状态恢复之后,主服务器会将vip抢占过来

151配置

global_defs {

 router_id dnsM151

}

vrrp_script chk_dns{

  script "/data/scripts/shell/checkDnsmasq.sh"

  interval 2

  weight -20

}

vrrp_instance VI_1 {

 state MASTER

 interface ens160

 virtual_router_id 99

 mcast_src_ip 192.168.8.151

 priority 100

 advert_int 3

 authentication {

  auth_type PASS

  auth_pass 1111

 }

 virtual_ipaddress {

  192.168.8.156

  192.168.8.157

 }

 track_script {

  chk_dns

 }

}

154配置

global_defs {

 router_id dnsB154

}

vrrp_script chk_dns{

  script "/data/scripts/shell/checkDnsmasq.sh"

  interval 2

  weight -20

}

vrrp_instance VI_1 {

 state BACKUP

 interface ens160

 virtual_router_id 99

 mcast_src_ip 192.168.8.154

 priority 90

 advert_int 3

 authentication {

  auth_type PASS

  auth_pass 1111

 }

 virtual_ipaddress {

  192.168.8.156

  192.168.8.157

 }

 track_script {

  chk_dns

 }

}

创建启动脚本

在151和154主机上面都要

mkdir -pv /data/scripts/shell/ 目录

之后创建 touch mkdir -pv /data/scripts/shell/checkDnsmasq.sh 启动脚本

创建dnsmasq检测脚本

创建shell脚本存放路径

mkdir -pv /data/scripts/shell 

创建检测dnsmasq的检测脚本

touch  /data/scripts/shell/checkDnsmasq.sh

cat >/data/scripts/shell/checkDnsmasq.sh<

#!/bin/bash

#检测 dnsmasq 是否启动了

dnsProcessNum=\$(ps axu |grep dnsmasq |grep -v grep | wc -l)

if [ \$dnsProcessNum -eq 0 ];then

 systemctl start dnsmasq

 sleep 5

 if [ \$(ps axu |grep dnsmasq |grep -v grep | wc -l) -eq 0 ];then

 systemctl stop keepalived

 fi

fi

EOF

bash -n /data/scripts/shell/checkDnsmasq.sh

chmod 700 /data/scripts/shell/checkDnsmasq.sh

非抢占模式

非抢占就是两台服务器配置都是BACKUP ,但是优先级不同。主服务器挂掉之后,备份服务器顶上,但是之后主服务器恢复之后,不会把vip抢占过来。保证了稳定性

这两个节点 state 指定的都是 BACKUP,同时,其中一个优先级高于一个节点,优先级 (Master)高的节点配置了 nopreempt 参数表示非抢占模式,从节点不配置 nopreempt 参数

151主机

cat > /etc/keepalived/keepalived.conf<

global_defs {

 router_id dnsM151

}

vrrp_script chk_dns{

 script "/data/scripts/shell/checkDnsmasq.sh"

 interval 2

 weight -20

}

vrrp_instance VI_1 {

state BACKUP

# 配 置 为 非 抢 占 模 式

n o p r e e m p t

interface ens160

 virtual_router_id 99

 mcast_src_ip 192.168.8.151

 priority 100

 advert_int 3

 authentication {

 auth_type PASS

 auth_pass 1111

 }

 virtual_ipaddress {

 192.168.8.156

 192.168.8.157

 }

 track_script {

chk_dns

 }

}

EOF

154主机

cat > /etc/keepalived/keepalived.conf<

global_defs {

 router_id dnsB154

}

vrrp_script chk_dns{

 script "/data/scripts/shell/checkDnsmasq.sh"

 interval 2

 weight -20

}

vrrp_instance VI_1 {

 state BACKUP

interface ens160

 virtual_router_id 99

 mcast_src_ip 192.168.8.154 

 priority 90

 advert_int 3

 authentication {

 auth_type PASS

 auth_pass 1111

 }

 virtual_ipaddress {

 192.168.8.156

 192.168.8.157

 }

 track_script {

chk_dns

 }

}

EOF

router_id 不同,均为本节点 hostname

interface 本节点的网络接口,通过 ifconfig 查看

mcast_src_ip 不同,均为本节点的 IP

priority 节点优先级,MASTER 要大于 BACKUP 与抢占模式配置文件的差异点

nopreempt 在 vrrp_instance 块下都配置了,所以 MASTER 从故障中恢复后,不会抢占 vip

state 均为 BACKUP

重启

 systemctl restart keepalived

关闭

systemctl stop  keepalived

主主模式

模式说明:

设置两台主机都处于工作模式相互备份

必须有两个ip地址,分别绑定在两个节点上。

vip地址1 2

主机 a b

主机a 为 1 地址的主节点,主机a为2地址的备节点

主机b为1地址的备节点,主机b为2节点的主节点

当一个主机不可用时,则另外的一台服务器上面的备用节点成为主节点。

需要修改的内容

正确配置

151主机配置

global_defs {

 router_id dnsM151

}

vrrp_script chk_dns{

  script "/data/scripts/shell/checkDnsmasq.sh"

  interval 2

  weight -20

}

vrrp_instance VI_1 {

 state MASTER

 interface ens160

 virtual_router_id 151

 mcast_src_ip 192.168.8.151

 priority 100

 advert_int 3

 authentication {

  auth_type PASS

  auth_pass 1111

 }

 virtual_ipaddress {

  192.168.8.156

 }

 track_script {

        chk_dns

 }

}

vrrp_instance VI_2 {

 state BACKUP

 interface ens160

 virtual_router_id 154

 mcast_src_ip 192.168.8.151

 priority 80

 advert_int 3

 authentication {

  auth_type PASS

  auth_pass 1111

 }

 virtual_ipaddress {

  192.168.8.157

 }

 track_script {

        chk_dns

 }

}

154主机配置

global_defs {

 router_id dnsB154

}

vrrp_script chk_dns{

  script "/data/scripts/shell/checkDnsmasq.sh"

  interval 2

  weight -20

}

vrrp_instance VI_1 {

 state BACKUP

 interface ens160

 virtual_router_id 151

 mcast_src_ip 192.168.8.154

 priority 100

 advert_int 3

 authentication {

  auth_type PASS

  auth_pass 1111

 }

 virtual_ipaddress {

  192.168.8.157

 }

 track_script {

        chk_dns

  }

}

vrrp_instance VI_2 {

 state MASTER

 interface ens160

 virtual_router_id 154

 mcast_src_ip 192.168.8.154

 priority 80

 advert_int 3

 authentication {

  auth_type PASS

  auth_pass 1111

 }

 virtual_ipaddress {

  192.168.8.156

 }

 track_script {

        chk_dns

 }

}

错误配置

151主机配置

global_defs {

 router_id dnsM151

}

vrrp_script chk_dns{

  script "/data/scripts/shell/checkDnsmasq.sh"

  interval 2

  weight -20

}

vrrp_instance VI_1 {

 state MASTER

 interface ens160

 virtual_router_id 151

 mcast_src_ip 192.168.8.151

 priority 100

 advert_int 3

 authentication {

  auth_type PASS

  auth_pass 1111

 }

 virtual_ipaddress {

  192.168.8.156

 }

 track_script {

chk_dns

 }

}

vrrp_instance VI_2 {

 state BACKUP

 interface ens160

 virtual_router_id 154

 mcast_src_ip 192.168.8.151

 priority 80

 advert_int 3

 authentication {

  auth_type PASS

  auth_pass 1111

 }

 virtual_ipaddress {

  192.168.8.157

 }

 track_script {

chk_dns

 }

}

154主机配置

global_defs {

 router_id dnsB154

}

vrrp_script chk_dns{

  script "/data/scripts/shell/checkDnsmasq.sh"

  interval 2

  weight -20

}

vrrp_instance VI_2 {

 state BACKUP

 interface ens160

 virtual_router_id 151

 mcast_src_ip 192.168.8.154

 priority 80

 advert_int 3

 authentication {

  auth_type PASS

  auth_pass 1111

 }

 virtual_ipaddress {

  192.168.8.156

 }

 track_script {

chk_dns

 }

}

vrrp_instance VI_1 {

 state MASTER

 interface ens160

 virtual_router_id 154

 mcast_src_ip 192.168.8.154

 priority 100

 advert_int 3

 authentication {

  auth_type PASS

  auth_pass 1111

 }

 virtual_ipaddress {

  192.168.8.157

 }

 track_script {

chk_dns

 }

}

注意修改的配置

router_id dnsM151   修改为主机的主机名

/data/scripts/shell/checkDnsmasq.sh   配置keepalived的启动脚本

两个vip实例分别为主备

网卡配置名称

virtual_router_id 不同

mcast_src_ip  相同

priority  优先级不同,该主机的主vip优先级高 从ip优先级低

配置的ip地址不同

virtual_ipaddress {

  192.168.8.156

keepalived 两种模式的总结

主从模式和主主模式

主从模式

抢占模式

就是主服务器挂掉之后,备用服务器顶上,之后如果主服务器状态恢复之后,主服务器会将vip抢占过来,主从服务器分别配置MASTERBACKUP。

非抢占模式

主从服务器都配置BACKUP,但是主服务器优先级高,从服务器优先级低 主节点配置nopreempt 参数表示非抢占模式,从节点不配置 nopreempt 参数

主主模式

两台主机都处于工作模式,

必须有两个ip地址,分别绑定在两个节点上,ip地址在两台服务器上面,一台服务器为主vip,另外一台服务器为备vip

keepalived检测机制

配置完成之后,断网线和关掉keepalived服务,服务器宕机或者关机四种检测方法。

断网线和关掉keepalived服务和关机都可以实现keepalived的vip切换

但是关闭网卡或者关闭Networkmanger(停止网卡服务)和服务器宕机不会进行vip的切换。换而言之

就是 keepalived 应该不能监测网卡故障。

你可以写一个监控脚本,一定时间内,ping 不通自己的 IP,就把自己的 keepalived杀死,就可以进行vip的切换。

你可能感兴趣的:(服务器,运维)