云原生家庭网络(四):部署 dnsmasq 启用 DHCP 与 DNS 缓存

2024-05-16 09:32:25 浏览数 (1)

dnsmasq 介绍

DHCPDNS 服务需在主路由上开启,如果用的主路由方案,可用云原生的方式部署一个 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

0 人点赞