Hyper-V 虚拟机设置静态 IP 和外网访问

文章讲述了在Windows11中使用Hyper-V创建Debian12虚拟机时,如何解决IP自动改变的问题,包括创建自定义虚拟交换机、设置静态IP、配置NAT网络,以及处理可能出现的防火墙和网络环境影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境说明

  • 宿主机操作系统:Windows 11 专业版
  • 漏洞复现操作系:debian-live-12.5.0-amd64-standard

1 问题简介

在 Windows 上用自带的 Hyper-V 虚拟机管理应用创建了一个 Debian 12 虚拟机,配置静态 IP 的时候出了点问题。

Hyper-V 默认有一个 Default Switch 内部网络虚拟交换机,由于自动配置了 NAT 服务,所以在上面的虚拟机可以访问物理网络。但是问题是,这个默认的每次重启都会自动改变 IP, 即使你在网络适配器里手动设置了 IP 也没用。

2 解决过程

步骤01、

使用 Hyper-V 的图形界面向导创建虚拟交换机,图形界面的过程展示,如图所示。

在这里插入图片描述

步骤02、

新建虚拟网络交换机,输入名称,选择内部网络,点击确定,如图所示。

在这里插入图片描述

在这里插入图片描述

步骤03、

右键选中需要设置的虚拟机的设置选项,弹出如下框,选择刚才新建的 Debian 12 的虚拟交换机,点击确定,之后便可重启虚拟机使之生效,如图所示。

在这里插入图片描述

在这里插入图片描述

步骤04、

在宿主机的网络设置,打开控制面板->网络和共享中心->更改适配器设置: 找到刚刚在 Hyper-V 上新增的虚拟网络交换机,右键选择属性,如图所示。

在这里插入图片描述

步骤05、

选择如下 IPv4 协议,设置如下 IP 地址和子网掩码,其他可留空,IP地址必须是192.168.X.1 的设置,这里的 X=1 是刚才我们在 Debian 12 上设置的网段,需保持一致,如图所示。

在这里插入图片描述

步骤06、

然后给 Debian 12 虚拟机设置静态 IP 和 DNS nameserver,重启验证下,如图所示。

# /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4

# /etc/network/interfaces
source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
# iface eth0 inet dhcp
iface eth0 inet static
address 192.168.20.20
netmask 255.255.255.0
gateway 192.168.20.1

在这里插入图片描述

这里遇到了一个问题,设置好 IP 在同一个网段后,宿主机可以 ping 通虚拟机,但是虚拟机没法 ping 通宿主机。这和 Hyper-V 内部类型网络的描述不相符啊,后来坑了好久,才发现是宿主机防火墙禁掉了 ping 的 icmp 协议包,通过 telnet 其他放开的端口验证确实没问题。

步骤06、

Hyper-V NAT 网络设置固定 IP / DHCP

Hyper-V 默认的 Default Switch 同时支持了 NAT 网络以及 DHCP,虚拟机能够访问外网。
但使用过程中发现这个 IP 网段经常变化,而且 Hyper-V 没有提供管理其 NAT 网络与 DHCP 的图形化界面功能。
如果开发者需要同时管理多个 VM,且在局域网中无法为他们单独分配固定 IP 时,使用可自行配置的 NAT 网络显得尤为重要。
本文提供一种自定义管理 Hyper-V NAT 网络的方法,虚拟机能够通过固定 IP 连接至该网络,且能够访问外网。

添加一个虚拟交换机能够支持 192.168.20.0 / 24 网段,并能够将 Debian 12 虚拟机通过固定IP连接到该网段。
支持物理机与虚拟机的相互访问,且支持虚拟机访问外网。

以管理员身份启动PowerShell ,执行下列命令,如图所示。

New-NetNat -Name Static-NAT -InternalIPInterfaceAddressPrefix 192.168.20.0/24

其中 Static-NAT 为新建 NAT 对象的名称,可根据实际情况自行设定;

192.168.20.0/24 为需要NAT的内网地址,注意是网络地址。

在这里插入图片描述

需要注意的是,Windows 系统只能同时为一个网段提供 NAT 服务。

步骤07、

到这里就已经配置完成了,验证外网是否可以访问,如图所示。

在这里插入图片描述

步骤08、

如果你配置成功了,这一步可以忽略。

操作失误或需要修改 NAT 网络时,可以删除之前的创建的 NAT 网络,进行下面前你应该确认仅有一个 NAT 网络,如图所示。

# 确认获取到的 NAT 只有一个且是你想要删除的
Get-NetNat 

# 删除 NAT 网络
Get-NetNat | Remove-NetNat 

# 删除 NetIPAddress 命令
Remove-NetIPAddress -InterfaceAlias "vEthernet (NAT)"

有时会出现 NAT 网络无法访问外网的情况,一般与移动热点、电脑睡眠、网络环境变化等情况有关。
如果开启了 Win10 自带的“移动热点”功能,可尝试将其关闭,再查看网络是否正常。
实在不行只有重启物理机了~~

