无法在 Windows 上的无线接口上使用 radvd 获取 IPv6 地址,有线接口工作正常

无法在 Windows 上的无线接口上使用 radvd 获取 IPv6 地址,有线接口工作正常

我将路由器设置为使用 OpenWRT,并将其设置为使用通过 SixXs 隧道的 IPv6。我在使用 radvd 进行无状态自动配置时遇到了问题。在我的计算机上,有线连接可以正常获取其 IPv6 地址,但无线连接却无法获取。

在 OpenWRT 论坛上花了一些时间后,我现在非常确定路由器设置正确,问题出在我的 Windows 设置上。此外,我在 openSUSE 11.3 上获取 IPv6 地址没有任何问题。

那么我应该怎么做才能解决这个问题以及我应该发布什么信息?

以下是有线接口的 radvdump 输出:

interface br-lan
{
        AdvSendAdvert on;
        # Note: {Min,Max}RtrAdvInterval cannot be obtained with radvdump
        AdvManagedFlag on;
        AdvOtherConfigFlag on;
        AdvReachableTime 0;
        AdvRetransTimer 0;
        AdvCurHopLimit 64;
        AdvDefaultLifetime 1800;
        AdvHomeAgentFlag off;
        AdvDefaultPreference medium;
        AdvSourceLLAddress on;

        prefix 2001:15c0:67d0::/64
        {
                AdvValidLifetime 86400;
                AdvPreferredLifetime 14400;
                AdvOnLink on;
                AdvAutonomous on;
                AdvRouterAddr off;
        }; # End of prefix definition

}; # End of interface definition

以下是无线接口的 radvdump 输出:

#
# radvd configuration generated by radvdump 1.6
# based on Router Advertisement from fe80::a0b7:deff:fef0:5b34
# received by interface br-lan
#

interface br-lan
{
        AdvSendAdvert on;
        # Note: {Min,Max}RtrAdvInterval cannot be obtained with radvdump
        AdvManagedFlag on;
        AdvOtherConfigFlag on;
        AdvReachableTime 0;
        AdvRetransTimer 0;
        AdvCurHopLimit 64;
        AdvDefaultLifetime 1800;
        AdvHomeAgentFlag off;
        AdvDefaultPreference medium;
        AdvSourceLLAddress on;

        prefix 2001:15c0:67d0::/64
        {
                AdvValidLifetime 86400;
                AdvPreferredLifetime 14400;
                AdvOnLink on;
                AdvAutonomous on;
                AdvRouterAddr off;
        }; # End of prefix definition

}; # End of interface definition
#
# radvd configuration generated by radvdump 1.6
# based on Router Advertisement from fe80::a0b7:deff:fef0:5b34
# received by interface br-lan
#

interface br-lan
{
        AdvSendAdvert on;
        # Note: {Min,Max}RtrAdvInterval cannot be obtained with radvdump
        AdvManagedFlag on;
        AdvOtherConfigFlag on;
        AdvReachableTime 0;
        AdvRetransTimer 0;
        AdvCurHopLimit 64;
        AdvDefaultLifetime 1800;
        AdvHomeAgentFlag off;
        AdvDefaultPreference medium;
        AdvSourceLLAddress on;

        prefix 2001:15c0:67d0::/64
        {
                AdvValidLifetime 86400;
                AdvPreferredLifetime 14400;
                AdvOnLink on;
                AdvAutonomous on;
                AdvRouterAddr off;
        }; # End of prefix definition

}; # End of interface definition

更新:我在路由器上使用 TP-LINK TL-WR1043ND v1.8 路由器和 Backfire 10.03.1-rc4 固件。

答案1

您能做的最好的事情就是确保在网络连接中,属性显示 TCP/IPv6 已启用,并且参数有意义。此外,注册表项中的
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters
DisabledComponents 应设置为零(如果此方法有效,则可能就是这种情况)。

如果所有检查都正确通过,那么唯一的解释就是 Windows 7 与您使用的 OpenWRT 版本不兼容。众所周知,微软不遵守标准,大多数路由器制造商都适应 Windows(而不是相反)。

OpenWRT 与 Linux(就您而言是 openSUSE)兼容是合乎逻辑的,因为两者可能都使用非常相似的软件。但 Windows 并非如此。

您没有提到路由器的品牌。但无论如何,如果制造商宣传其与 Windows 7 或 Vista 兼容,我建议您尝试从制造商的网站下载最新的固件。与 OpenWRT 相比,此固件可能更适合 Windows 7。

编辑1

我查看了您的路由器型号,并且我也认为它的固件不支持 IPv6。

最后一个通过在 /etc/radvd.conf 中添加“AdvLinkMTU 1440”解决了他的问题。

此外,您可以尝试禁用 Windows TCP/IP 自动调整:

netsh interface tcp set global autotuning=disabled

要恢复默认行为:

netsh interface tcp set global autotuning=normal

编辑2

一些标准的错误修复命令(首先创建系统还原点):

将 WINSOCK 条目重置为安装默认值:

netsh winsock reset catalog

将 IPv4 TCP/IP 堆栈重置为安装默认值。

netsh int ipv4 reset reset.log

将 IPv6 TCP/IP 堆栈重置为安装默认值。

netsh int ipv6 reset reset.log

重新启动机器。

答案2

这很奇怪,但是安装 SP1 for 7 可以为我解决该问题。

更新:不是真的。它只工作了一段时间,现在又坏了。

更新 2:我找到了问题所在。我需要在 radvd 中设置更短的路由器广告时间。结果发现,出于某种原因,当我同时连接有线和无线接口时,Windows 不会处理无线接口连接时发出的广告。radvd 的广告周期设置相当保守,所以我不得不手动设置较短的时间。这样,无线会错过第一个广告,但会捕获第二个广告并获取 IPv6 地址。

相关内容