我正在使用 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.
#>