搭建dnsmasq 自运营dns服务器

 

目录

一、dnsmasq简介

1、简介

2、特点

3、 解析流程

 二、dnsmasq安装、配置说明

1、环境配置

2、软件安装

3、 运行环境配置文件

4、配置文件详细介绍

5、一些其它配置应用


一、dnsmasq简介

1、简介

DNSmasq是一个小巧且方便地用于配置DNS和DHCP的工具,适用于小型网络,最多可支持1000台主机,它提供了DNS功能和可选择的DHCP功能。它服务那些只在本地适用的域名,这些域名是不会在全球的DNS服务器中出现的。DHCP服务器和DNS服务器结合,并且允许DHCP分配的地址能在DNS中正常解析,而这些DHCP分配的地址和相关命令可以配置到每台主机中,也可以配置到一台核心设备中(比如路由器),DNSmasq支持静态和动态两种DHCP配置方式。

2、特点

开源项目,支持平台多,配置简单,不依赖ISP的DNS服务器。

DNS和DHCP两个功能可以同时使用 也可分别单独实现。

自带一个PXE服务器 以及对邮件服务器MX、jabber的srv 记录的支持。

3、 解析流程

先去解析hosts文件(可在配置文件中配置no-hosts选择是否加载/etc/hosts作为dnsmasq的dns本地缓存)

再去解析dnsmasq.d下*.conf文件(可在配置文件中配置addn-hosts=指定路径)

最后可定义dnsmasq.conf中上游dns解析(可在配置文件中配置resolv-file指定该文件路径,并在其中指定ISP服务商的dns服务器)

 二、dnsmasq安装、配置说明

1、环境配置

#文件连接数配置
echo '
ulimit -u 102400
ulimit -d unlimited
ulimit -m unlimited
ulimit -s unlimited
ulimit -t unlimited
ulimit -v unlimited' >> /etc/profile

#内核参数配置
echo '
net.ipv4.conf.all.arp_notify = 1
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.ip_local_reserved_ports = 41490,41488
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.ipv4.tcp_max_tw_buckets = 40000
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 262144
net.core.optmem_max = 81920
net.core.somaxconn = 65535
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_rmem = 4096 87380 8388608
net.ipv4.tcp_wmem = 4096 87380 8388608
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_keepalive_intvl = 60
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_fin_timeout = 30
vm.swappiness = 0
vm.max_map_count=655360
net.ipv4.ip_local_port_range = 1024    65535 ' >> /etc/sysctl.conf

sysctl -p

2、软件安装

[root@dnsmasq ~]# yum -y install -y dnsmasq
[root@dnsmasq ~]# dnsmasq -v
Dnsmasq version 2.76  Copyright (c) 2000-2016 Simon Kelley

[root@dnsmasq ~]# cp /etc/dnsmasq.conf /etc/dnsmasq.conf.bak
[root@dnsmasq ~]# ll /etc/dnsmasq.d/
total 0


3、 运行环境配置文件

[root@dnsmasq ~]# cat /etc/dnsmasq.conf
no-hosts
addn-hosts=/data/server/dnsmasq/conf/dns_add_hosts
resolv-file=/data/server/dnsmasq/conf/dnsmasq.resolv.conf 
no-dhcp-interface=eth0
#except-interface=eth0
#缓存的数量
cache-size=10240
#如果查询的域名没ttl,则使用此设置为缓存ttl时间
neg-ttl=600
#指定允许返回给客户端最大ttl时间
max-ttl=600
#dnsmasq服务器缓存最大时间设定
max-cache-ttl=3600
#dnsmasq服务器缓存最小时间设定
min-cache-ttl=3600
log-facility=syslog

[root@dnsmasq ~]# cat /data/server/dnsmasq/conf/dnsmasq.resolv.conf
nameserver 180.76.76.76  #百度公共DNS
nameserver 223.6.6.6     #阿里云公共DNS
nameserver 8.8.8.8       #Google公共DNS

[root@dnsmasq ~]# cat /data/server/dnsmasq/conf/dns_add_hosts
192.168.1.2    op.test.cn
#ip地址    #域名

[root@dnsmasq ~]# systemctl start dnsmasq          #启动dnsmasq服务
[root@dnsmasq ~]# systemctl enable dnsmasq         #设置成开机自启动
[root@dnsmasq ~]# netstat -antp|grep 53    

[root@dnsmasq ~]# killall -s SIGHUP dnsmasq        #修改完后,kill信号,免重启

4、配置文件详细介绍

# 不加载本地的 /etc/hosts 文件
#no-hosts

# 添加读取额外的 hosts 文件路径,可以多次指定。如果指定为目录,则读取目录中的所有文件。
#addn-hosts=/etc/dnsmasq.hosts.d

