V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
opentrade
V2EX  ›  程序员

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

  •  
  •   opentrade · 2022-12-02 00:53:10 +08:00 · 1470 次点击
    这是一个创建于 753 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    Jirajine
        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 家宽一模一样。
    opentrade
        2
    opentrade  
    OP
       2022-12-02 10:51:15 +08:00
    @Jirajine 谢谢你的讲解,我们的具体问题是我知道对方 ipv4 地址,没有 dns 的帮忙,怎么把它转换为 ipv6 地址?还是说直接自己转换,像这样,https://iplocation.io/ipv4-to-ipv6/1.1.1.1
    Jirajine
        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 这个域名就可以了。
    opentrade
        4
    opentrade  
    OP
       2022-12-02 13:06:47 +08:00
    @Jirajine 谢谢, 感觉这个 workaround 非常靠谱
    opentrade
        5
    opentrade  
    OP
       2022-12-12 20:32:25 +08:00
    @Jirajine nip.io 这个服务稳定吗?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1114 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 23:10 · PVG 07:10 · LAX 15:10 · JFK 18:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.