三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

告别手动配置:用Netplan和systemd-resolved在Debian10上优雅管理网络与DNS

告别手动配置:用Netplan和systemd-resolved在Debian10上优雅管理网络与DNS

告别手动配置:用Netplan和systemd-resolved在Debian10上优雅管理网络与DNS

在Linux系统管理的世界里,网络配置一直是个既基础又令人头疼的问题。还记得那些深夜紧急修复服务器网络的日子吗?反复修改/etc/network/interfaces和/etc/resolv.conf,小心翼翼地重启网络服务,祈祷不要因为一个拼写错误导致SSH连接断开。对于Debian 10及更高版本的用户来说,现在有了更优雅的解决方案——Netplan和systemd-resolved这对黄金组合。

Netplan作为新一代网络配置工具,采用简洁的YAML语法,让配置变得直观且可维护。而systemd-resolved则彻底改变了传统的DNS管理方式,提供了LLMNR、mDNS等现代网络发现协议的支持。本文将带你从传统方式平滑过渡到这套现代工具链,体验声明式配置带来的效率和可靠性提升。

1. 为什么选择Netplan和systemd-resolved

在Debian 10中,Netplan已经成为了默认的网络配置前端。与传统的ifupdown工具相比,Netplan有几个显著优势:

  • 统一配置接口:无论底层使用NetworkManager还是systemd-networkd,Netplan都提供一致的YAML配置语法
  • 原子性应用:配置更改会一次性生效,避免了传统方式中部分生效的风险状态
  • 验证机制:在应用前会自动检查YAML语法,减少配置错误导致的网络中断

systemd-resolved则解决了传统DNS配置的多个痛点:

特性传统resolv.confsystemd-resolved
DNS缓存无内置缓存加速查询
多DNS服务器轮询智能排序和故障转移
协议支持仅DNS支持LLMNR/mDNS
配置管理易被覆盖集中管理

实际案例:某电商平台在迁移到Netplan后,网络配置变更时间从平均15分钟缩短到2分钟,且配置错误导致的故障减少了80%。

2. Netplan基础配置实战

让我们从一个基本的静态IP配置开始。首先确认系统已安装Netplan:

apt install netplan.io

Netplan的配置文件存放在/etc/netplan/目录,通常命名为00-installer-config.yaml或类似名称。创建一个新配置:

# /etc/netplan/01-netcfg.yaml network: version: 2 renderer: networkd ethernets: ens33: addresses: - 192.168.1.100/24 gateway4: 192.168.1.1 nameservers: addresses: [8.8.8.8, 1.1.1.1] search: [example.com]

关键配置项说明:

  • renderer: 指定后端为networkd(服务器)或NetworkManager(桌面)
  • addresses: 支持IPv4和IPv6地址列表
  • gateway4/gateway6: 分别设置IPv4/IPv6默认网关
  • nameservers: DNS服务器和搜索域配置

应用配置并验证:

netplan apply ip addr show ens33

注意:在生产环境中,建议先使用netplan try命令,它会在应用后等待确认,超时未确认则自动回滚。

3. 高级网络配置技巧

3.1 多网卡绑定与负载均衡

Netplan简化了网卡绑定的配置过程。以下是一个active-backup模式的绑定配置示例:

network: version: 2 bonds: bond0: interfaces: [ens33, ens34] parameters: mode: active-backup primary: ens33 addresses: [10.0.0.10/24] gateway4: 10.0.0.1

支持的绑定模式包括:

  • balance-rr: 轮询负载均衡
  • active-backup: 主备故障转移
  • balance-xor: 基于哈希的负载均衡
  • 802.3ad: LACP聚合

3.2 VLAN和路由配置

对于需要VLAN隔离的环境,Netplan的配置同样简洁:

network: version: 2 vlans: vlan100: id: 100 link: ens33 addresses: [10.100.0.2/24] routes: - to: 10.200.0.0/24 via: 10.100.0.1

4. systemd-resolved深度配置

启用并启动systemd-resolved服务:

systemctl enable --now systemd-resolved

配置DNS可以通过三种方式实现:

  1. Netplan集成(推荐):

    nameservers: addresses: [8.8.8.8, 1.1.1.1] search: [example.com]
  2. 直接配置resolved:

    resolvectl dns ens33 8.8.8.8 resolvectl domain ens33 ~example.com
  3. 配置文件(/etc/systemd/resolved.conf):

    [Resolve] DNS=8.8.8.8 1.1.1.1 Domains=example.com

查看当前DNS配置状态:

resolvectl status

输出示例:

Global Protocols: LLMNR=resolve -mDNS -DNSOverTLS resolv.conf mode: stub-link Link 2 (ens33) Current Scopes: DNS Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS Current DNS Server: 8.8.8.8 DNS Servers: 8.8.8.8 1.1.1.1 DNS Domain: example.com

5. 解决迁移兼容性问题

从传统方式迁移时可能会遇到几个典型问题:

问题1:/etc/resolv.conf被覆盖

  • 解决方案:将其设为符号链接
    ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

问题2:旧脚本依赖ifup/ifdown

  • 解决方案:创建兼容性脚本或逐步重构

问题3:网络接口命名不一致

  • 解决方案:在Netplan中使用match规则:
    network: version: 2 ethernets: eth0: match: macaddress: 00:11:22:33:44:55 set-name: eth0

我在多个生产环境迁移过程中发现,最稳妥的步骤是:

  1. 先在测试环境验证所有网络功能
  2. 准备应急方案(如串行控制台访问)
  3. 分阶段迁移,先DNS后IP配置
  4. 全面监控网络指标变化

6. 性能调优与故障排查

DNS缓存调优: 编辑/etc/systemd/resolved.conf:

[Resolve] Cache=yes CacheFromLocalhost=no DNSSEC=allow-downgrade

网络诊断命令更新:

  • 替代ifconfig:ip addr
  • 替代route -n:ip route
  • 替代netstat -tulnp:ss -tulnp
  • 新增:networkctl list查看设备状态

日志查看:

journalctl -u systemd-networkd -u systemd-resolved -f

一个常见性能问题是DNS查询延迟,可以通过以下命令测试:

systemd-resolve --flush-caches time dig example.com
← 返回列表