为D365 Devbox 的Windows虚拟机设置静态IP

Hyper-V的虚拟机默认使用Default Switch虚拟网卡来连接宿主机的网络,好处是不需要自己单独配置网络,直接切换选择使用就可以。但倘若是物理机使用mstsc远程连接到当前的虚拟机里,默认的Default Switch虚拟网卡就不能很好的满足我们的需求了,毕竟那玩意儿ip重启就变……

Hyper-v 设置

简单说明

  • Default Switch :Hyper-V默认使用的网络
  • E0 :手动创建的虚拟内部网络

虚拟机内访问互联网的网络由Default Switch虚拟网卡提供。而E0虚拟网卡则通过设置任意的静态IP(非本地回环等一些特殊的ip地址),对宿主机提供内网服务。

1.错误方式

为了实现目的,曾经试过修改虚拟机里的网卡为静态IP,但结果嘛:重启还是关机,又或者变更网络后,默认的 Default Switch 网卡会dhcp获取与设置的静态ip不一致,导致虚拟机内部无法连接到互联网。

后来很长一段时间里,一直使用的是新建内部网络来设置静态IP供mstsc使用。但是有个问题,若虚拟机需要连接到互联网,这时候需要共享宿主机的网络到内部网络里,而且似乎只能选择一个内部网络共享?最伤的还是,有时候宿主机开机后,Windows11 6月份的补丁很容易导致无法连接网络,所以每次只能卸载6月份更新的内容,要不然就是取消共享网络,改用回默认网卡,很是不便利。

2.正确方式

某天点着Hyper-V的设置,突然想起可以给虚拟机设置多网卡啊,这样问题不就得到解决了?

确实如此:使用 Default Switch 虚拟网卡来访问互联网,而自建的 E0 虚拟网卡用来设置静态IP,供同宿主机连接访问使用。

这样的好处是:和Hyper-V对应的物理机平常连接互联网的速度一样。虚拟机内部访问互联网的网络由Hyper-V自带的 Default Switch 虚拟网卡来提供,虚拟机与宿主机直接的网络连接由 E0 虚拟网卡提供,两者互不冲突(前提是你ip不能设置为一样的)。而通过共享、桥接、将Default Switch 网卡设置为静态IP的等方式,多多少少需要等待一会儿才能访问互联网,而且很有可能还会出现连接失败、受限制的问题,这并不方便。

2.1 新建内部网络

设置,虚拟交换机管理器,添加一个内部网络,名称随意。为了方便记录,博主这里用的是 E0 。

2.2 使用内部网络

找到对应的虚拟机,设置,添加网络硬件,选择上面创建好的 E0 网卡,下方网络加入。

2.3 设置静态IP(虚拟机)

虚拟机里找到网络适配器,找到创建好的 E0 虚拟内部网卡,将其ipv4信息“任意”填写一下。注意,这里不能使用本地回环等一些特殊的IP地址。比如:可以填写我们常见的 192.168.x.x ,后面两段就随意了。

宿主机配置

端口转发

将一个RDP服务(远程桌面协议)转发到任意端口,将进来的流量从3340端口转发到标准的RDP端口3389,使用上面分配的IP地址

netsh interface portproxy add v4tov4 listenport=3340 listenaddress=192.168.1.2connectaddress=192.168.168.168 connectport=3389

查看系统中的所有转发规则是否生效:

netsh interface portproxy show all

删掉一个特定的端口转发规则:

netsh interface portproxy delete v4tov4 listenaddress=192.168.1.2 listenport=3340

远程连接

如果需要访问到该虚拟机,直接远程宿主机的IP地址和对应的端口号就行了。