小主机网络管理自动化方案 —— 技术文档

小主机网络管理自动化方案 —— 技术文档 # 小主机网络管理自动化方案 —— 技术文档 --- ## 1. 项目概述 本项目为一台运行 **Ubuntu Server 26.04** 的迷你主机实现以下功能 - **网络连接优先级**优先连接手机热点WiFi热点不可用时自动连接其他可用网络如家中WiFi。所有网络均使用 **DHCP 自动获取 IP 地址**无需手动配置静态IP。 - **内网主机名访问**通过 主机名.local 访问小主机服务不依赖具体 IP 地址。 - **自动发送网络信息**每次成功连接新网络后等待 5 分钟将完整的 ip addr 信息发送至指定邮箱方便远程知晓当前网络状态。 --- ## 2. 环境准备 ### 2.1 系统信息 - **操作系统**Ubuntu Server 26.04 LTS - **网络管理**NetworkManager替换系统默认的 systemd-networkd - **邮件发送**msmtp通过阿里云企业邮箱 sendinfoxxx.com 发送 - **收件邮箱**bellusxxx.com接收 IP 信息 ### 2.2 所需软件包 bash sudo apt update sudo apt install network-manager msmtp msmtp-mta avahi-daemon -y网络优先级配置3.1 将 Netplan 渲染器切换为 NetworkManager编辑 /etc/netplan/00-installer-config.yamlnetwork:version:2renderer:NetworkManager应用配置sudonetplan applysudosystemctl restart NetworkManager3.2 设置连接优先级DHCP 自动获取 IP所有 WiFi 连接均采用 DHCP 自动获取 IP无需手动设置静态地址。只需调整 NetworkManager 中各个连接的自动连接优先级。查看已有连接nmcli connection show将手机热点优先级设为最高如 999其他 WiFi 设为负值如 -999nmcli connection modify手机热点SSIDconnection.autoconnectyesconnection.autoconnect-priority999nmcli connection modify家中WiFi名称connection.autoconnectyesconnection.autoconnect-priority-999说明系统会根据优先级高低自动选择可用网络优先连接高优先级的 WiFi。所有连接均通过 DHCP 获取 IP无需额外配置。主机名访问配置mDNS安装 Avahi 服务mDNS 支持sudoaptinstallavahi-daemonsudosystemctlenable--nowavahi-daemon确认主机名例如 my-minihostname在同一局域网内其他设备即可通过 my-mini.local 访问小主机无需关心 IP 变化。防火墙放行 mDNS5353/udpsudoufw allow5353/udp自动发送 IP 信息邮件5.1 配置 msmtp邮件发送客户端创建 /etc/msmtprc权限 600sudonano/etc/msmtprc内容如下将 新密码 替换为阿里云企业邮箱的客户端专用密码defaults auth on tls on tls_starttls off tls_trust_file /etc/ssl/certs/ca-certificates.crt account aliyun host smtp.qiye.aliyun.com port 465 from sendinfoxxx.com user sendinfoxxx.com password 新密码 account default : aliyun设置权限sudochmod600/etc/msmtprc测试发送使用 -t 从头部读取收件人echo-eFrom: sendinfoxxx.com\nTo: bellusxxx.com\nSubject: Test\n\nTest body|msmtp-aaliyun-t5.2 创建 IP 信息发送脚本文件 /usr/local/bin/send_ip_email.sh#!/bin/bashHOSTNAME$(hostname)CURRENT_TIME$(date%Y-%m-%d %H:%M:%S)IP_INFO$(/usr/sbin/ip addr)/usr/bin/msmtp-aaliyun-tEOF From: sendinfoxxx.com To: bellusxxx.com Subject: 【小主机IP信息】$HOSTNAME-$CURRENT_TIMEMIME-Version: 1.0 Content-Type: text/plain; charsetUTF-8 Auto-Submitted: auto-generated 小主机:$HOSTNAME连接时间:$CURRENT_TIME------------------------$IP_INFOEOF赋予执行权限sudochmodx /usr/local/bin/send_ip_email.sh手动测试应能收到邮件sudo/usr/local/bin/send_ip_email.sh5.3 配置 NetworkManager 触发脚本NetworkManager 的 Dispatcher 脚本会在网络状态变化时执行。创建 /etc/NetworkManager/dispatcher.d/99-wifi-connectsudonano/etc/NetworkManager/dispatcher.d/99-wifi-connect内容如下只针对 WiFi 接口触发#!/bin/bashINTERFACE$1STATUS$2if[[$INTERFACE~^wlan|^wlp]];thenif[$STATUSup];then(sleep300# 5分钟ifnmcli-t-fDEVICE,STATE device status|grep-q^${INTERFACE}:connected$;thenloggerWiFi 连接稳定发送 IP 信息邮件/usr/local/bin/send_ip_email.shelseloggerWiFi 在等待期间断开取消发送fi)fifi赋予执行权限sudochmodx /etc/NetworkManager/dispatcher.d/99-wifi-connect重启 NetworkManagersudosystemctl restart NetworkManager此后每次 WiFi 连接成功包括开机自动连接、手动重连、切换网络等待 5 分钟后都会自动发送一封包含最新 ip addr 信息的邮件到 bellusxxx.com。故障排查指南现象 排查步骤网络优先级未生效 检查 nmcli connection show 中各连接的 autoconnect-priority 值确保热点优先值最高重启 NetworkManager。主机名无法解析 确认 Avahi 运行systemctl status avahi-daemon检查防火墙是否放行 5353/udpWindows 需安装 Bonjour。IP邮件未收到 ① 手动执行脚本 sudo /usr/local/bin/send_ip_email.sh 测试② 查看 /var/log/mail.log 看 msmtp 报错③ 确认 msmtp 配置正确密码、服务器。Dispatcher 未触发 查看 journalctl -u NetworkManager -f 观察是否有日志确认脚本权限 x检查文件名无后缀如 .sh。邮件内容为空或不完整 确认 ip 命令路径which ip修改脚本中的路径检查邮件头格式是否完整。附录7.1 主要文件清单文件路径 用途/etc/msmtprc msmtp 邮件发送客户端配置/usr/local/bin/send_ip_email.sh 发送 IP 信息邮件脚本/etc/NetworkManager/dispatcher.d/99-wifi-connect NetworkManager 触发脚本自动发送7.2 常用命令· 手动触发 IP 邮件发送sudo /usr/local/bin/send_ip_email.sh· 查看 NetworkManager 日志sudo journalctl -u NetworkManager -f· 查看邮件发送日志sudo tail -f /var/log/mail.log· 查看当前连接状态nmcli connection show --active7.3 安全注意事项· 邮箱授权码存储在 /etc/msmtprc 中务必设置权限 600已配置仅允许 root 读取。· 如果将来需要添加其他通知渠道如微信可直接在 send_ip_email.sh 中追加 curl 命令与邮件互不干扰。文档版本1.2最后更新2026-07-12变更说明邮箱地址替换为通用占位符sendinfoxxx.com / bellusxxx.com