更换公网 IP 地址(不停机方法)
本教程介绍如何在不停止虚拟机的情况下更换公网 IP 地址。这种方法适合需要保持服务持续运行的生产环境。
更换场景:
- 需要更改 IP 分配方式(动态改为静态)
- 需要更改路由首选项(Internet 改为 Microsoft 网络)
- IP 地址被列入黑名单,需要更换
- 需要使用预留的特定 IP 地址
- 配置错误需要重新分配
2. 前置准备
Section titled “2. 前置准备”更换 IP 的影响:
- 虚拟机的公网访问地址会变化
- 正在进行的 SSH/RDP 连接会短暂中断(约 10-30 秒)
- 新连接需要使用新 IP 地址
- DNS 记录需要更新
- 防火墙规则可能需要调整
操作前必须做:
- 记录当前 IP 地址和配置
- 准备好更新 DNS 记录的流程
- 通知相关人员 IP 即将变更
- 选择业务相对空闲的时段操作
- 确保有备用连接方式(如 Azure Serial Console)
检查当前配置
Section titled “检查当前配置”- 登录 Azure Portal (portal.azure.com)
- 搜索并进入你的虚拟机
- 在左侧菜单选择”网络”或”网络设置”
- 记录以下信息:
- 当前公网 IP 地址
- IP 分配方式(动态/静态)
- SKU 类型(基本/标准)
- 路由首选项
- 网络接口名称

3. 不停机更换 IP 完整步骤
Section titled “3. 不停机更换 IP 完整步骤”步骤 1:创建新的公网 IP 地址
Section titled “步骤 1:创建新的公网 IP 地址”在分离旧 IP 之前,先创建好新的 IP,这样可以最小化服务中断时间。
- 在 Azure Portal 顶部搜索框输入”公共 IP 地址”
- 点击”公共 IP 地址”服务(注意IP前后有空格)
- 点击”+ 创建”按钮


配置新 IP 地址:
基本信息选项卡:
- 订阅:选择与虚拟机相同的订阅
- 资源组:选择与虚拟机相同的资源组
- 区域:必须与虚拟机所在区域完全一致(非常重要)
- 名称:输入有意义的名称,例如
vm-ubuntu-new-public-ip - IP 版本:选择 IPv4
- SKU:选择”标准”(推荐)
- 可用性区域:根据虚拟机配置选择
- 分配:选择”静态”(强烈推荐)




高级选项(如果区域支持):
- 路由首选项:选择”Microsoft 网络”(生产环境推荐)
- 空闲超时(分钟):保持默认 4 分钟
- 其他选项保持默认
注意: 如果遇到”RegionNotEnabledForRoutingPreferenceFeature”错误,不要配置路由首选项,使用默认设置即可。
- 点击”审阅 + 创建”
- 检查配置摘要
- 点击”创建”
- 等待部署完成(通常 10-30 秒)

记录新 IP 地址:
- 部署完成后,点击”转到资源”
- 记录新分配的 IP 地址(例如:20.205.123.45)

步骤 2:进入网络接口配置
Section titled “步骤 2:进入网络接口配置”- 返回虚拟机页面(搜索你的虚拟机名称)
- 在左侧菜单中选择”网络”或”网络设置”
- 找到”网络接口”部分
- 点击网络接口名称(通常格式为
vm-name123或vm-name-nic)

这会打开网络接口的配置页面。
步骤 3:准备更换 IP
Section titled “步骤 3:准备更换 IP”在网络接口页面:
- 在左侧菜单中找到并点击”IP 配置”
- 你会看到当前的 IP 配置列表(通常有一个名为
ipconfig1的配置) - 点击该 IP 配置名称(
ipconfig1)