在这里插入图片描述

### 回答1: CentOS 7上启动httpd服务失败可能有多种原因,以下是一些常见的解决方法: 1. 检查httpd配置文件是否正确:可以使用命令`httpd -t`检查httpd配置文件是否正确,如果有错误,需要修改配置文件。 2. 检查端口是否被占用:可以使用命令`netstat -tlnp`查看端口是否被占用,如果被占用需要释放端口或修改httpd配置文件中的端口号。 3. 检查httpd服务是否安装:可以使用命令`rpm -qa | grep httpd`查看httpd服务是否安装,如果没有安装需要先安装httpd服务。 4. 检查httpd服务是否启动:可以使用命令`systemctl status httpd`查看httpd服务是否启动,如果没有启动需要使用命令`systemctl start httpd`启动httpd服务。 5. 检查SELinux是否开启:如果SELinux开启,可能会导致httpd服务启动失败,需要使用命令`setenforce 0`关闭SELinux,或者修改SELinux策略。 以上是一些常见的解决方法,如果以上方法都无法解决问题,可以查看httpd服务日志文件,找到具体的错误信息,然后根据错误信息进行解决。 ### 回答2: CentOS 7上的httpd服务启动失败可能有多种原因。以下列出了一些常见问题解决方法: 1. 端口被占用 当httpd试图占用已被其他程序占用的端口时会启动失败。此时可以通过使用`netstat -tunlp`命令检查端口占用情况,然后杀死占用该端口的进程及时释放端口。或者修改httpd的配置文件,将端口修改为未被占用的端口。 2. 配置文件错误 有时httpd服务的配置文件中可能出现错误,例如语法错误或路径错误等等。在启动httpd服务之前,可以使用`apachectl configtest`命令进行检查,如果输出“Syntax OK”,则表示配置文件没有错误。如果出现错误,则需要根据错误提示进行相应修改。 3. 依赖关系问题 如果httpd依赖的其他程序或库缺失,也会导致启动失败。可以通过使用`systemctl status httpd.service`命令来查看httpd服务状态,如果输出“Failed to start”或“Loaded: failed”,则需要检查依赖关系是否完整。 4. SELinux问题 当SELinux启用时,有时会导致httpd服务启动失败。在这种情况下,可以在SELinux上禁用httpd服务,或者修改httpd配置文件解决SELinux相关的问题。 5. 用户权限问题 httpd服务的启动可能需要特定的用户权限。如果使用的用户权限不够,则无法启动。可以尝试使用root用户启动httpd服务,或者根据需要修改相应的用户权限。 ### 回答3: CentOS 7中的Apache HTTP服务器(httpd)是一个常见的Web服务器,如果遇到httpd服务启动失败的情况,可能会影响服务器正常的工作对外服务的稳定性。本文将提供一些可能会导致httpd服务启动失败的原因,并给出相应的解决方法。 1. 端口被占用 如果端口被其他进程占用,httpd服务就无法启动。可以通过 netstat -tulpn 命令查看端口占用情况,并杀死占用该端口的进程。如果端口被 httpd 服务自身占用,可以通过 systemctl restart httpd 命令重启 httpd 服务;如果是其他进程占用了端口,可以通过 kill 命令杀死该进程或更改 httpd.conf 文件配置,将 httpd 服务的端口改为其他空闲端口,重新启动。 2. 配置文件错误 httpd 服务的配置文件通常是 /etc/httpd/conf/httpd.conf,如果其中存在语法错误、权限问题或者其它配置错误,可能会导致 httpd 服务启动出错。可以通过将 httpd.conf 文件备份后删掉,重新执行 yum install httpd 命令安装 httpd 服务,然后手动修改 httpd.conf 文件,逐个检查每个配置项是否正确,确认无误后重启 httpd 服务。 3. SELinux 问题 SELinux 是 CentOS 7中提供的一种安全模块,它可以对系统文件应用程序进行安全管控。如果 SELinux 配置不正确,可能会阻止 httpd 服务正常启动。可以通过修改 /etc/selinux/config 文件中 SELINUX=disabled 来暂时关闭 SELinux,然后重新启动 httpd 服务;或者一个更优的方式是,根据日志确定问题原因,使用命令 semanage 或者 setsebool 等工具将相关目录或者配置加入到 SELinux 许可列表中,重新启动 httpd 服务,以恢复服务正常工作。 4. 防火墙问题 如果你的 CentOs 7 服务器启用了防火墙,有可能会导致 httpd 服务启动失败。可以通过检查防火墙相关配置来确定问题原因,解决方案是修改防火墙规则,将端口 80 或者 443 等 httpd 服务需要的端口放行,重新启动 httpd 服务。 总之,当遇到 httpd 服务启动失败时,不要慌张,可以先通过日志或者执行命令查看错误信息,找到错误原因,然后根据错误原因一步一步解决问题。在解决问题过程中注意备份原始配置文件,以免造成不必要的损失。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值