DNSmasq

https://www.debian.org/releases/stable/amd64/ch04s05.zh-cn.html https://www.colben.cn/post/pxe-dnsmasq/ https://mirrors.tuna.tsinghua.edu.cn/debian/dists/bookworm/main/installer-amd64/current/images/netboot/ https://taoshu.in/unix/qemu-bridge-on-macos.html#google_vignette inetd 启动 tftpd

参考:https://wiki.archlinux.org/title/Dnsmasq_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)

可以用 dnsmasq 做一个自己的 dns 服务器, 有个好处就是通过编辑本机的 /etc/hosts 可以支持自定义的负载均衡, 自定义 ttl 和反向解析功能.

开启 dnsmasq

/etc/dnsmasq.conf

no-resolv
no-poll
no-hosts
server=114.114.114.114
server=8.8.8.8
interface=lo
bind-interfaces
dns-forward-max=1000
cache-size=10000

or

local-ttl=30
no-poll
no-resolv
server=8.8.4.4
server=8.8.8.8
server=114.114.114.114
dns-forward-max=1000
cache-size=10000
address=/s/192.168.88.3

如果是打算利用 hosts 文件, ttl 建议设置.

DNS 指向本地:

vi /etc/resolv.conf
nameserver 127.0.0.1

重新载入 /etc/hosts

kill -SIGHUP $(cat /var/run/dnsmasq.pid)

查看当前状态:

kill -SIGUSR1 $(cat /var/run/dnsmasq.pid) && sleep 0.1 && tail /var/log/messages

运维建议

所有的服务器都指向一台自定义的 dns 服务器:

vi /etc/resolv.conf
nameserver 119.23.106.10

# 选配, 不让 NetworkManager 自动设置 /etc/resolv.conf
vi /etc/NetworkManager/NetworkManager.conf
[main]
dns=none

然后删掉或清空 /etc/hostname, 这样主机名就会直接参考 dns 给的结果, 方便统一管理.

另, /etc/sysconfig/networkHOSTNAME 字段会干扰主机名, 建议删掉.

增加几条客户机永久修改DNS地址的方法

配置ip地址文件 /etc/sysconfig/network-scripts/ifcfg-ethXXX 添加

DNS1=8.8.8.8

/etc/resolv.conf 会自动添加地址。

手动编辑 /etc/resolv.conf

nameserver 8.8.8.8

配置ip地址文件 /etc/sysconfig/network-scripts/ifcfg-ethXXX 添加

PEERDNS=no    # 添加后不会去打扰 /etc/resolv.conf 文件

实践中, 方案 2 比较好, 方案 1 会添加 search 字段, 有点问题.

后面发现 PEERDNS=no 的方案并不能阻止 search 的自动添加, 猜测是系统获取到 domain name 时, 自己取后缀添加的, 如 1.this.is.suffix 对应 search this.is.suffix.

network-scripts/ifcfg-ethXXX 的配置见 https://www.centos.org/docs/5/html/Deployment_Guide-en-US/s1-networkscripts-interfaces.html

/etc/resolv.conf

nameserver 不用多说, 说说 search 这个字段.

如果这个字段指定了, 就会自动补全你的解析域名, 比如我们设置:

search tyio.net

你解析 x, 系统发现不是个有意义的域名(尽管 DNS 服务器的 hosts 有配置), 就会补全为 x.tyio.net 并解析.

这个 search 用好了, 会很方便.

dnsmasq 也可以下发这个配置:

domain=svc.c

如果需要多个 search 字段:

dhcp-option=option:domain-search,q.svc.c,dev.svc.c,test.svc.c,svc.c

DNS 本地缓存

Linux 本身是没有 dns 缓存的, 想使用 dns 缓存的话需要自己安装 NSCD, 自己去网上找资料吧. 其实我觉得没缓存也好, 除非你请求 dns 非常频繁.

过滤不良 hosts

可通过自定义 hosts,达到屏蔽某些域名的效果,屏蔽列表参考: https://github.com/StevenBlack/hosts

local-ttl=30
no-poll
no-resolv
server=114.114.114.114
cache-size=10000
# from https://github.com/StevenBlack/hosts
addn-hosts=/etc/hosts-black

特定域名

启用特定域名的自定义 DNS。例如: server=/example1.com/exemple2.com/1.1.1.1

也见 https://github.com/imp/dnsmasq/blob/master/dnsmasq.conf.example#L66