Skip to content

Multipass 固定 IP 配置

本文适用于 Windows、Hyper-V 和 Multipass 组合:先创建内部虚拟交换机与 NAT 网段,再给实例的第二块网卡配置静态地址。示例使用 158.50.0.0/24,如果它和公司网络、VPN 或本机已有网段冲突,请整体替换。

前置检查

以管理员身份打开 PowerShell,先检查目标名称和网段是否已存在:

powershell
Get-VMSwitch
Get-NetIPAddress -AddressFamily IPv4
Get-NetNat

下面假设:

配置项示例值
虚拟交换机vmnet
NAT 名称vmnet
宿主机网关158.50.0.1
实例固定地址158.50.0.2
网段158.50.0.0/24

1. 创建内部网络

powershell
New-VMSwitch -SwitchName "vmnet" -SwitchType Internal
New-NetIPAddress -IPAddress "158.50.0.1" -PrefixLength 24 -InterfaceAlias "vEthernet (vmnet)"
New-NetNat -Name vmnet -InternalIPInterfaceAddressPrefix 158.50.0.0/24

执行后再次运行 Get-VMSwitchGet-NetNat,确认交换机与 NAT 已创建。重复执行创建命令会报“对象已存在”,不要在未确认用途前删除已有网络。

2. 创建实例

下面创建一个 4 核、4 GB 内存、20 GB 磁盘的实例,并把 vmnet 作为手动配置的第二块网卡:

powershell
multipass launch --name lpx --cpus 4 --memory 4G --disk 20G --network name=vmnet,mode=manual

进入实例并确认网卡名称:

powershell
multipass shell lpx
ip -br address

通常第二块网卡是 eth1,但应以实际输出为准,不能直接假定网卡名固定。

3. 配置 Netplan

先备份配置文件:

bash
sudo cp /etc/netplan/50-cloud-init.yaml /etc/netplan/50-cloud-init.yaml.bak
sudo vi /etc/netplan/50-cloud-init.yaml

在现有 network.ethernets 下增加第二块网卡配置。以下是结构示例,不要重复添加文件中已有的 network 根节点:

yaml
network:
  version: 2
  ethernets:
    eth1:
      dhcp4: false
      addresses:
        - 158.50.0.2/24
      nameservers:
        addresses:
          - 114.114.114.114

第二块网卡主要用于宿主机与实例通信,通常不需要再配置一条默认路由。错误地增加默认路由可能抢占实例原有网卡的上网路径。

先检查语法,再应用配置:

bash
sudo netplan generate
sudo netplan try
sudo netplan apply

netplan try 会在未确认时自动回滚,更适合远程修改网络。

4. 验证

在实例内检查地址:

bash
ip -br address show eth1
ping -c 3 158.50.0.1

在 Windows 宿主机检查连通性:

powershell
ping 158.50.0.2
multipass list

如果实例内服务仍无法从宿主机访问,再检查服务是否监听 0.0.0.0、Linux 防火墙是否开放端口,以及应用端口是否正确。

回滚

网络配置失败时,先在实例中恢复备份:

bash
sudo cp /etc/netplan/50-cloud-init.yaml.bak /etc/netplan/50-cloud-init.yaml
sudo netplan apply

只有确认 vmnet 不被其他实例使用时,才在管理员 PowerShell 中删除本次创建的 NAT 和交换机:

powershell
Remove-NetNat -Name vmnet
Remove-VMSwitch -Name "vmnet"