iOS14+为App自身开启加密DNS

647 阅读1分钟

苹果在iOS14推出了使用Network.framework的EncryptedDNS方案。

例子代码中没有objc实现,所以码了一下。

加密DNS可解决各种DNS劫持导致的App无法连接、内嵌网页显示异常等问题,会用此方案将当前App内的所有DNS请求使用阿里云HTTPDNS免费版进行解析。


if (@available(iOS 14.0, *)) {
    nw_privacy_context_t parameters = _nw_privacy_context_default_context;

    nw_endpoint_t address1 = nw_endpoint_create_host("223.5.5.5", "443");
    nw_endpoint_t address2 = nw_endpoint_create_host("223.6.6.6", "443");
    nw_endpoint_t address3 = nw_endpoint_create_host("2400:3200::1", "443");
    nw_endpoint_t address4 = nw_endpoint_create_host("2400:3200:baba::1", "443");

    nw_resolver_config_t resolverConfig = nw_resolver_config_create_https(nw_endpoint_create_url("https://223.5.5.5/dns-query"));
    nw_resolver_config_add_server_address(resolverConfig, address1);
    nw_resolver_config_add_server_address(resolverConfig, address2);
    nw_resolver_config_add_server_address(resolverConfig, address3);
    nw_resolver_config_add_server_address(resolverConfig, address4);
    nw_privacy_context_require_encrypted_name_resolution(parameters, true, resolverConfig);
}