为什么创建 Hyper-V 外部虚拟交换机后文件和打印共享失败?

为什么创建 Hyper-V 外部虚拟交换机后文件和打印共享失败?

我在 Hyper-V 下运行了几台虚拟机,用于测试。我使用 NIC 创建了一个“外部”虚拟交换机,以便虚拟机可以与主机 PC 一起访问互联网——创建交换机后,虚拟机和主机都可以访问互联网。但是,网络中其他 PC 到主机的文件和打印共享停止工作;在这种情况下,主机也用作文件服务器。

我从另一个尝试连接到主机的盒子进行了网络故障排除,并得到“文件和打印共享资源在线但没有响应连接尝试。”

我确实找到了这个文章,其中写道:

[当] 您创建一个名为“ExtSwitch”的外部虚拟网络交换机并将此虚拟交换机映射到名为“Intel(R) 82576 千兆双端口网络”的物理网络适配器时。单击“应用”按钮后,将在物理网络适配器的属性中处理以下更改:

  • 解除以下服务、协议和客户端的绑定:Microsoft 网络客户端、Microsoft 网络文件和打印共享、TCP/IP 协议 IPv4、TCP/IP 协议 IPv6、物理网络适配器属性中列出的任何其他服务、客户端或协议。
  • 绑定“Microsoft 虚拟网络交换机协议”

此外,在外部虚拟网络交换机(在本例中为 ExtSwitch)的属性中完成了以下更改:

  • 绑定以下服务、协议和客户端:Microsoft 网络客户端、Microsoft 网络文件和打印共享、TCP/IP 协议 IPv4 和 TCP/IP 协议 IPv6。
  • 解除绑定“Microsoft 虚拟网络交换机协议”。

看起来,“Microsoft 网络的文件和打印共享”应该重新绑定到新的外部交换机。

我应该指出,我最近已将 Creators 更新应用到我的所有机器上。

对于 Hyper-V 外部虚拟交换机,使用 NIC 会破坏同一连接上的文件和打印共享吗?

答案1

结论:禁用路由器中的 IPv6 解决了该问题。

我的解决方法是每当我重新启动运行 HyperV 的 PC 时运行此 PowerShell 脚本:

#Requires -RunAsAdministrator

# $name = "Ethernet 3"
$script:compid = "ms_server"

function Update-Binding
{
    Param(
        [Parameter(ValueFromPipeline = $true)]
        [Microsoft.Management.Infrastructure.CimInstance[]]
        $bindings
    )
    Process
    {
        # $bindings.Count

        foreach ($binding in $bindings)
        {
            write-output ("Before disabling {0}" -f $binding.name)
            Get-NetAdapterBinding -Name $binding.name -ComponentId $script:compid

            Disable-NetAdapterBinding -Name $binding.name -ComponentId $script:compid

            write-output ("After disabling {0}" -f $binding.name)
            Get-NetAdapterBinding -Name $binding.name -ComponentId $script:compid

            Start-Sleep -Seconds 3

            Enable-NetAdapterBinding -Name $binding.name -ComponentId $script:compid

            write-output ("After re-enabling {0}" -f $binding.name)
            Get-NetAdapterBinding -Name $binding.name -ComponentId $script:compid
        }
    }
}

<#
 # Get all ms_server bindings
 #>
Update-Binding -bindings (Get-NetAdapterBinding | ? { $_.ComponentID -eq $script:compid })

完成此操作后,文件共享将在网络上运行。

但是,我使用的是 WRT1900AC 路由器,在某处读到(时间已经过去很久了,我找不到参考资料。)在此路由器上启用 IPv6 会导致问题。因此,我在路由器中禁用了 IPv6,一切又恢复正常。也许你们这些网络专家可以解释为什么会这样。

我想尝试另一个启用了 IPv6 的路由器,看看问题是否仅仅出在 WRT1900AC 上,但我还没能做到。

相关内容