步骤 4:分离旧 IP 并关联新 IP
Section titled “步骤 4:分离旧 IP 并关联新 IP”这是关键步骤,操作时会有短暂的网络中断(10-30 秒)。
在 IP 配置编辑页面:
查看当前配置:
- 确认”私有 IP 地址设置”部分
- 找到”公共 IP 地址”部分
更换公网 IP:
- 在”公共 IP 地址”部分,找到”关联公共 IP 地址”选项
- 确保该选项是”启用”状态
- 点击”公共 IP 地址”下拉菜单
- 当前显示的是旧 IP 的名称
- 从下拉菜单中选择刚才创建的新 IP(
vm-ubuntu-new-public-ip)

重要提示:
- 确保下拉列表中只显示同一区域的 IP
- 如果看不到新创建的 IP,刷新页面或检查区域是否匹配
- 确认 SKU 类型匹配(标准对标准,基本对基本)
- 点击页面顶部的”保存”按钮
- 等待配置保存(约 10-30 秒)

期间发生的事情:
- Azure 会先分离旧的公网 IP
- 然后立即关联新的公网 IP
- 虚拟机保持运行状态
- 现有 SSH 连接会断开
- 虚拟机内部的进程继续运行
步骤 5:验证新 IP 生效
Section titled “步骤 5:验证新 IP 生效”配置保存完成后:
- 返回虚拟机的”概述”页面
- 在”基本信息”部分找到”公共 IP 地址”
- 确认显示的是新的 IP 地址

测试网络连接:
使用新 IP 地址进行 SSH 连接测试:
# 使用新 IP 连接ssh -i /path/to/private-key.pem azureuser@<新的公网IP地址>
# 例如ssh -i ~/.ssh/azure-key.pem azureuser@20.205.123.45如果连接失败,检查:
- 网络安全组(NSG)规则是否允许你的源 IP
- SSH 密钥是否正确
- 用户名是否正确
- 等待 1-2 分钟后重试(DNS 传播)
步骤 6:清理旧的公网 IP
Section titled “步骤 6:清理旧的公网 IP”新 IP 验证成功后,可以删除旧的公网 IP 以节省成本。
查找旧 IP:
- 在 Azure Portal 搜索”公共 IP 地址”
- 找到旧的 IP 地址(通过名称或 IP 地址识别)
- 点击进入该 IP 的详情页面
- 确认”关联到”字段显示为”无”或空白(说明已经分离)

删除旧 IP:
- 在旧 IP 的页面顶部点击”删除”按钮
- 在确认对话框中输入 IP 名称或点击”是”
- 等待删除完成
注意: 如果无法删除,可能是:
- 仍然被某个资源关联(等待几分钟后重试)
- 权限不足(联系管理员)
或者保留旧 IP:
如果你想保留旧 IP 作为备用:
- 不删除该 IP
- 未来可以重新关联到其他虚拟机或负载均衡器
- 保留的 IP 会持续产生费用(约 $3.6/月)
4. 添加安全组规则
Section titled “4. 添加安全组规则”添加ICMP-IPv4协议,允许ping VM。


5. 单网卡绑定多个IP
Section titled “5. 单网卡绑定多个IP”-
回到VM网络设置

-
创建IP配置文件,并选择关联IP

-
添加成功

-
查看结果


