首页 > 解决方案 > iOS 网络扩展错误创建 TUN/TAP 接口 SIOCGIFMTU 失败:设备未配置

问题描述

目前正在开发一个网络扩展,它允许我使用OpenVPNAdapter库使用.ovpn文件使用 VPN 建立连接。我已将我的配置正确保存到系统设置中,并且在运行扩展程序以执行调试时,我的扩展程序状态从断开连接更改,保持连接一段时间然后断开连接。通过网络扩展进一步检查设备和过滤的控制台日志,我收到三个主要错误消息。

来自提供者的日志消息:TUN 错误:无法获取 tun 接口套接字

SIOCGIFMTU 失败:设备未配置

NEVirtualInterfaceAdjustReadBufferSize: interface_get_mtu failed (6), 默认为 max mtu

我现在不知道该去哪里,因为我正在使用设备上的控制台调试网络扩展。

标签: swiftvpnnetworkextension

解决方案


好的,我设法自己解决了这个问题。我创建了一个 Packet Tunnel 网络扩展,在我的 PacketTunnelProvider 类中出现了问题。它没有崩溃,因此在该类中设置调试器是不值得的。我运行了我的目标并启动了我的应用程序并在函数中设置了几个 NSLog,这样我就可以在设备的控制台中看到正在发生的事情。我的问题是我试图在字典中为一个键设置一个 nil 值,从而终止扩展。在控制台中可以很容易地看到该崩溃消息。

问题是在函数中扩展PacketTunnelProvider配置OpenVPNAdapterDelegate隧道时

func openVPNAdapter(_ openVPNAdapter: OpenVPNAdapter, configureTunnelWithNetworkSettings networkSettings: NEPacketTunnelNetworkSettings?, completionHandler: @escaping (OpenVPNAdapterPacketFlow?) -> Void) {
    networkSettings?.dnsSettings?.matchDomains = [""];
}

以前我是networkSettings.dnsSettings?.matchDomains = [""];这样networkSettings被打开的,这nil使得扩展程序崩溃并且隧道无法连接。


推荐阅读