家庭主机 (NAS) 有公网 IPv6 地址,相对固定。用户希望能够在一个 IPv4-only 的网络环境下远程访问 NAS 提供的服务:例如 ssh, VNC, Samba, RDP 等服务。
由于 IPv4 和 IPv6 本身是不兼容的:一个 IPv6-only 的 host 和一个 IPv4-only 的 host 无法仅通过 IP 地址和对方通信,因为 IPv6 的帧头部和 IPv4 的帧头部格式不一样,因此,我们需要利用一台同时是 IPv4 使能和 IPv6 使能的双栈 (DualStack) 机器来为这两台机器牵线搭桥,具体来说是扮演一个做网络地址转换 (NAT) 的中间人角色。
在本文中,我们探讨这种 NAT 的具体实现方式,以 vxlink 为例。
首先创建一个 vxlink 加速服务,注意要选择支持 IPv6 的节点(列表项中有显眼 IPv6 标识),一个 vxlink 加速服务本质上是一个 1-to-1 NAT, 具体运作方式如下:
vxlink 的加速服务强大的地方在于它是支持跨协议的 1-to-1 NAT 的,entry host 一般而言是 dual stack 使能的,也就是说 entry host 的 DNS 服务器支持解析它的 A 类型的资源记录,也支持解析它的 AAAA 类型的资源记录,同时 vxlink 的主机也是 dual stack 使能的。
一般而言我们可以将 dst port 选为 NAS 的 ssh 端口,方便后续用 ssh 进行进一步的操作。
服务创建成功后,我们应当可以用 vxlink 的地址 ssh 连接 NAS 了:
ssh -4 -i <keyfile-path> <user>@<vxlink-host> -p <vxlink-port>
我们发现,即便用了 -4 选项模拟 IPv4-only 环境,我们也能通过这行命令连上家里的 IPv6 主机,这也意味着当前主机到最终目的主机间的 4-to-6 NAT 实现成功了。
接下来我们可以将该条 ssh 连接命令中的参数保存在 ssh 用户配置文件,后续就可以以 ssh 快捷方式的方式使用它: