有时候需要将某个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