-
操作系统配置
此时操作系统还没有识别第二个公网IP和私网IP;需要手动配置;以Ubuntu 24为例;
当前配置。网卡eth0只有一个172.16.0.4/24的内网IP地址。
...2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 7c:1e:52:7a:e8:ff brd ff:ff:ff:ff:ff:ff inet 172.16.0.4/24 metric 100 brd 172.16.0.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::7e1e:52ff:fe7a:e8ff/64 scope link valid_lft forever preferred_lft forever...临时方法
这种方法重启虚拟机就会失效。
执行命令
sudo ip addr add 172.16.0.5/24 dev eth0查看结果。成功添加第二个私有IP到eth0网卡。此时第二个公网IP也可以正常使用了。可以ping或者通过SSH地址登录。
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 7c:1e:52:7a:e8:ff brd ff:ff:ff:ff:ff:ff inet 172.16.0.4/24 metric 100 brd 172.16.0.255 scope global eth0 valid_lft forever preferred_lft forever inet 172.16.0.5/24 scope global secondary eth0 valid_lft forever preferred_lft forever inet6 fe80::7e1e:52ff:fe7a:e8ff/64 scope link valid_lft forever preferred_lft forever永久方法
Ubuntu使用Netplan来管理网络。因此需要修改其配置文件。
- 备份现有配置
# 查看现有 Netplan 配置文件ls -la /etc/netplan/
# 备份配置文件sudo mv /etc/netplan/50-cloud-init.yaml /etc/netplan/50-cloud-init.yaml.backup- 编辑Netplan配置
# 使用nano或vim编辑器sudo nano /etc/netplan/50-cloud-init.yaml添加以下内容
network: version: 2 ethernets: eth0: dhcp4: false # 如果为true,则表示主IP从DHCP分配,需要删除主内网IP;如果为false,则表示均为手动配置,保留主内网IP。 dhcp6: false match: driver: hv_netvsc set-name: eth0 addresses: - 172.16.0.4/24 # 主 IP - 172.16.0.5/24 # 第二个 IP routes: - to: 0.0.0.0/0 via: 172.16.0.1 # 默认网关- 验证配置
sudo netplan try
# 按回车确认,成功后会显示Configuration accepted.- 应用配置
sudo netplan apply
# 查看新配置ip addr
# 输出...2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 7c:1e:52:7a:e8:ff brd ff:ff:ff:ff:ff:ff inet 172.16.0.4/24 brd 172.16.0.255 scope global eth0 valid_lft forever preferred_lft forever inet 172.16.0.5/24 brd 172.16.0.255 scope global secondary eth0 valid_lft forever preferred_lft forever inet6 fe80::7e1e:52ff:fe7a:e8ff/64 scope link valid_lft forever preferred_lft forever...6. 多网卡绑定多个IP
Section titled “6. 多网卡绑定多个IP”采用跨子网的方式;即一个VM同时配置两个网卡,每个网卡连接不同的子网;
- 创建新的子网:在顶部搜索虚拟网络

- 子网名称:子网名称修改后,其他保持默认即可;
- 起始地址:可根据需要修改,也可保持默认;

- 创建网络接口

- 配置网络接口

- 名称:填写网络接口名称
- 子网:选择一个新的子网
- 公共入站端口:选择需要开放的端口


- 验证结果


可以重复上面的步骤,对新的网卡附加公网IP地址;

