dnsmasq 介绍
DHCP
与 DNS
服务需在主路由上开启,如果用的主路由方案,可用云原生的方式部署一个 DHCP 和 DNS 服务,dnsmasq 是一个同时支持这两种功能的开源软件,我们可以用下面的方法进行部署。
docker-dnsmasq 开源项目
本文部署的 dnsmasq 服务使用这个开源项目所自动编译出的容器镜像:https://github.com/4km3/docker-dnsmasq
目录结构
代码语言:txt复制dnsmasq
├── config
│ └── dnsmasq.conf
├── daemonset.yaml
└── kustomization.yaml
配置 dnsmasq.conf
代码语言:txt复制log-queries=extra
no-resolv
no-poll
server=61.139.2.69
strict-order
log-dhcp
cache-size=2000
dhcp-range=10.10.10.11,10.10.10.254,255.255.255.0,12h
dhcp-authoritative
dhcp-leasefile=/var/lib/dnsmasq/dnsmasq.leases
dhcp-option=option:router,10.10.10.2
dhcp-option=option:dns-server,61.139.2.69,218.6.200.139
要点解析:
server
指向上游的 DNS 地址,主路由在 PPPoE 拨号后会自动获取上游 dns 地址并写到/etc/resolv.conf
,可以复制过来。dhcp-range
指定内网设备自动获取的 IP 地址范围以及子网掩码。dhcp-option=option:router
指定内网设备的默认网关,即当前主路由的内网静态 IP 地址。dhcp-option=option:dns-server
指定内网设备自动获取的 DNS 地址,通常写 dnsmasq 自身的地址,即主路由的内网静态 IP 地址,不过由于我用了透明代理,希望内网设备直接用 PPPoE 拨号获得的运营商的 DNS 地址(好处是如果透明代理故障,停掉流量拦截规则后,内网设备也能正常从运营商 DNS 解析域名)。
配置 daemonset.yaml
代码语言:yaml复制apiVersion: apps/v1
kind: DaemonSet
metadata:
labels:
app: dnsmasq
name: dnsmasq
namespace: default
spec:
selector:
matchLabels:
app: dnsmasq
template:
metadata:
labels:
app: dnsmasq
spec:
terminationGracePeriodSeconds: 3
containers:
- image: 4km3/dnsmasq:2.85-r2
imagePullPolicy: IfNotPresent
name: dnsmasq
securityContext:
privileged: true
args:
- '--log-facility=-'
volumeMounts:
- mountPath: /etc/dnsmasq.conf
name: dnsmasq-config
subPath: dnsmasq.conf
- mountPath: /var/lib/dnsmasq
name: lease
hostNetwork: true
restartPolicy: Always
volumes:
- configMap:
name: dnsmasq-config
name: dnsmasq-config
- name: lease
hostPath:
path: /data/lease
type: DirectoryOrCreate
updateStrategy:
rollingUpdate:
maxSurge: 0
maxUnavailable: 1
type: RollingUpdate
要点解析:
- 注意修改账号密码,本例使用
roc
作为账号名,111111
作为密码。 - 将要共享的目录通过 hostPath 挂载进去,本例挂载和共享
/data
目录。
配置 kustomization.yaml
代码语言:yaml title="kustomization.yaml"复制apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- daemonset.yaml
configMapGenerator:
- name: dnsmasq-config
files:
- config/dnsmasq.conf
namespace: default
参考资料
- dnsmasq 官网: https://thekelleys.org.uk/dnsmasq/doc.html