如何为 Hyper-V VM(Ubuntu 19.10 Quick Create)配置静态 IP 地址以避免每次重启后更新 ssh 配置?

如何为 Hyper-V VM(Ubuntu 19.10 Quick Create)配置静态 IP 地址以避免每次重启后更新 ssh 配置?

我正在使用 VS-Code 远程开发插件在 hyper-v VM(Ubuntu 19.10 - 快速创建)上编辑代码,该 VM 运行在我的笔记本电脑上的 Windows 10 上。VM 使用 hyper-v 的默认交换机进行联网。VS-Code 远程开发插件允许编辑 ssh 配置文件(C:\Users\username\ssh\config),这使得连接到 VM 变得容易。我的 ssh 配置如下所示:

Host hypervubuntu
    HostName 172.18.10.76
    User my_UbuntuVM_username

我的 hyper-v 默认交换机的设置(看起来它设置为使用静态 IP,但实际上此设置在每次重新启动 Windows 后都会发生变化): 在此处输入图片描述

问题是每次 Windows 重新启动时,VM(和 hyper-v 的默认交换机)的 IP 地址都会发生变化,需要编辑 ssh 配置以允许 VS-Code 再次连接到 VM。IP 的更改还会导致进一步的问题,例如需要重新启动 VM 并在每次新的 ssh 连接时确认“新”主机的真实性。

我尝试在 VM 的网络设置中设置静态 IP,但这似乎无法持久,因为每次重新启动 VM 后它们都会改回“自动 (DHCP)”。

正如建议的那样另一篇帖子我尝试创建一个具有静态 IP 的新虚拟交换机,因为 Hyper-V 的默认交换机似乎不具有静态 IP。但这是我根本无法实现的。

必须配置哪些部分才能让 VS-Code 在 Windows 或 VM 重新启动后顺利重新连接?

免责声明:我的网络技能水平 == 菜鸟:\

编辑:

在得到 @AlexKrauss 的出色回答后,我需要执行以下步骤在我的 Hyper-V Ubuntu 19.10 桌面虚拟机中设置静态 IP:

I. 找到并打开网络配置文件

cd /etc/netplan/
sudo nano 01-network-manager-all.yaml

II. 将其内容替换如下

network:
  version: 2
  renderer: networkd  
  ethernets:
    eth0:
      addresses:
      - 192.168.0.2/24
      gateway4: 192.168.0.1
      nameservers:
        addresses:
        - 8.8.8.8
        - 8.8.4.4
      dhcp4: no

III. 应用并检查变更

sudo netplan apply
ifconfig -a

四、VSCode 使用的 ssh 配置中调整 IP 地址

Host hypervubuntu
    HostName 192.168.0.2
    User my_UbuntuVM_username

答案1

我遇到了同样的问题,并找到了一个Microsoft 提供的分步指南用于设置具有 NAT 的内部交换机,并将虚拟机连接到该交换机。

它由 PowerShell 中的以下步骤组成

New-VMSwitch -SwitchName "SwitchName" -SwitchType Internal
Get-NetAdapter       // (note down ifIndex of the newly created switch as INDEX)
New-NetIPAddress -IPAddress 192.168.0.1 -PrefixLength 24 -InterfaceIndex <INDEX>
New-NetNat -Name MyNATnetwork -InternalIPInterfaceAddressPrefix 192.168.0.0/24

这使用 192.168.0.0/24 作为虚拟交换机的子网,其中 192.168.0.1 是主机的 IP,充当网关。

现在,VM 可以连接到 Hyper-V 管理器中的新交换机。

请注意,与默认交换机不同,没有通过 DHCP 进行自动网络配置,因此在虚拟机内部,您必须在虚拟机中配置静态 IP(例如 192.168.0.2)。

答案2

你现在要做的就是

ssh <MULTPASS_VM_NAME>.mshome.net

您已经完成了!

答案3

# https://4sysops.com/archives/native-nat-in-windows-10-hyper-v-using-a-nat-virtual-switch/

$name = "VMSwitch"
New-VMSwitch -SwitchName $name -SwitchType Internal
#(note down ifIndex of the newly created switch as INDEX)
$index = (Get-NetAdapter |? Name -Like "*$name*").ifIndex
New-NetIPAddress -IPAddress 192.168.0.1 -PrefixLength 24 -InterfaceIndex $index
New-NetNat -Name "VM_NAT" -InternalIPInterfaceAddressPrefix 192.168.0.0/24

# set switch instead of the default switch for the vm in hyyper-v

# need to set IP manually on VM, because the switch do not DHCP (default switch has DHCP)
<#
ip:     192.168.0.2
mask:   255.255.255.0
gateway: 192.168.0.1

dns: 8.8.8.8
#>

# get ipconfig info in vm
get-vm work |select -ExpandProperty NetworkAdapters

<# use //192.168.0.2 to access shared files from vm#>

<#
This uses 192.168.0.0/24 as the subnet for the virtual switch, where 192.168.0.1 is the IP of the host, which acts as a gateway.

Now, the VM can be connected to the new switch in Hyper-V Manager.

Note that unlike the Default Switch, there is no automatic network configuration via DHCP, so inside the VM, you will have to configure a static IP (e.g., 192.168.0.2) in the VM.
#>

相关内容