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-VMSwitch 和 Get-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 applynetplan 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"