WindowsServer2016_win10专业版_Hyper-V_NAT_安装_CentOS
转载注明来源: 本文链接 来自osnosn的博客,写于 2020-03-07.
安装参考:
安装 Hyper-V
- 打开"服务器管理器",
- 点"添加角色和功能",
- 选"基于角色或基于功能的安装",(缺省选项)
- 选"从服务器池中选择服务器",(缺省选项)
- 选"Hyper-V",
- 勾上"包括管理工具",(缺省选项)
- 虚拟交换机,先跳过,(装好再配置)
- 迁移,不选择,直接下一步,(装好后可以改)
- 默认存储,一般不改,(因为每次创建虚拟机都会问存储位置)
- 勾上"如需要,自动重启服务器",则安装过程服务器会自己重启,无需人工干预。
- 点"安装"
- 安装过程,耗时有点长,服务器会重启几次。
- 不影响远程桌面设置
- 远程桌面的连接,会因为服务器重启而断开。并且一段时间内连不上去(服务器还会重启)
- 约 5-10 分钟后,远程桌面可以连了,显示安装完成。
配置 Hyper-V 虚拟交换机
- 文中的"宿主机"指的是安装hyper-v的那台"实体机"。
- 默认/缺省,已经有一个虚拟交换机了。是nat的。可以不使用,也可以使用,或改名使用。不要删除。
- 不要删除默认的虚拟交换机。否则会有奇怪的问题出现。微软的东西就是这么奇葩。
比如,实体机重启后,所有的虚拟交换机变成"专用",配好的NAT失效,不能访问外面了。
手动改为"内部"会报错。虽然能改成功,但重启又不行了。
- 不要删除默认的虚拟交换机。否则会有奇怪的问题出现。微软的东西就是这么奇葩。
- 新建交换机,有三个选择,"外部", "内部", "专用网络"。
- "外部" 即 VMware 的 桥接 网络,共用网卡。
- 创建,移除,实体机会有短暂的断网(几秒),会自行恢复。
比如,创建名称为"BR"的外部网络。原来实体机网卡上的ip配置会变空,配置被移动到 虚拟网卡"BR"上了。
移除"BR"之后,配置又移动回来了。(ip,掩码,网关都正确。dns似乎只抄了第一个,其他的会漏掉)。
- 创建,移除,实体机会有短暂的断网(几秒),会自行恢复。
- "内部" 即 VMware 的 Host 网络,客户机和宿主机可以互访。这个模式配合ICS或RRAS可以做NAT模式。
- 创建了"内部网络", 宿主机(实体机)中,会出现vEthernet类型的虚拟网卡。可以手工配置为静态IP(网关留空即可。做法是: 在实体机的网卡配置,ipv4设置中,配置静态ip,掩码,dns)。
- "内部" 且在宿主机的外网网卡上(点右键,选属性)启用ICS"网络共享",则变成VMware的 NAT 网络。
在宿主机外网网卡的共享选项卡里,有个设置,可以设置端口映射。(似乎没有IPv6)
ICS的网络共享,似乎每十几天会自己断掉。需要"取消共享",再"重新设置共享"才能恢复。
把"服务"中的Internet Connection Sharing (ICS)
和Application Layer Gateway Service
从"手动"改为"自动",也没用。win2016重启后,共享还是丢失。- 如果是Windows server版,可以选择用ICS,也可以选择用RRAS NAT来共享网络。建议用RRAS。
- "专用网络" 类似 VMware 的 Host 网络,客户机不能访问外网。客户机也不能访问宿主机。无法作为NAT模式访问外网。
- 创建了"专用网络", 宿主机(实体机)中,不会出现对应的虚拟网卡。如果出现了,也是被禁用的(无法启用)。
- "外部" 即 VMware 的 桥接 网络,共用网卡。
新建虚拟机(客户机)
- 没什么特别。请参考网上文章。
- Windows 上的 Hyper-v 支持的 Linux 和 FreeBSD 虚拟机
- Linux VMs 优化 for Hyper-V
- 如果要使用Hyper-V的动态内存,centos/Debian要装一个
hyperv-daemons
的包来支持。
- 如果要使用Hyper-V的动态内存,centos/Debian要装一个
- 如果装CentOS-7(内核3.10),装CentOS-8(内核是4.18),缺省就带
hyperv_keyboard,hyperv_fb,hid_hyperv,hv_vmbus,hv_utils,hv_balloon,hv_netvc,hv_storvsc
这几个内核模块。7和8都支持hyper-v的动态内存。
客户机的NAT,从使用ICS,改为使用RRAS
使用了ICS一段时间,非常不好。宿主机重启,NAT就丢失。宿主机即使不重启,大概过个60-90天,NAT也会丢失。
既然是Windows server2016,尝试改用RRAS。
-
安装RRAS
- 服务器管理器 -> 仪表板 -> 添加角色和功能 ....
- "服务器角色"中, 勾上"远程访问"(Remote access),
- 安装RRAS,参考【Windows Server 2016软路由配置】,【将Windows Server 2012 R2配置为路由器】,【在Windows Server 2016设置VPN及NAT】
- 远程安装RRAS时,安装过程不断网,不重启。
- 如果安装失败,提示
远程管理(WinRM)没有运行
,则去本地服务中找到Windows Remote Management(WS-Management)
从"禁用"改为"自动"。再去安装RRAS。
-
配置RRAS
- 关闭 ICS 网络共享。(不关,会冲突)
- 在 "开始菜单" -> "Window管理工具" 中,找到 "路由和远程访问",进行配置。
- 首先在自己的机器名上,点击右键,选择"配置并启用路由和远程访问"。
- 在 IPv4 -> NAT 中,客户机在的网卡(hyper-v的内部网络),选择"专用接口连接到专用网络"。
即,vEthernet 的网卡,虚拟交换机创建的网卡。 - 在 IPv4 -> NAT 中,宿主机的网卡,选择"公用接口连接到Internet",并勾上"在此接口上启用NAT"。
即,实体机连接外网的网卡。 - 在 IPv4 -> NAT 中,宿主机的网卡,属性中,有"服务和端口"选项卡,可以设置端口映射。这个映射只有TCP/UDP协议选择。
端口映射,参考【Windows Server 2012 NAT端口转发】
- 客户机就能获取真实的"来源IP"。
- 每次增加,删除,修改了 NAT的端口映射,确定/应用之后,所有的映射都会被重置,10几秒后才恢复。
- 如果修改过 hyper-v 的虚拟交换机后,发现 NAT 不行。
可以"禁用路由和远程访问",然后再重新启用,第二步选择正确的vEthernet虚拟网卡,重新配置端口映射。就正常了。
-
完成。至少,宿主机重启后,NAT是会恢复/功能正常的。
-
那个去不掉的IIS,没什么用,还占用了80端口。可以关掉。
- 在系统的"服务"中,找到
World Wide Web 发布服务 (通过 Internet Information Services 管理器提供 Web 连接和管理)
,把"自动"改为"禁用"。
- 在系统的"服务"中,找到
win10专业版 安装Hyper-V
设置
->应用
->应用和功能
->(相关设置)程序和功能
->启动或关闭windows功能
。
勾选 Hyper-V ,确定,就会自动安装,期间会要求重启系统。(可以通过远程桌面安装)。
- 在"windows功能" 中,同时勾选 "linux子系统" 和 "hyper-v", 是没问题的,可以都装上,共存。
即,WSL 和 Hyper-V 的虚拟机,可以同时运行。
创建虚拟交换机
- 打开 Hyper-V 管理器 -> 虚拟交换机管理器。
- 不要删除默认的虚拟交换机。不使用它,或者把它改名为 "WAN" 使用。
- 创建两个 类型为 "内部" 的网络,名称选择 "WAN", "LAN"。
- win10的hyper-v 没有提供图形化界面的nat设置。只能使用命令行。
- 实现nat的另一个办法是用 ICS,网络连接共享。这个东西很不稳定。不建议用。
- 通常的例子:
以管理员身份打开 PowerShell。
Get-NetAdapter
查看网卡列表,获取InterfaceIndex。假设"WAN"对应的网卡为 34。
Get-NetIPAddress -Interfaceindex 34
查看某一个网卡的IP信息。假设网卡34的IP是 192.168.137.1。
Get-NetIPAddress -Interfaceindex 34 -IPAddress 192.168.137.1 |Remove-NetIPAddress
删除原来的ipv4地址。
New-NetIPAddress -IPAddress 192.168.22.123 -PrefixLength 24 -InterfaceIndex 34
在虚拟交换机"WAN"上,设置固定IPv4,用于网关IP。
如果 WAN 是由默认虚拟交换机改名的。因为本来就是nat网络,不用执行下面这句。
New-NetNat -Name WAN -InternalIPInterfaceAddressPrefix 192.168.22.0/24
在"WAN"上,创建nat网络。- 安装好vm客户机后,通常vm客户机会通过dhcp获取到 IP、网关、dns(网关IP)。
实际上dns并不工作。导致vm客户机能用IP访问外网,不能用域名访问外网。 - 另外,因为后续可能要在这个nat上做端口映射。建议vm客户机手工配置静态IP、网关、dns。
IP自己指定(192.168.22.xx),网关用上面的配置(192.168.22.123),dns配置为外部的dns server。
- 安装好vm客户机后,通常vm客户机会通过dhcp获取到 IP、网关、dns(网关IP)。
- 防止路由回环,一定要在启动op前设置。因为op的lan口运行了dhcpd。(影响本机无法上网,远程桌面掉线)。
在宿主机 win10 中,手动指定虚机交换机 LAN 对应的网卡的 IPv4 地址,去掉网关(即只填写IP和掩码,网关留空,DNS留空)。
否则,op启动后,这个网卡会通过op自动获取IP地址和网关。造成路由回环。导致远程桌面掉线。 - 相关命令介绍:
get-command | findstr "netipaddr"
查看包含NetIpAddr 的命令列表。
Get-VMSwitch
查看虚拟交换机列表。
Get-NetAdapter
查看网卡列表,获取InterfaceIndex。假设"WAN"对应的网卡为 34。
Get-NetIPAddress
查看所有网卡的IP信息。
Get-NetIPAddress -Interfaceindex 34
查看某一个网卡的IP信息。假设网卡34的IP是 192.168.137.1。
Get-NetIPAddress -Interfaceindex 34 -IPAddress 192.168.137.1 |Remove-NetIPAddress
删除原来的ipv4地址。
New-NetIPAddress -IPAddress 192.168.22.123 -PrefixLength 24 -InterfaceIndex 34
在虚拟交换机"WAN"上,设置固定IPv4,用于网关IP。
New-NetNat -Name WAN -InternalIPInterfaceAddressPrefix 192.168.22.0/24
在"WAN"上,创建nat网络。
Get-NetNat
查看已有的nat。
Remove-NetNat -Name LAN
删除名称为 LAN 的 nat。
如果在 cmd.exe 中执行c:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe get-netnat
。
安装openWRT虚拟机
帖子中OpenWRT简称为OP。
- 创建虚拟机,选第二代的话,听说性能更好。但第二代的硬盘只有SCSI,没有IDE,SATA。
op不支持scsi,所以只能选第一代。 - 网络适配器,要按顺序指定,先是 LAN 对应是 eth0,然后是 WAN 对应 eth1。
- op中,WAN指定为静态地址192.168.22.xx,网关是 192.168.22.123。填入自定义DNS。(对应上面虚拟交换机的IP和nat的设置)。
- win10 中 LAN 的网卡,手动指定的ip为 op 的lan口网段,一般是 192.168.1.xx。不要指定网关。
- 然后,可以用浏览器,通过 192.168.1.1 访问op。
- TTYD 终端的默认端口是 TCP/7681。只能用端口映射来开放外部访问。
如果你的ttyd不需要登陆,千万别映射到外面去。 - 如果想使用
ssh -R
做端口映射,给子网使用。
/etc/config/dropbear
要加上option GatewayPorts 'on'
或在web页设置这项,并且要用 ssh -R '*:1234'连。 - 配置op管理页允许外部访问后,可以考虑把虚拟交换机LAN的类型改为"专用",隐藏起来。
- 各个op版本,磁盘剩余空间。参考:【openwrt_21.02_img_空间扩容_改分区表大小】
- openwrt.cc 的 immortalwrt-x86-64,snapshots版,剩余空间 609MB,总空间720多M。
openwrt.cc 的 immortalwrt-x86-64,release版,剩余空间 118MB,总空间720多M。 - 官方 op-21.02-squashfs,剩余空间 84MB。ext4版, 剩余102MB。
- 官方 op-22.03-RC5-squashfs,剩余空间 81MB。
Dawneng/Actions-OpenWrt
的 20220701 LEDE版,剩余空间 380MB,总空间990多M。jiajiaxd/openwrt_x86
的 20220701 LEDE版(较全),剩余空间 24MB,总空间310多M。
- openwrt.cc 的 immortalwrt-x86-64,snapshots版,剩余空间 609MB,总空间720多M。
- hyper-v管理面板,发出"关机"指令,openwrt会迅速关机。如果使用kvm,则需要在op中装qemu-ga才行。
端口映射
- 只能用命令行设置。windows的映射只支持 TCP。
建议vm客户机是手工指定的,静态IP。防止IP变化,导致映射失效。
以管理员身份运行的 cmd 或 powershell 中。
netsh interface portproxy show v4tov4
查看所有的端口映射。
netsh interface portproxy show v4tov4|findstr "192.168.22.xx"
查看IP的端口映射。
netsh interface portproxy add v4tov4 listenport=9123 connectaddress=192.168.22.xx connectport=9123
xx为op的wan口地址。
netsh interface portproxy delete v4tov4 listenport=9456
如果要删除一个映射。
命令在:c:/Windows/System32/netsh.exe
。 - 客户机无法获取"来源IP",只能得到 NAT网关的IP。
- 在宿主机win10中,开放防火墙规则。
设置 -> 网络和Internet -> 状态 -> Windows防火墙 -> 高级设置, 中。
在 "入站规则" 中,新建规则,
端口 -> TCP, 绑定本机端口 9123 -> 允许连接 -> 勾上所有(域,专用,公用) -> 设置一个名称。
限制IP的访问,参考:【win10防火墙_只允许指定的IP访问自己】 - op中的应用,也要在op的防火墙规则中,开放op的WAN口的访问。
限制IP的访问,无法在op的防火墙中设置,因为无法获取真实的来源IP,永远显示来源IP是nat网关。只能在win10防火墙中做限制。
参考:【openwrt防火墙firewall】,【debian11_nftables_限制ipv6公网访问特定端口_centos8 仅允许部分IPv4访问_WEB】
hyper-v 保留端口
netsh.exe interface ipv4 show excludedportrange protocol=tcp
这个命令显示的端口范围,用不了。 注意避开它们。
映像文件转换格式
- 用 qemu-img 即可。
- 可以找 for windows 版的命令行。
- debain 装
apt install qemu-utils
包即可。 - centos8 装
yum install qemu-img
即可。
qemu-img -h
查看帮助。resize 是改映像大小,convert 是改格式。
qemu-img info 映像文件名
查看文件的格式类型。
支持 img(raw), vhdx, vmdk, vdi, qcow, qcow2, dmg, ... 等很多格式,互相转换。- 例子,
qemu-img resize -f raw 映像文件名.img +200M
qemu-img convert -f raw -O vhdx 输入的映像名.img 输出的映像名.vhdx
Hyper-v 虚拟化嵌套
- hyper-v 需要每个vm客户机分别设置,只能用命令行。
- 【Hyper-v 开启嵌套虚拟化的方法】
【Windows Server 2016 Hyper-v 嵌套虚拟化技术】 - 以管理员身份运行Windows PowerShell.
Get-VM
查看vm客户机名称。Get-VMProcessor -VMName vmname | fl
查看虚拟机的cpu,看ExposeVirtualizationExtensions
这项,是否为 True。Set-VMProcessor -VMName vmname -ExposeVirtualizationExtensions $true
。- 修改之后,vm客户机可能启动不了。试试重启整个windows。微软的东西就是这么奇葩。