docker下载安装
参考:docker安装、卸载、配置、镜像
如果是低版本的额ubuntu,比如ubuntu16.04.7 LTS,为了加快下载速度,参考:Ubuntu16.04LTS安装Docker。
docker安装dnsmasq
下载dnsmasq镜像
首先镜像我们可以选择带web页面的,也可选择不带的,这里选择带web也免的,方便不懂技术的人配置。
docker pull jpillora/dnsmasq
提前创建docker容器【dnsmasq】的外部挂载文件,避免频繁进入容器内部;
$sudo vim /opt/dnsmasq.conf
配置dnsmasq
# 解析日志
log-queries
no-resolv
# DNS解析服务器地址
server=114.114.114.114
server=8.8.8.8
server=8.8.4.4
# 定义自己的主机与ip映射,多个配置多个,这里是示例四个
address=/gitlab.congco.com/192.168.9.151
address=/db.keeep.com/192.168.9.100
address=/tbase.keeep.com/192.168.9.123
address=/keeep.com/192.168.9.123 # 解析*.keeep.com
解决53端口占用问题
在启动dnsmasq容器之前,我们需要先检查一下53端口有没有被占用;
lsof -i:53
之后大概会有三种情况:
提示被systemd-resolved服务占用
,解决办法:
sudo systemctl disable systemd-resolved.service
sudo systemctl stop systemd-resolved
提示被系统自带的dnsmasq占用,解决办法:
vim /etc/NetworkManager/NetworkManager.conf
注释dns=dnsmasq
#dns=dnsmasq
然后保存,最后重启network-manager即可
sudo restart network-manager
- 无占用,直接运行
运行dnsmasq容器
docker run \
--name dnsmasq \
-d \
-p 53:53/udp \
-p 8080:8080 \
-v /opt/dnsmasq.conf:/etc/dnsmasq.conf \
--log-opt "max-size=100m" \
-e "HTTP_USER=admin" \
-e "HTTP_PASS=admin" \
--restart always \
jpillora/dnsmasq
其中HTTP_USER和HTTP_PASS代表之后登录dns的web管理页面需要用到的账号密码,可自定义。
8080端口代表web的访问地址端口,可自定义前边的8080。
不带换行的命令
docker run --name dnsmasq -d -p 53:53/udp -p 8080:8080 -v /dnsmasq.conf:/etc/dnsmasq.conf --log-opt "max-size=100m" -e "HTTP_USER=admin" -e "HTTP_PASS=123456" --restart always jpillora/dnsmasq
web管理页面
输入IP 端口即可打开页面,比如:10.109.2.8:8080,这个IP就是装有dnsmasq的主机地址,端口就是前边启动dnsmasq容器所映射的web端口。
测试
之后其他的主机或者移动设备,都可以将本地的dns配置成刚才安装dnsmasq的主机地址了;
比如:
- Linux
vim /etc/resolv.conf
nameserver 127.0.0.1 #必填
nameserver 172.17.0.7 #必填[dns所在的本机主要网卡]
- windows
- macOS
- 移动设备
有的移动设备叫dns,有的叫域名1 域名2。
注意:上边的截图都是在网上截图的,所以看起来配置的dns地址不太一样,不影响,只需要记住DNS地址必须是安装dnsmasq服务器的IP
扩展-配置docker的DNS
当然如果我们没有其他主机或者设备,那么我们可以直接用dokcer容器来测试,容器其实也是一个完整独立的主机。
sudo vim /etc/docker/daemon.json
{
"dns":["dns服务所在的ip地址"]
}
重启docker
sudo systemctl restart docker
进入启动中的容器内部,随便一个容器即可
docker exec -it [容器名称] bash #不同系统不同容器可能进入命令不一样
ping staticmed.keeep.com #上边配置的IP映射的域名
能ping通即表示成功。