Skip to content

更换公网 IP 地址(不停机方法)

本教程介绍如何在不停止虚拟机的情况下更换公网 IP 地址。这种方法适合需要保持服务持续运行的生产环境。

更换场景:

  • 需要更改 IP 分配方式(动态改为静态)
  • 需要更改路由首选项(Internet 改为 Microsoft 网络)
  • IP 地址被列入黑名单,需要更换
  • 需要使用预留的特定 IP 地址
  • 配置错误需要重新分配

更换 IP 的影响:

  • 虚拟机的公网访问地址会变化
  • 正在进行的 SSH/RDP 连接会短暂中断(约 10-30 秒)
  • 新连接需要使用新 IP 地址
  • DNS 记录需要更新
  • 防火墙规则可能需要调整

操作前必须做:

  • 记录当前 IP 地址和配置
  • 准备好更新 DNS 记录的流程
  • 通知相关人员 IP 即将变更
  • 选择业务相对空闲的时段操作
  • 确保有备用连接方式(如 Azure Serial Console)
  1. 登录 Azure Portal (portal.azure.com)
  2. 搜索并进入你的虚拟机
  3. 在左侧菜单选择”网络”或”网络设置”
  4. 记录以下信息:
    • 当前公网 IP 地址
    • IP 分配方式(动态/静态)
    • SKU 类型(基本/标准)
    • 路由首选项
    • 网络接口名称

虚拟机网络配置概览界面


在分离旧 IP 之前,先创建好新的 IP,这样可以最小化服务中断时间。

  1. 在 Azure Portal 顶部搜索框输入”公共 IP 地址”
  2. 点击”公共 IP 地址”服务(注意IP前后有空格)
  3. 点击”+ 创建”按钮

公共 IP 地址服务入口

创建IP

配置新 IP 地址:

基本信息选项卡:

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

创建公网 IP 基本配置界面-1 创建公网 IP 基本配置界面-2 创建公网 IP 基本配置界面-3

DDos防护

高级选项(如果区域支持):

  • 路由首选项:选择”Microsoft 网络”(生产环境推荐)
  • 空闲超时(分钟):保持默认 4 分钟
  • 其他选项保持默认

注意: 如果遇到”RegionNotEnabledForRoutingPreferenceFeature”错误,不要配置路由首选项,使用默认设置即可。

  1. 点击”审阅 + 创建”
  2. 检查配置摘要
  3. 点击”创建”
  4. 等待部署完成(通常 10-30 秒)

新 IP 创建成功界面

记录新 IP 地址:

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

