IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 苹果应用提审与NAT64 -> 正文阅读

[网络协议]苹果应用提审与NAT64

背景、如何开启NAT64的网络

背景是苹果要求应用支持 Supporting IPv6 DNS64/NAT64 Networks

1. Make sure your Mac is connected to the Internet, but not through Wi-Fi.
2. Launch System Preferences from your Dock, LaunchPad, or the Apple menu.
3. Press the Option key and click Sharing. Don’t release the Option key yet.
4. Select Internet Sharing in the list of sharing services.
5. Release the Option key.

上面的地址已经非常详细了,注意点:

  1. 要按住键盘上的 option 按钮去打开分享界面,才会看到 Create NAT64 Network 的选项。
  2. 需要有一个 连着网线 的 Mac 。

遇到的问题

我们的应用有一部分功能依赖了webrtc,需要用户端和服务端建立点对点的连接,在NAT64的网络下,看日志是客户端一直在send stun ping(stun ping 客户端向服务端发起的udp的请求),错误码是22(An incorrect argument was specified.)
拿到日志和错误码后,我拿着对应的ip和端口,模拟了同样的udp请求,错误码是51 (The network cannot be reached.)

观察了一下,mac+nat64+udp有如下表现:

只连接wifi,udp数据包发不出去

v4-wlan0 的子网掩码 Mask为 255.255.255.255

v4-wlan0  Link encap:UNSPEC  
          inet addr:192.0.0.4  P-t-P:192.0.0.4  Mask:255.255.255.255 
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1472  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0 
          TX packets:1811 errors:0 dropped:0 overruns:0 carrier:0 
          collisions:0 txqueuelen:500 
          RX bytes:0 TX bytes:953375

有如下推论:

  1. 这意味着ipv4的数据包发不出本机,等于说ipv4的请求只能本地使用;
  2. 能发出去,但是不可访问,The network cannot be reached 51其实是对的;
  3. ipv4发不出去,等于tcp和udp都发不出去,切换到tcp也无济于事;
  4. wireshark抓到的少量ipv4的包,我理解是切换网络遗留的信息;

域名解析是是正常的

# 服务端
nc -l -u 5000

# 客户端
nc -u yeshen.org 5000

wireshare 抓包能看到如下信息:

fe80::8bf7->fe80::fa66==Standard query 0x5452 AAAA yeshen.org
fe80::fa66->fe80::8bf7==Standard query response 0x5452 AAAA yeshen.org AAAA 
2001:2:0:1baa::7659:3597
fe80::8bf7->fe80::fa66==Standard query 0x0ab7 A yeshen.org
fe80::fa66->fe80::8bf7==Standard query response 0x0ab7 A yeshen.org A 118.89.53.151

我观察:

  1. 当我用ipv6的协议,去访问 2001:2:0:1baa::7659:3597,请求正常,服务端收到的ip包也是正常的ipv4的包;
  2. 快速开关/切换网络,会滞后出现无法连接 -> 我理解是DNS解析存在缓存。

我理解:

  1. 我的设备的ip是fe80::8bf7,询问 fe80::fa66 (mac上模拟网关bridge100),bridge100充当了dns解析的作用,返回了信息。
  2. nc询问了两次,query A、query AAAAA,我这个yeshen.org的域名是没有ipv6的,网关做了适配。我理解是如下适配:
1. ip地址16进制转化:118.89.53.151 -> 7659:3597
2. 增加网关前缀 `2001:2:0:1baa::`

部分VPN(我使用的)无法兼容

(观察到)

  1. 在NAT64下,开vpn有概率提示拉不到配置;
  2. 在NAT64下,开VPN,和没开差别不大,都是无法访问;

解决问题的方法

通过上面的观察,我理解解决方法有几种:

  1. 客户端兼容:通过dns查询到nat64网关的前缀+转化下ipv4,主动拼接一下。
  2. 服务端提供域名,弃用只提供ipv4的信息的方式,dns64 会自己做转化。
  3. 服务端主动 拼接方式1中可选的ipv6地址,客户端逐一尝试。

讨论

最后讨论一点,2001:2:0:1baa::这个前缀是不是所有苹果NAT64都公用的前缀?
目前我的两部电脑+同事的电脑+网络搜到的问题 ,基本上都是这个前缀.
不知道苹果审核是不是也是如此?

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-05-05 11:56:47  更:2022-05-05 11:58:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 1:57:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码