HyperV-带有流浪汉的静态IP


3

我正在将Laravel Homestead和Vagrant一​​起使用,并且我认为使用Hyper-V而不是Virtual Box是有意义的,因为它已与Windows集成在一起。

这是我的问题。我的Hyper-v虚拟机有时会获得一个新IP,通常为172.20.83.X。当我要求ips测试域时,这会弄乱我的主机文件。因此,每次我的hyper-v服务器获得新的IP时,我都必须重新输入新的IP,这很快变得非常乏味。

我想知道是否有一种方法可以将ip设置为在我的机器上始终相同。

我尝试修改服务器的虚拟交换机管理器,但最终失去了完整的Internet。


您使用哪种类型的虚拟交换机?外部?内部?还是私人?
S.Leon's

@ S.Leon,这是外部的:)
Jazerix '18

Answers:


1

范围为172.20.23.X的外部DHCP服务器似乎将为您的虚拟机提供IP地址。您可以在DHCP控制台中使用过滤器,以防止DHCP服务器通过输入虚拟机的mac地址向这些计算机发布地址。如下所示: 在此处输入图片说明

在此处输入图片说明

然后,您可以使用其他DHCP为虚拟机设置保留地址(我的理解是,您不想在172.20.83.X范围内获取地址,因此请使用其他DHCP)或手动配置静态地址,以便它们信息与主机文件的内容相同。


另外,请确保您在Hyper-V VM上没有使用动态MAC地址。即使您保留DHCP,这也将导致您获得新的IP。您可以在“网络适配器”高级设置下进行检查...我相信,默认情况下,它们设置为动态。
essjae

这绝不是对您的答案的批评,因为至少它提供了“变通方法”以在配置后应用,但在配置VM时无法以编程方式指定静态IP地址是一个巨大的痛苦。许多工作流程需要常规创建和销毁这些类型的VM,因此任何程度的“手动”工作都是有问题的。希望Vagrant能够通过github.com/hashicorp/vagrant/issues/8384
Ben Johnson

0

为了本地开发的目的,Asker以及具有类似用例的任何人都可能在工作站(不是Windows Server版本)上运行,在这种情况下,存在一个相对简单的解决方案。

创建开关

在Hyper-V Manager中,在下创建一个新的虚拟交换机Actions panel -> Virtual Switch Manager... -> Create Virtual Switch。假设虚拟机应该能够连接到Internet,请选择External交换机类型。

在下一个屏幕上,为交换机命名,例如internet-enabled,然后选择连接到Internet的物理网络接口。

结果开关应如下所示:

在此处输入图片说明

硬编码交换机的IP地址(VM的网关)

找到与新交换机关联的网络适配器,即Control Panel -> Network and Internet -> Network Connections;其名称将反映上一步中给出的名称,例如vEthernet (internet-enabled)。右键单击适配器,然后选择Properties

接下来,单击Internet Protocol Version 4 (TCP/IPv4),然后单击Properties。输入192.168.10.1IP address,并且255.255.255.0Subnet mask。设置应如下所示:

在此处输入图片说明

在来宾VM中分配静态IP地址

最后一步是在来宾VM中分配静态IP地址。

不幸的是,Vagrant自v2.2.1起不支持静态IP配置(请参阅:https : //github.com/hashicorp/vagrant/issues/8384),因此在配置VM之前不能分配此静态IP。

在Vagrant支持此功能之前,您可以简单地正常配置VM并随后编辑网络配置。

设置静态IP的过程因来宾操作系统而异,例如,在Ubuntu 18.04 LTS中,就像编辑一样简单,/etc/netplan/01-netcfg.yaml以包括与上面的虚拟交换机配置匹配的值(空格必须精确!):

network:
  version: 2
  ethernets:
    eth0:
      dhcp4: no
      addresses: [192.168.10.10/24]
      gateway4: 192.168.10.1
      nameservers:
        addresses: [8.8.8.8,8.8.4.4]

保存文件后,使用以下命令应用更改:

$ sudo netplan apply

VM应该立即反映静态IP,可以通过以下方式确认ifconfig

$ sudo ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.10  netmask 255.255.255.0  broadcast 192.168.10.255
        inet6 fe80::215:5dff:fe38:12a  prefixlen 64  scopeid 0x20<link>
        ether 00:15:5d:38:01:2a  txqueuelen 1000  (Ethernet)
        ...

主机现在可以在ping通访客192.168.10.10,而访客可以在ping通主机192.168.10.1

参考文献:

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.