用 Docker 在局域网中部署 dnsmasq 缓存 DNS 加速网络访问

This page is also available in: English

公共 DNS 服务会对用户的使用进行限流,这会导致访问一些网页时加载时间过长,甚至无法访问。

为了解决这个问题,可以在内网服务器(或路由器)中部署一个 dnsmasq 来进行 DNS 记录缓存,访问过的网址会被自己缓存,当下次再访问的时候就可以非常快的完成 IP 解析,从而加快网页的打开速度。

dnsmasq 是一个轻量级的网络服务工具,主要用于提供 DNS 和 DHCP 服务。它通常用于小型网络环境,比如家庭网络或小型办公室。

假设你的内网服务器(192.168.1.8)已经安装了 Docker,使用下面的 Docker Compose 配置文件即可启动 dnsmasq 容器。

services:
  dnsmasq:
    image: dockurr/dnsmasq
    container_name: dnsmasq
    environment:
      DNS1: "114.114.114.114"
      DNS2: "8.8.8.8"
    ports:
      - 53:53/udp
      - 53:53/tcp
    cap_add:
      - NET_ADMIN

其中,DNS1 和 DNS2 是上游 DNS,可以根据实际需要进行修改。

# 创建容器
sudo docker compose up -d

如果没有报错,则代表 dnsmasq 容器部署成功,也可以使用以下命令查看容器状态:

# 需要确保在 docker-compose.yml 文件所在目录执行命令
sudo docker compose logs -f

53 端口被占用的解决

对于 Linux 服务器,比如 Ubuntu server,可能 53 号端口已经被 systemd-resolved 服务占用,解决方法是停用该服务,并创建新的 /etc/resolve.conf 文件,将 nameserver 指向 127.0.0.1 。

# 禁用 systemd-resolved 服务
sudo systemctl disable systemd-resolved
# 停止服务
sudo systemctl stop systemd-resolved
# 备份 resolve.conf 文件
sudo mv /etc/resolve.conf /etc/resolve.bak
# 创建新的 resolve.conf 文件
echo "nameserver 127.0.0.1" | sudo tee /etc/resolv.conf

使用 dnsmasq 服务器

dnsmasq 部署完毕,将路由器的 DNS 修改为内网服务器的 IP 地址,比如:

这样一来,所有连接到这个路由器的设备都会自动使用 dnsmasq 进行 DNS 解析。

虽然,对于从未访问过的网址(没有缓存)的初次访问仍然可能会在解析环境出现访问缓慢的问题,但是只要 dnsmasq 完成了初次解析,再之后的访问都会非常的快的完成解析。

本文发布于 2024-08-17,最近更新 2024-09-23

本文版权归 torchtree.com 网站所有,未经授权不可转载。