请问在 NAT64 网络下怎么创建套接字(知道对方 ipv4 地址)?

2022-12-02 00:53:10 +08:00
 opentrade

苦于手头没有 NAT64 网络可以测试

是本地创建一个 Ipv6Addr::UNSPECIFIED 的套接字,然后再 connect 到对方 ipv4 地址吗?还是我这边需要对 ipv4 地址做个转换,比如 IPv4-mapped addresses 。

1449 次点击
所在节点    程序员
5 条回复
Jirajine
2022-12-02 01:31:48 +08:00
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 家宽一模一样。
opentrade
2022-12-02 10:51:15 +08:00
@Jirajine 谢谢你的讲解,我们的具体问题是我知道对方 ipv4 地址,没有 dns 的帮忙,怎么把它转换为 ipv6 地址?还是说直接自己转换,像这样,https://iplocation.io/ipv4-to-ipv6/1.1.1.1
Jirajine
2022-12-02 12:31:18 +08:00
@opentrade 可以自己转换,但这样不太规范。虽然一般都用 64:ff9b::/96 这个段,但这个是可以任意配置的。你可能得用一些 heuristic 的方式如先尝试连接某个域名,再探测网关返回的前缀,但网关其实是可以为不同 ip 返回不同前缀的。
我想到的一个简单的 workaround 是利用类似 nip.io 的公网服务,如对方地址是 1.1.1.1 ,我直接连接 1.1.1.1.nip.io 这个域名就可以了。
opentrade
2022-12-02 13:06:47 +08:00
@Jirajine 谢谢, 感觉这个 workaround 非常靠谱
opentrade
2022-12-12 20:32:25 +08:00
@Jirajine nip.io 这个服务稳定吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/899484

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX