有时候需要将某个dns指向内容完成一些开发调试或者运维工作,使用dnsmasq可以简单快速的完成我们的需求

docker pull andyshinn/dnsmasq

建立工作目录

mkdir -p dnsmasq/data/dnsmasq.hosts.d
cd dnsmasq

建立配置文件

1、/etc/dnsmasq.conf

cat >> data/dnsmasq.conf << EOF
no-hosts
resolv-file=/etc/resolv.dnsmasq.conf
addn-hosts=/etc/dnsmasq.hosts
hostsdir=/etc/dnsmasq.hosts.d
EOF
  • no-hosts:不加载本地的 /etc/hosts 文件
  • resolv-file:dnsmasq会从这里找上游服务器
  • addn-hosts:添加读取额外的 hosts 文件路径,可以多次指定。如果指定为目录,则读取目录中的所有文件。
  • hostsdir:读取目录中的所有文件,文件更新将自动读取

2、/etc/resolv.dnsmasq.conf

cat > data/resolv.dnsmasq.conf << EOF
nameserver 218.30.19.50
nameserver 61.134.1.5
nameserver 8.8.8.8
EOF

3、/etc/dnsmasq.hosts

cat > data/dnsmasq.hosts << EOF
192.168.3.129 ns.getdemo.cn
192.168.3.129 aaa.getdemo.cn
EOF

4、/etc/resolv.conf

echo 'nameserver 127.0.0.1' > data/resolv.conf

建立启动脚本

cat > dnsmasq.yaml << EOF
version: "2"
services:
  dnsmasq:
    container_name: dnsmasq
    image: andyshinn/dnsmasq
    hostname: dnsmasq
    volumes:
      - ./data/dnsmasq.conf:/etc/dnsmasq.conf
      - ./data/resolv.dnsmasq.conf/:/etc/resolv.dnsmasq.conf
      - ./data/dnsmasq.hosts/:/etc/dnsmasq.hosts
      - ./data/resolv.conf/:/etc/resolv.conf
      - ./data/dnsmasq.hosts.d:/etc/dnsmasq.hosts.d
      - /etc/localtime:/etc/localtime:ro
    ports:
      - 53:53/tcp
      - 53:53/udp
    cap_add:
      - NET_ADMIN
    restart: on-failure:1
EOF

启动容器

docker-compose -f ./dnsmasq.yaml up -d

测试

C:\Users\jilili>nslookup aaa.getdemo.cn 192.168.3.129
服务器:  ns.getdemo.cn
Address:  192.168.3.129

名称:    aaa.getdemo.cn
Address:  192.168.3.129

刚才建立的dns服务器的地址是192.168.3.129

还可测试动态加载情况

cat > data/dnsmasq.hosts.d/getdemo.cn.conf << EOF
106.15.199.220 t.me
EOF

C:\Users\jilili>ping t.me

正在 Ping t.me [106.15.199.220] 具有 32 字节的数据:
来自 106.15.199.220 的回复: 字节=32 时间=32ms TTL=51

[ 编辑 | 历史 ]
最近由“jilili”在“2021-03-14 09:29:17”修改