IP创建成功

  1. 返回虚拟机页面(搜索你的虚拟机名称)
  2. 在左侧菜单中选择”网络”或”网络设置”
  3. 找到”网络接口”部分
  4. 点击网络接口名称(通常格式为 vm-name123vm-name-nic

虚拟机网络设置页面

这会打开网络接口的配置页面。

在网络接口页面:

  1. 在左侧菜单中找到并点击”IP 配置”
  2. 你会看到当前的 IP 配置列表(通常有一个名为 ipconfig1 的配置)
  3. 点击该 IP 配置名称(ipconfig1

IP 配置列表界面

这是关键步骤,操作时会有短暂的网络中断(10-30 秒)。

在 IP 配置编辑页面:

查看当前配置:

  • 确认”私有 IP 地址设置”部分
  • 找到”公共 IP 地址”部分

更换公网 IP:

  1. 在”公共 IP 地址”部分,找到”关联公共 IP 地址”选项
  2. 确保该选项是”启用”状态
  3. 点击”公共 IP 地址”下拉菜单
  4. 当前显示的是旧 IP 的名称
  5. 从下拉菜单中选择刚才创建的新 IP(vm-ubuntu-new-public-ip

更换公网 IP 下拉菜单界面

重要提示:

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

保存 IP 配置界面

期间发生的事情:

  • Azure 会先分离旧的公网 IP
  • 然后立即关联新的公网 IP
  • 虚拟机保持运行状态
  • 现有 SSH 连接会断开
  • 虚拟机内部的进程继续运行

配置保存完成后:

  1. 返回虚拟机的”概述”页面
  2. 在”基本信息”部分找到”公共 IP 地址”
  3. 确认显示的是新的 IP 地址

虚拟机概述页面显示新 IP

测试网络连接:

使用新 IP 地址进行 SSH 连接测试:

# 使用新 IP 连接
ssh -i /path/to/private-key.pem azureuser@<新的公网IP地址>
# 例如
ssh -i ~/.ssh/azure-key.pem [email protected]

如果连接失败,检查:

  • 网络安全组(NSG)规则是否允许你的源 IP
  • SSH 密钥是否正确
  • 用户名是否正确
  • 等待 1-2 分钟后重试(DNS 传播)

新 IP 验证成功后,可以删除旧的公网 IP 以节省成本。

查找旧 IP:

  1. 在 Azure Portal 搜索”公共 IP 地址”
  2. 找到旧的 IP 地址(通过名称或 IP 地址识别)
  3. 点击进入该 IP 的详情页面
  4. 确认”关联到”字段显示为”无”或空白(说明已经分离)

未关联的公网 IP 详情页

删除旧 IP:

  1. 在旧 IP 的页面顶部点击”删除”按钮
  2. 在确认对话框中输入 IP 名称或点击”是”
  3. 等待删除完成

注意: 如果无法删除,可能是:

  • 仍然被某个资源关联(等待几分钟后重试)
  • 权限不足(联系管理员)

或者保留旧 IP:

如果你想保留旧 IP 作为备用:

  • 不删除该 IP
  • 未来可以重新关联到其他虚拟机或负载均衡器
  • 保留的 IP 会持续产生费用(约 $3.6/月)

添加ICMP-IPv4协议,允许ping VM。

回到VM控制台

添加ping规则

  1. 回到VM网络设置

    回到网络设置

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

    关联新IP

  3. 添加成功

    添加次要IP成功

  4. 查看结果

    查看结果 查看结果2

  5. 操作系统配置

此时操作系统还没有识别第二个公网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来管理网络。因此需要修改其配置文件。

  1. 备份现有配置
# 查看现有 Netplan 配置文件
ls -la /etc/netplan/
# 备份配置文件
sudo mv /etc/netplan/50-cloud-init.yaml /etc/netplan/50-cloud-init.yaml.backup
  1. 编辑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 # 默认网关
  1. 验证配置
sudo netplan try
# 按回车确认,成功后会显示
Configuration accepted.
  1. 应用配置
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
...

采用跨子网的方式;即一个VM同时配置两个网卡,每个网卡连接不同的子网;

  1. 创建新的子网:在顶部搜索虚拟网络

创建新的子网

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

配置新子网

  1. 创建网络接口

创建网络接口

  1. 配置网络接口

配置网络接口

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

配置网络接口-2

附加网络接口

  1. 验证结果

搜索网络接口

验证结果

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

IP配置

  • 单网卡多IP:每个网卡的可以最多绑定256个IP;但默认配额10个
  • 多网卡(多子网)多IP:每个VM可以绑定65536个网卡;

VM配额查询

为VM分配多个IP

如果你使用域名指向虚拟机,必须立即更新 DNS 记录:

A 记录更新示例:

域名:example.com
旧记录:example.com -> 13.67.45.123(旧IP)
新记录:example.com -> 20.205.123.45(新IP)

操作步骤:

  1. 登录你的 DNS 服务商(如 Cloudflare、GoDaddy、Azure DNS)
  2. 找到对应的 A 记录
  3. 修改 IP 地址为新 IP
  4. 保存更改

DNS 传播时间:

  • 通常 5 分钟到 1 小时
  • 最长可能需要 24-48 小时
  • 期间部分用户可能访问旧 IP(会失败)

如果你的 NSG 规则中硬编码了 IP 地址,需要更新:

  1. 进入虚拟机的”网络”设置
  2. 查看入站和出站规则
  3. 如有引用旧 IP 的规则,更新为新 IP
  4. 保存更改

常见需要更新的规则:

  • 源 IP 地址限制
  • 目标 IP 地址限制
  • 应用程序安全组规则

如果其他系统需要访问此虚拟机:

  • 通知相关团队更新防火墙规则
  • 更新第三方服务的 IP 白名单
  • 更新 API 调用方的配置
  • 更新数据库访问白名单

维护准确的运维文档:

  • 更新 IP 地址清单
  • 更新网络拓扑图
  • 更新运维手册
  • 更新应用配置文件(如有硬编码 IP)
  • 更新监控系统的 IP 地址
  • 更新告警规则

确保应用在新 IP 下正常工作:

  • 测试 Web 服务访问
  • 测试 API 端点
  • 测试数据库连接
  • 测试文件传输
  • 检查应用日志
  • 验证监控指标

问题 1:下拉菜单中找不到新创建的 IP

Section titled “问题 1:下拉菜单中找不到新创建的 IP”

可能原因:

  • 新 IP 与虚拟机不在同一区域
  • 新 IP 与虚拟机的 SKU 不匹配
  • 页面缓存未刷新

解决方法:

  1. 确认区域匹配:

    • 检查虚拟机区域:概述页面的”位置”字段
    • 检查新 IP 区域:IP 详情页面的”位置”字段
    • 两者必须完全一致
  2. 确认 SKU 匹配:

    • 如果虚拟机使用标准负载均衡器,IP 必须是标准 SKU
    • 基本 SKU 的 IP 不能用于标准负载均衡器
  3. 刷新页面:

    • 按 F5 刷新浏览器
    • 或关闭页面重新进入

错误示例:

PublicIPAndLoadBalancerSkuMismatch
Cannot associate Standard SKU public IP with Basic SKU load balancer

解决方法:

  • 删除错误的 IP
  • 创建匹配 SKU 的新 IP
  • 如果虚拟机在负载均衡器后,确保 IP 为标准 SKU

检查清单:

  1. 确认使用新 IP:

    # 确保使用新 IP,而不是旧 IP
    ssh -i key.pem azureuser@<新IP地址>
  2. 检查 NSG 规则:

    • 进入虚拟机”网络”设置
    • 查看入站端口规则
    • 确认允许你的源 IP 访问 22 端口
    • 添加规则允许你的公网 IP

[图片占位符:NSG 入站规则检查界面]

  1. 清除 SSH 缓存:

    # 清除旧 IP 的 SSH 缓存
    ssh-keygen -R <旧IP地址>
    ssh-keygen -R <新IP地址>
  2. 检查虚拟机状态:

    • 确认虚拟机状态为”正在运行”
    • 检查启动诊断是否有错误
  3. 使用 Azure Serial Console:

    • 在虚拟机页面左侧选择”串行控制台”
    • 直接登录检查网络配置
    • 确认网络服务正常

预防措施:

  • 只更换公网 IP,不修改其他网络配置
  • 不要同时修改私有 IP 地址
  • 不要在更换 IP 时修改子网
  • 一次只做一个变更

如果发生重启:

  • 等待虚拟机完全启动
  • 检查应用服务状态
  • 查看系统日志确认重启原因

紧急处理:

  1. 使用 Azure Serial Console 登录

  2. 检查网络接口配置:

    ip addr show
    ip route show
  3. 检查网络服务:

    systemctl status networking
    systemctl status sshd
  4. 如果问题严重,可以:

    • 回滚到旧 IP(如果还未删除)
    • 从快照恢复虚拟机
    • 联系 Azure 支持

标准 SKU 静态 IP:

  • 保留费用:约 $0.005/小时
  • 月度成本:约 $3.60/月
  • 计费方式:只要 IP 存在就计费,无论是否使用

基本 SKU 静态 IP:

  • 保留费用:约 $0.003/小时
  • 月度成本:约 $2.16/月

动态 IP:

  • 分配时免费
  • 但可能在虚拟机停止时释放

更换 IP 时的成本控制:

  1. 及时删除旧 IP

    • 验证新 IP 正常工作后立即删除旧 IP
    • 每拖延一天约产生 $0.12 的额外费用
  2. 查找未使用的 IP

    • 定期审查资源组中的公网 IP
    • 删除未关联的 IP 地址
  3. 使用成本管理工具

    • 在 Azure Portal 使用 Cost Management
    • 设置预算告警
    • 按资源类型查看费用分解

[图片占位符:Azure Cost Management 界面]

查找未关联的公网 IP:

  1. 搜索”公共 IP 地址”
  2. 查看列表中”关联到”列为空的 IP
  3. 这些是未使用的 IP,可以删除

使用清晰的命名约定:

格式:<环境>-<项目>-<用途>-<序号>
示例:
- prod-web-public-ip-01(生产环境 Web 服务器)
- dev-api-public-ip-01(开发环境 API 服务器)
- test-db-public-ip-01(测试环境数据库)

为每个公网 IP 添加标签:

Environment: Production
Project: WebApp
Owner: DevOps Team
CostCenter: IT-001
Purpose: Web Server
CreatedDate: 2024-11-29

在创建或编辑 IP 时,切换到”标记”选项卡添加这些标签。

[图片占位符:资源标签配置界面]

资源组管理:

  • 相关资源放在同一资源组
  • VM、IP、网络接口、NSG 都在一起
  • 便于统一管理和删除

区域选择:

  • 所有相关资源使用同一区域
  • 避免跨区域关联导致的问题

维护 IP 地址清单(Excel 或文档):

IP 地址名称关联资源用途SKU分配方式创建日期
20.205.123.45prod-web-ipweb-vm-01Web服务器标准静态2024-11-29

每月检查:

  • 未关联的公网 IP
  • 不再使用的虚拟机
  • 过期的测试资源

设置提醒:

  • 使用 Azure Automation 定期检查
  • 配置成本告警
  • 定期生成资源清单报告

网络隔离:

  • 生产环境虚拟机不要直接暴露公网 IP
  • 使用 Azure Bastion 进行安全访问
  • 通过负载均衡器或应用网关暴露服务

NSG 配置:

  • 限制 SSH/RDP 访问的源 IP 范围
  • 使用服务标签而非具体 IP(更灵活)
  • 定期审查安全规则

在 Azure 中不停机更换虚拟机公网 IP 的关键要点:

准备阶段:

  1. 记录当前配置
  2. 预先创建新的公网 IP(同区域、匹配SKU)
  3. 选择合适的操作时间

执行阶段: 4. 进入网络接口 IP 配置 5. 在下拉菜单中选择新 IP 替换旧 IP 6. 保存配置(会有 10-30 秒中断)

验证阶段: 7. 确认新 IP 生效 8. 测试网络连接 9. 验证应用功能

收尾阶段: 10. 更新 DNS 记录 11. 更新相关配置和文档 12. 删除旧 IP 节省成本

关键注意事项:

  • 新旧 IP 必须在同一区域
  • SKU 类型必须匹配
  • 更换时会有短暂的连接中断
  • 及时更新 DNS 和防火墙规则
  • 删除旧 IP 以避免额外费用

通过遵循本教程的步骤,你可以安全、高效地完成 IP 更换,同时将服务中断时间降到最低。