osnosn

  博客园 :: 首页 :: 博问 :: 闪存 :: :: 联系 :: 订阅 订阅 :: 管理 ::

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模式访问外网。
      • 创建了"专用网络", 宿主机(实体机)中,不会出现对应的虚拟网卡。如果出现了,也是被禁用的(无法启用)。

新建虚拟机(客户机)

  • 没什么特别。请参考网上文章。
  • Windows 上的 Hyper-v 支持的 Linux 和 FreeBSD 虚拟机
  • Linux VMs 优化 for Hyper-V
    • 如果要使用Hyper-V的动态内存,centos/Debian要装一个hyperv-daemons的包来支持。
  • 如果装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),
      • 子项目中选择"路由(Routing)", 它会自动勾选"DirectAccess and VPN(RAS)"。后面还会装上一堆IIS的东西,不选还不行。
    • 安装RRAS,参考【Windows Server 2016软路由配置】,【将Windows Server 2012 R2配置为路由器】,【在Windows Server 2016设置VPN及NAT
    • 远程安装RRAS时,安装过程不断网,不重启。
    • 如果安装失败,提示远程管理(WinRM)没有运行,则去本地服务中找到Windows Remote Management(WS-Management) 从"禁用"改为"自动"。再去安装RRAS。
  • 配置RRAS

    • 关闭 ICS 网络共享。(不关,会冲突)
    • 在 "开始菜单" -> "Window管理工具" 中,找到 "路由和远程访问",进行配置。
      • 首先在自己的机器名上,点击右键,选择"配置并启用路由和远程访问"。
        • 启用时,选择"NAT网络"; 下一步,先选择宿主机(实体机)的实体网卡,或拨号网络; 再下一步,选择hyper-v的虚拟网卡(vEthernet)。
        • 这个时候,在 IPv4 -> 常规 中, hyper-v内部网络 对应的网卡,可能ip不对。重启整个宿主机,就正确了。
      • 在 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。
  • 防止路由回环,一定要在启动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。
  • 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。微软的东西就是这么奇葩。

转载注明来源: 本文链接 来自osnosn的博客.

posted on 2020-03-07 16:17  osnosn  阅读(2945)  评论(0编辑  收藏  举报