# 读取目录中的所有文件,文件更新将自动读取
#hostsdir=/etc/dnsmasq.hosts.d

# 例如,/etc/hosts中的os01将扩展成os01.example.com
#expand-hosts

##############################################################################

# 缓存时间设置,一般不需要设置
# 本地 hosts 文件的缓存时间,通常不要求缓存本地,这样更改hosts文件后就即时生效。
#local-ttl=3600

# 同 local-ttl 仅影响 DHCP 租约
#dhcp-ttl=
[,] #add-mac[=base64|text] #add-cpe-id= #add-subnet[[=[/]][,[/]]] ############################################################################## ############################################################################## # 缓存条数,默认为150条,cache-size=0 禁用缓存。 cache-size=1000 # 不缓存未知域名缓存,默认情况下dnsmasq缓存未知域名并直接返回为客户端。 no-negcache # 指定DNS同属查询转发数量 dns-forward-max=1000 ############################################################################## #dnssec #trust-anchor=[],,,,, #dnssec-check-unsigned #dnssec-no-timecheck #dnssec-timestamp= #proxy-dnssec #dnssec-debug ############################################################################## #auth-server=,| #auth-zone=[,[/][,[/].....]] #auth-zone=[,[/6|/4][,[/6|/4].....]] #auth-soa=[,[,[,[,]]]] #auth-sec-servers=[,[,...]] #auth-peer=[,[,...]] # 启用连接跟踪,读取 Linux 入栈 DNS 查询请求的连接跟踪标记, # 并且将上游返回的响应信息设置同样的标记。 # 用于带宽控制和防火墙部署。 # 此选项必须在编译时启用 conntrack 支持,并且内核正确配置并加载 conntrack。 # 此选项不能与 query-port 同时使用。 #conntrack ############################################################################## # # DHCP 选项 # ############################################################################## # 设置 DHCP 地址池,同时启用 DHCP 功能。 # IPv4 可指定为 static|proxy ,当 指定为 static 时, # 需用 dhcp-host 手动分配地址池中的 IP 地址。 # 当 指定为 proxy 时,为指定的地址池提供 DHCP 代理。 #dhcp-range=[tag:[,tag:],][set:,][,][,][,[,]][,] #dhcp-range=172.16.0.2,172.16.0.250,255.255.255.0,1h #dhcp-range=192.168.10.150,192.168.10.180,static,255.255.255.0,1h # 根据 MAC 地址或 id 固定分配客户端的 IP 地址、主机名、租期。 # IPv4 下指定 id:* 将忽略 DHCP 客户端的 ID ,仅根据 MAC 来进行 IP 地址分配。 # 在读取 /etc/hosts 的情况,也可以根据 /etc/hosts 中的主机名分配对应 IP 地址。 # 指定 ignore 将忽略指定客户端得 DHCP 请求。 #dhcp-host=[][,id:|*][,set:][,][,][,][,ignore] #dhcp-hostsfile= #dhcp-hostsdir= # 读取 /etc/ethers 文件 与使用 dhcp-host 的作用相同。IPv6 无效。 #read-ethers # 指定给 DHCP 客户端的选项信息, # 默认情况下 dnsmasq 将发送:子网掩码、广播地址、DNS 服务器地址、网关地址、域等信息。 # 指定此选项也可覆盖这些默认值并且设置其他选项值。 # 重要:可以使用 option:或者 option号 来指定。 # 和 option号的对应关系可使用命令: # dnsmasq --help dhcp 以及 dnsmasq --help dhcp6 查看,这点很重要。 # 例如设置网关参数,既可以使用 dhcp-option=3,192.168.4.4 也可以使用 dhcp-option = option:router,192.168.4.4。 # 0.0.0.0 意味着当前运行 dnsmasq 的主机地址。 # 如果指定了多个 tag: 必须同时匹配才行。 # [encap:,][vi-encap:,][vendor:[],] 有待继续研究。 #dhcp-option=[tag:,[tag:,]][encap:,][vi-encap:,][vendor:[],][|option:|option6:|option6:],[[,]] #dhcp-option-force=[tag:,[tag:,]][encap:,][vi-encap:,][vendor:[],],[[,]] #dhcp-optsfile= #dhcp-optsdir= #dhcp-option=3,1.2.3.4 #dhcp-option=option:router,1.2.3.4 #dhcp-option=option:router,192.168.10.254 #dhcp-option=option:dns-server,192.168.10.254,221.12.1.227,221.12.33.227 ############################################################################## # (IPv4 only) 禁用重用服务器名称和文件字段作为额外的 dhcp-option 选项。 # 一般情况下 dnsmasq 从 dhcp-boot 移出启动服务器和文件信息到 dhcp-option 选项中。 # 这使得在 dhcp-option 选项封包中有额外的选项空间可用,但是会使老的客户端混淆。 # 此选项将强制使用简单并安全的方式来避免此类情况。可以认为是一个兼容性选项。 #dhcp-no-override ############################################################################## # 配置 DHCP 中继。 # 是运行 dnsmasq 的接口的 IP 地址。 # 所有在 接口上接收到的 DHCP 请求将中继到 指定的远程 DHCP 服务器。 # 可以多次配置此选项,使用同一个 转发到多个不同的 指定的远程 DHCP 服务器。 # 仅允许使用 IP 地址,不能使用域名等其他格式。 # 如果是 DHCPv6, 可以是 ALL_SERVERS 的多播地址 ff05::1:3 。 # 在这种情况下必须指定接口 ,不能使用通配符,用于直接多播到对应的 DHCP 服务器所在的接口。 # 指定了仅允许接收从 接口的 DHCP 服务器相应信息。 #dhcp-relay=,[,] ############################################################################## # 设置标签 #dhcp-vendorclass=set:,[enterprise:,] #dhcp-userclass=set:, #dhcp-mac=set:, #dhcp-circuitid=set:, #dhcp-remoteid=set:, #dhcp-subscrid=set:, #dhcp-match=set:,[,|][,|] # 在 PXE 启动后弹出提示, 为提示内容, 为超时时间,为 0 则立即执行。 # 如果未指定此选项,在有多个启动选项的情况下等待用户选择,不会超时。 #pxe-prompt=[tag:,][,] # 根据不同的类型使用不同的菜单,使用示例: # #pxe-prompt="What system shall I netboot?", 120 # # or with timeout before first available action is taken: # pxe-prompt="Press F8 or Enter key for menu.", 60 # pxe-service=x86PC, "Now in x86PC (BIOS mode), boot from local", 0 # pxe-service=x86PC, "Now in x86PC (BIOS mode)", pxelinux # pxe-service=PC98, "Now in PC98 mode", PC98 # pxe-service=IA64_EFI, "Now in IA64_EFI mode", IA64_EFI # pxe-service=Alpha, "Now in Alpha mode", Alpha # pxe-service=Arc_x86, "Now in Arc_x86 mode", Arc_x86 # pxe-service=Intel_Lean_Client, "Now in Intel_Lean_Client mode", Intel_Lean_Client # pxe-service=IA32_EFI, "Now in IA32_EFI mode", IA32_EFI # pxe-service=X86-64_EFI, "Now in X86-64_EFI (UEFI mode), boot from local", 0 # pxe-service=X86-64_EFI, "Now in X86-64_EFI (UEFI mode)", grub/grub-x86_64.efi # pxe-service=Xscale_EFI, "Now in Xscale_EFI mode", Xscale_EFI # pxe-service=BC_EFI, "Now in BC_EFI mode", BC_EFI # # CentOS7 系统不支持下列两个选项 # #pxe-service=ARM32_EFI,"Now in ARM32_EFI mode",ARM32_EFI # #pxe-service=ARM64_EFI,"Now in ARM64_EFI mode",ARM64_EFI ############################################################################## # 默认为150,即最多分配150个ip地址出去,最大1000个ip #dhcp-lease-max=150 # (IPv4 only) 指定DHCP端口,默认为67和68。如果不指定则为1067和1068,单指定一个,第二个加1 #dhcp-alternate-port[=[,]] # 谨慎使用此选项,避免 IP 地址浪费。(IPv4 only) 允许动态分配 IP 地址给 BOOTP 客户端。 # 注意:BOOTP 客户端获取的 IP 地址是永久的,将无法再次分配给其他客户端。 #bootp-dynamic[=[,]] # 谨慎使用此选项。 # 默认情况下 DHCP 服务器使用 ping 的方式进行确保 IP 未被使用的情况下将 IP 地址分配出去。 # 启用此选项将不使用 ping 进行确认。 #no-ping ############################################################################## # 记录额外的 dhcp 日志,记录所有发送给 DHCP 客户端的选项(option)以及标签(tag)信息 #log-dhcp # 禁止记录日常操作日志,错误日志仍然记录。启用 log-dhcp 将覆盖下列选项。 #quiet-dhcp #quiet-dhcp6 #quiet-ra # 修改 DHCP 默认租约文件路径,默认情况下无需修改 #dhcp-leasefile=/var/lib/dnsmasq/dnsmasq.leases # (IPv6 only) #dhcp-duid=, ############################################################################## #dhcp-script= #dhcp-luascript= #dhcp-scriptuser=root #script-arp #leasefile-ro #bridge-interface=,[,] ############################################################################## # 给 DHCP 服务器指定 domain 域名信息,也可以给对应的 IP 地址池指定域名。 # 直接指定域名 # 示例:domain=thekelleys.org.uk # 子网对应的域名 # 示例:domain=wireless.thekelleys.org.uk,192.168.2.0/24 # ip范围对应的域名 # 示例:domain=reserved.thekelleys.org.uk,192.68.3.100,192.168.3.200 #domain=[,
[,local]] # 在默认情况下 dnsmasq 插入普通的客户端主机名到 DNS 中。 # 在这种情况下主机名必须唯一,即使两个客户端具有不同的域名后缀。 # 如果第二个客户端使用了相同的主机名,DNS 查询将自动更新为第二个客户端的 IP 地址。 # 如果设置了 dhcp-fqdn 选项,普通的主机名将不再插入到 DNS 中去, # 仅允许合格的具有域名后缀的主机名插入到 DNS 服务器中。 # 指定此选项需同时指定不含
地址范围的 domain 选项。 #dhcp-fqdn # 通常情况下分配 DHCP 租约后,dnsmasq 设置 FQDN 选项告诉客户端不要尝试 DDNS 更新主机名与 IP 地址。 # 这是因为 name-IP 已自动添加到 dnsmasq 的 DNS 视图中的。 # 设置此选项将允许客户端 DDNS 更新, # 在 windows 下允许客户端更新 windows AD 服务器是非常有用的。 # 参看 RFC 4702 。 #dhcp-client-update #enable-ra #ra-param=,[high|low],[[],] ############################################################################## # # TFTP 选项 # ############################################################################## # 对于绝大多数的配置,仅需指定 enable-tftp 和 tftp-root 选项即可。 # 是否启用内置的 tftp 服务器,可以指定多个逗号分隔的网络接口 #enable-tftp[=[,]] #enable-tftp #enable-tftp=enp3s0,lo # 指定 tftp 的根目录,也就是寻找传输文件时使用的相对路径,可以附加接口, #tftp-root=[,] #tftp-root=/var/lib/tftpboot/ # 如果取消注释,那么即使指定的 tftp-root 无法访问,仍然启动 tftp 服务。 #tftp-no-fail # 附加客户端的 IP 地址作为文件路径。此选项仅在正确设置了 tftp-root 的情况下可用, # 示例:如果 tftp-root=/tftp,客户端为 192.168.1.15 请求 myfile.txt 文件时, # 将优先请求 /tftp/192.168.1.15/myfile.txt 文件, 其次是 /tftp/myfile.txt 文件。 # 感觉没什么用。 #tftp-unique-root # 启用安全模式,启用此选项,仅允许 tftp 进程访问属主为自己的文件。 # 不启用此选项,允许访问所有 tftp 进程属主可读取的文件。 # 如果 dnsmasq 是以 root 用户运行,tftp-secure 选项将允许访问全局可读的文件。 # 一般情况下不推荐以 root 用户运行 dnsmasq。 # 在指定了 tftp-root 的情况下并不是很重要。 #tftp-secure # 将所有文件请求转换为小写。对于 Windows 客户端来说非常有用,建议开启此项。 # 注意:dnsmasq 的 TFTP 服务器总是将文件路径中的“\”转换为“/”。 #tftp-lowercase # 允许最大的连接数,默认为 50 。 # 如果将连接数设置的很大,需注意每个进程的最大文件描述符限制,详见文档手册。 #tftp-max= #tftp-max=50 # 设置传输时的 MTU 值,建议不设置或按需设置。 # 如果设定的值大于网络接口的 MTU 值,将按照网络接口的 MTU 值自动分片传输(不推荐)。 #tftp-mtu= # 停止 tftp 服务器与客户端协商 "blocksize" 选项。启用后,防止一些古怪的客户端出问题。 #tftp-no-blocksize # 指定 tftp 的连接端口的范围,方便防火墙部署。 # tftp 侦听在 69/udp ,连接端口默认是由系统自动分配的, # 非 root 用户运行时指定的连接端口号需大于 1025 最大 65535。 #tftp-port-range=, ############################################################################### #conf-dir=[,......] #conf-file=/etc/dnsmasq.more.conf conf-dir=/etc/dnsmasq.d #servers-file=

5、一些其它配置应用

#屏蔽网页广告,将指广告的URL指定127这个IP,就可以将网页上讨厌的广告给去掉了。
address=/ad.youku.com/127.0.0.1
address=/ad.iqiyi.com/127.0.0.1

#指定域名解析到特定的IP上。这个功能可以让你控制一些网站的访问,非法的DNS就经常把一些正规的网站解析到不正确IP上
address=/freehao123.com/123.123.123.123

#智能DNS加快解析速度,打开/etc/dnsmasq.conf文件,server=后面可以添加指定的DNS,例如国内外不同的网站使用不同的DNS。
server=/cn/114.114.114.114
server=/taobao.com/114.114.114.114
server=/taobaocdn.com/114.114.114.114

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