一些家庭成员要求我帮助配置 WinSCP。他们需要连接多个服务器,其中一些是双栈的,一些是仅 IPv6 的。
到目前为止我们所做的工作如下:
- 从安装 WinSCPhttps://winscp.net/
- 生成密钥对
- 在窗口中保存了主机名和用户名的不同组合
Login
。
这对于连接双栈主机非常有用。但尝试连接任何仅 IPv6 的主机都会导致错误消息:
Host "hostname.example.net" does not exist.
但我使用的主机名是正确的。为了进一步调查,我将一台 Ubuntu 14.04 机器连接到同一个 LAN。然后在 Ubuntu 机器上输入:
ssh hostname.example.net
Ubuntu 机器毫无问题地连接到同一个主机名。
我查看了网络配置,在两台机器上都观察到了相同的情况:
- 无线接口具有 IPv4 地址
- 无线接口没有 IPv6 地址
- 有一个 Teredo 接口已成功获取正确的 IPv6 地址
我们需要连接的仅 IPv6 服务器位于具有专用 Teredo 中继的 LAN 上,因此应该可以建立可靠的连接,并且它确实可以从 Ubuntu 客户端运行。
为了成功连接到仅支持 IPv6 的主机,我们需要在 Windows 和/或 WinSCP 的配置中进行哪些更改?
(如果有更好的替代方案,则 Teredo 不是必需的。它恰好是 Windows 机器上默认配置的唯一 IPv6 地址。)
答案1
问题是 Windows 没有尝试任何 AAAA 查找,大概是因为当唯一的 IPv6 地址是 Teredo 地址时,执行 AAAA 查找是不值得的。
只要指定了明确的地址,IPv6 连接就可以正常工作。
因此,我设法通过将主机名字段中的名称替换为服务器的实际 IPv6 地址来获得连接。 完成后,WinSCP 便能够连接。
就我而言,服务器有静态 IPv6 地址(至少在它们与当前提供商合作期间)。因此,在 WinSCP 保存的登录信息中有一个静态 IPv6 地址并不是一个大问题。
答案2
正如 Microsoft 技术说明 (http://technet.microsoft.com/en-us/library/bb727035.aspx),如果唯一的本地 IPv6 接口是链路本地接口和 Teredo 接口,则 Windows Vista 或 Windows 7 客户端将不会查询 DNS 以获取 IPv6 地址(查询 DNS 名称以获取 AAAA 记录)换句话说,尽管 Teredo 可以在大量连接到 Internet 并位于 NAT 后面的终端系统上启用,但这些系统在正常情况下不会调用 Teredo 来访问仅限 IPv6 的 URL,因为它们不会向 DNS 查询要使用的 IPv6 地址。
但是,显然可以改变这种行为。在您最喜欢的注册表编辑器中,导航到该项并添加一个设置为的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Dnscache\Parameters
DWORD 值。AddrConfigControl
0
很遗憾,似乎没有关于此设置的任何官方文档。