苦于手头没有 NAT64 网络可以测试
是本地创建一个 Ipv6Addr::UNSPECIFIED 的套接字,然后再 connect 到对方 ipv4 地址吗?还是我这边需要对 ipv4 地址做个转换,比如 IPv4-mapped addresses 。
1
Jirajine 2022-12-02 01:31:48 +08:00 1
NAT64 有两种:
一是配合 DNS64 为纯 ipv6 环境提供 ipv4 网络的访问。海外一些国家有提供的纯 ipv6 宽带使用这种方式,也有部分用户自己组建 ipv6 单栈局域网。这种情况网络就是纯 ipv6 的,只不过对解析 A 记录的域名,它会映射到一个 fake ipv6 地址,然后由上游网关 NAT 回去。 这种网络因为是纯 ipv6 网络,你只能连接 ipv6 地址或域名,不能连接任何 ipv4 地址。当然理论上你可以探测一下当前 DNS64 使用的前缀并自己构造转换后的 ipv4 mapped address ,但应该是不符合规范的,按照设计这个转换应由网关进行对应用层透明。 或者换一种 workaround ,使用或自己部署一个类似 https://nip.io/ 的公网服务,然后把 ip 地址包装成域名,这样网关就会帮你转换了。 第二种自然就是上一种的逆过程。常见于当 ISP 为你提供上一种的纯 ipv6 宽带接入时,为了兼容部分协议和能正常访问 ipv4 网络,在自家网关路由器上部署,为下层设备提供正常的 ipv4 内网和 NAT 访问。这种情况对下层设备来说和普通无公网 ip 的 NAT 家宽一模一样。 |
2
opentrade OP @Jirajine 谢谢你的讲解,我们的具体问题是我知道对方 ipv4 地址,没有 dns 的帮忙,怎么把它转换为 ipv6 地址?还是说直接自己转换,像这样,https://iplocation.io/ipv4-to-ipv6/1.1.1.1
|
3
Jirajine 2022-12-02 12:31:18 +08:00 1
@opentrade 可以自己转换,但这样不太规范。虽然一般都用 64:ff9b::/96 这个段,但这个是可以任意配置的。你可能得用一些 heuristic 的方式如先尝试连接某个域名,再探测网关返回的前缀,但网关其实是可以为不同 ip 返回不同前缀的。
我想到的一个简单的 workaround 是利用类似 nip.io 的公网服务,如对方地址是 1.1.1.1 ,我直接连接 1.1.1.1.nip.io 这个域名就可以了。 |