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