7. 扩展阅读
Section titled “7. 扩展阅读”- 单网卡多IP:每个网卡的可以最多绑定256个IP;但默认配额10个
- 多网卡(多子网)多IP:每个VM可以绑定65536个网卡;
8. 操作后的必要步骤
Section titled “8. 操作后的必要步骤”1. 更新 DNS 记录
Section titled “1. 更新 DNS 记录”如果你使用域名指向虚拟机,必须立即更新 DNS 记录:
A 记录更新示例:
域名:example.com旧记录:example.com -> 13.67.45.123(旧IP)新记录:example.com -> 20.205.123.45(新IP)操作步骤:
- 登录你的 DNS 服务商(如 Cloudflare、GoDaddy、Azure DNS)
- 找到对应的 A 记录
- 修改 IP 地址为新 IP
- 保存更改
DNS 传播时间:
- 通常 5 分钟到 1 小时
- 最长可能需要 24-48 小时
- 期间部分用户可能访问旧 IP(会失败)
2. 更新网络安全组规则
Section titled “2. 更新网络安全组规则”如果你的 NSG 规则中硬编码了 IP 地址,需要更新:
- 进入虚拟机的”网络”设置
- 查看入站和出站规则
- 如有引用旧 IP 的规则,更新为新 IP
- 保存更改
常见需要更新的规则:
- 源 IP 地址限制
- 目标 IP 地址限制
- 应用程序安全组规则
3. 更新防火墙白名单
Section titled “3. 更新防火墙白名单”如果其他系统需要访问此虚拟机:
- 通知相关团队更新防火墙规则
- 更新第三方服务的 IP 白名单
- 更新 API 调用方的配置
- 更新数据库访问白名单
4. 更新文档和配置
Section titled “4. 更新文档和配置”维护准确的运维文档:
- 更新 IP 地址清单
- 更新网络拓扑图
- 更新运维手册
- 更新应用配置文件(如有硬编码 IP)
- 更新监控系统的 IP 地址
- 更新告警规则
5. 验证应用功能
Section titled “5. 验证应用功能”确保应用在新 IP 下正常工作:
- 测试 Web 服务访问
- 测试 API 端点
- 测试数据库连接
- 测试文件传输
- 检查应用日志
- 验证监控指标
9. 常见问题和解决方案
Section titled “9. 常见问题和解决方案”问题 1:下拉菜单中找不到新创建的 IP
Section titled “问题 1:下拉菜单中找不到新创建的 IP”可能原因:
- 新 IP 与虚拟机不在同一区域
- 新 IP 与虚拟机的 SKU 不匹配
- 页面缓存未刷新
解决方法:
-
确认区域匹配:
- 检查虚拟机区域:概述页面的”位置”字段
- 检查新 IP 区域:IP 详情页面的”位置”字段
- 两者必须完全一致
-
确认 SKU 匹配:
- 如果虚拟机使用标准负载均衡器,IP 必须是标准 SKU
- 基本 SKU 的 IP 不能用于标准负载均衡器
-
刷新页面:
- 按 F5 刷新浏览器
- 或关闭页面重新进入
问题 2:保存时提示错误
Section titled “问题 2:保存时提示错误”错误示例:
PublicIPAndLoadBalancerSkuMismatchCannot associate Standard SKU public IP with Basic SKU load balancer解决方法:
- 删除错误的 IP
- 创建匹配 SKU 的新 IP
- 如果虚拟机在负载均衡器后,确保 IP 为标准 SKU
问题 3:更换后无法 SSH 连接
Section titled “问题 3:更换后无法 SSH 连接”检查清单:
-
确认使用新 IP:
# 确保使用新 IP,而不是旧 IPssh -i key.pem azureuser@<新IP地址> -
检查 NSG 规则:
- 进入虚拟机”网络”设置
- 查看入站端口规则
- 确认允许你的源 IP 访问 22 端口
- 添加规则允许你的公网 IP
[图片占位符:NSG 入站规则检查界面]
-
清除 SSH 缓存:
# 清除旧 IP 的 SSH 缓存ssh-keygen -R <旧IP地址>ssh-keygen -R <新IP地址> -
检查虚拟机状态:
- 确认虚拟机状态为”正在运行”
- 检查启动诊断是否有错误
-
使用 Azure Serial Console:
- 在虚拟机页面左侧选择”串行控制台”
- 直接登录检查网络配置
- 确认网络服务正常
问题 4:操作时虚拟机意外重启
Section titled “问题 4:操作时虚拟机意外重启”预防措施:
- 只更换公网 IP,不修改其他网络配置
- 不要同时修改私有 IP 地址
- 不要在更换 IP 时修改子网
- 一次只做一个变更
如果发生重启:
- 等待虚拟机完全启动
- 检查应用服务状态
- 查看系统日志确认重启原因
问题 5:新旧 IP 都无法连接
Section titled “问题 5:新旧 IP 都无法连接”紧急处理:
-
使用 Azure Serial Console 登录
-
检查网络接口配置:
ip addr showip route show -
检查网络服务:
systemctl status networkingsystemctl status sshd -
如果问题严重,可以:
- 回滚到旧 IP(如果还未删除)
- 从快照恢复虚拟机
- 联系 Azure 支持
10 成本说明
Section titled “10 成本说明”公网 IP 费用结构
Section titled “公网 IP 费用结构”标准 SKU 静态 IP:
- 保留费用:约 $0.005/小时
- 月度成本:约 $3.60/月
- 计费方式:只要 IP 存在就计费,无论是否使用
基本 SKU 静态 IP:
- 保留费用:约 $0.003/小时
- 月度成本:约 $2.16/月
动态 IP:
- 分配时免费
- 但可能在虚拟机停止时释放
避免额外费用
Section titled “避免额外费用”更换 IP 时的成本控制:
-
及时删除旧 IP:
- 验证新 IP 正常工作后立即删除旧 IP
- 每拖延一天约产生 $0.12 的额外费用
-
查找未使用的 IP:
- 定期审查资源组中的公网 IP
- 删除未关联的 IP 地址
-
使用成本管理工具:
- 在 Azure Portal 使用 Cost Management
- 设置预算告警
- 按资源类型查看费用分解
[图片占位符:Azure Cost Management 界面]
查找未关联的公网 IP:
- 搜索”公共 IP 地址”
- 查看列表中”关联到”列为空的 IP
- 这些是未使用的 IP,可以删除
最佳实践建议
Section titled “最佳实践建议”1. IP 命名规范
Section titled “1. IP 命名规范”使用清晰的命名约定:
格式:<环境>-<项目>-<用途>-<序号>示例:- prod-web-public-ip-01(生产环境 Web 服务器)- dev-api-public-ip-01(开发环境 API 服务器)- test-db-public-ip-01(测试环境数据库)2. 使用资源标签
Section titled “2. 使用资源标签”为每个公网 IP 添加标签:
Environment: ProductionProject: WebAppOwner: DevOps TeamCostCenter: IT-001Purpose: Web ServerCreatedDate: 2024-11-29在创建或编辑 IP 时,切换到”标记”选项卡添加这些标签。
[图片占位符:资源标签配置界面]
3. 保持配置一致性
Section titled “3. 保持配置一致性”资源组管理:
- 相关资源放在同一资源组
- VM、IP、网络接口、NSG 都在一起
- 便于统一管理和删除
区域选择:
- 所有相关资源使用同一区域
- 避免跨区域关联导致的问题
4. 文档化 IP 资源
Section titled “4. 文档化 IP 资源”维护 IP 地址清单(Excel 或文档):
| IP 地址 | 名称 | 关联资源 | 用途 | SKU | 分配方式 | 创建日期 |
|---|---|---|---|---|---|---|
| 20.205.123.45 | prod-web-ip | web-vm-01 | Web服务器 | 标准 | 静态 | 2024-11-29 |
5. 定期审查和清理
Section titled “5. 定期审查和清理”每月检查:
- 未关联的公网 IP
- 不再使用的虚拟机
- 过期的测试资源
设置提醒:
- 使用 Azure Automation 定期检查
- 配置成本告警
- 定期生成资源清单报告
6. 安全最佳实践
Section titled “6. 安全最佳实践”网络隔离:
- 生产环境虚拟机不要直接暴露公网 IP
- 使用 Azure Bastion 进行安全访问
- 通过负载均衡器或应用网关暴露服务
NSG 配置:
- 限制 SSH/RDP 访问的源 IP 范围
- 使用服务标签而非具体 IP(更灵活)
- 定期审查安全规则
10. 总结
Section titled “10. 总结”在 Azure 中不停机更换虚拟机公网 IP 的关键要点:
准备阶段:
- 记录当前配置
- 预先创建新的公网 IP(同区域、匹配SKU)
- 选择合适的操作时间
执行阶段: 4. 进入网络接口 IP 配置 5. 在下拉菜单中选择新 IP 替换旧 IP 6. 保存配置(会有 10-30 秒中断)
验证阶段: 7. 确认新 IP 生效 8. 测试网络连接 9. 验证应用功能
收尾阶段: 10. 更新 DNS 记录 11. 更新相关配置和文档 12. 删除旧 IP 节省成本
关键注意事项:
- 新旧 IP 必须在同一区域
- SKU 类型必须匹配
- 更换时会有短暂的连接中断
- 及时更新 DNS 和防火墙规则
- 删除旧 IP 以避免额外费用
通过遵循本教程的步骤,你可以安全、高效地完成 IP 更换,同时将服务中断时间降到最低。