Skip to content

配置 DNS 和 DHCP

SgrAlpha edited this page Oct 4, 2019 · 4 revisions

这里我们使用 dnsmasq 来担任 DNS 以及 DHCP 的角色,当然也可以用 isc-dhcp-server 来做 DHCP,可以按照个人喜好来定。

配置 dnsmasq

  1. 安装 dnsmasq
sudo apt update && sudo apt install dnsmasq -y
  1. 打开并编辑其配置文件:
sudo vi /etc/dnsmasq.conf
  1. 将内容替换成:
# 默认情况下 dnsmasq 会并发查询所有定义了上游 DNS,这里先改成按照制定顺序
strict-order
# 添加若干上游 DNS 服务器
server=223.5.5.5#53
server=223.6.6.6#53
server=119.29.29.29#53
server=119.28.28.28#53
# 提供 DNS 服务的网卡,通常情况我们不需要为外网提供 DNS 服务,所以打开内网网卡即可
# interface=enp2s0f0   # Public ethernet interface
interface=ens9       # Internal ethernet interface
# 能用来收取 DNS 请求的 IP 地址,这里要加上内网网卡的 IP 和本地 IP
# listen-address=10.1.100.1    # IP from public ethernet interface
listen-address=192.168.3.1   # IP from internal ethernet interface
listen-address=127.0.0.1     # Local IP
# 禁止 dnsmasq 为外网网卡提供 DHCP 服务,否则会干扰外网网卡运行
no-dhcp-interface=enp2s0f0
# 绑定到网卡
bind-interfaces
# 设置 DHCP 服务能够分配的 IP 地址段,需要与 netplan 中的地址在同一个网段
dhcp-range=192.168.3.50,192.168.3.150,24h
  1. 保存并重启服务
sudo systemctl restart dnsmasq.service

关闭 systemd-resolved

本来配完 dnsmasq 就应该差不多了,但是重启过几次之后就遇到了莫名的 DNS 无法解析的问题,查了半天居然是 systemd-resolved 搞的鬼,关掉!

  1. 运行下面的命令:
sudo systemctl disable systemd-resolved.service
sudo service systemd-resolved stop
sudo rm /etc/resolv.conf
echo "nameserver 127.0.0.1" | sudo tee /etc/resolv.conf
  1. 打开 Network Manager 的配置文件:
sudo vi /etc/NetworkManager/NetworkManager.conf

如果是空的就不用管,里面有东西的话,替换或者修改成如下形式:

[main]
dns=default