ubuntu 禁用 dns

66 阅读1分钟

在 Ubuntu(尤其是使用 systemd-resolved 的系统,比如 18.04 以后版本)中,/etc/resolv.conf 是动态生成的,不应直接修改。要 固定 DNS(静态配置) ,你可以选择以下几种方式之一:

✅ 推荐方式二:我选择彻底禁用 systemd-resolved,改用静态 resolv.conf

如果你想完全摆脱它(比如在 K8s 控制节点上防止被 stub DNS 干扰):

  1. 停止并禁用 systemd-resolved

    sudo systemctl stop systemd-resolved
    sudo systemctl disable systemd-resolved
    
  2. 删除默认的符号链接:

    sudo rm /etc/resolv.conf
    
  3. 创建一个静态配置文件:

    sudo tee /etc/resolv.conf >/dev/null <<EOF
    nameserver 8.8.8.8
    nameserver 1.1.1.1
    search default.svc.cluster.local svc.cluster.local localdomain
    options timeout:1 attempts:1
    EOF
    
  4. 为防止被自动改写,可加上 immutable 属性:

    sudo chattr +i /etc/resolv.conf
    

    这样任何服务都不能再修改它(要修改时需先执行 sudo chattr -i /etc/resolv.conf)。



✅ 推荐方式一:通过 /etc/systemd/resolved.conf 固定 DNS

  1. 编辑配置文件:

    sudo vim /etc/systemd/resolved.conf
    
  2. [Resolve] 段中取消注释并设置:

    [Resolve]
    DNS=8.8.8.8 1.1.1.1
    FallbackDNS=9.9.9.9
    Domains=cluster.local
    

    ⚠️ DNS= 是你要固定的上游 DNS 地址;
    FallbackDNS= 是备用 DNS。

  3. 重启 systemd-resolved

    sudo systemctl restart systemd-resolved
    
  4. 确认生效:

    resolvectl status
    cat /etc/resolv.conf
    

    看到 nameserver 127.0.0.53 是正常的,只要 resolvectl status 里显示你设定的上游 DNS。


✅ 可选方式三:NetworkManager(桌面系统常见)

如果你的机器用的是 NetworkManager(nmcli 命令可用):

sudo nmcli connection modify "Wired connection 1" ipv4.dns "8.8.8.8 1.1.1.1"
sudo nmcli connection modify "Wired connection 1" ipv4.ignore-auto-dns yes
sudo nmcli connection up "Wired connection 1"

🚀 建议(针对 K8s 控制节点)

在 Kubernetes 环境下(例如你这台 k8s-ctrl 节点):

  • 禁用 systemd-resolved 更稳妥;
  • 确保 /etc/resolv.conf 中的 nameserver 指向实际可解析外部域名的 DNS;
  • 避免 127.0.0.53 因 stub resolver 出现 DNS 解析失败或延迟。

是否要我帮你生成一个一键脚本,把 DNS 固定到比如 8.8.8.8 并禁用 systemd-resolved?