LondonX / clash_flt

Flutter Clash plugin
Other
41 stars 23 forks source link

关于IOS无法连接网络的问题 #23

Closed frost-lotus closed 2 months ago

frost-lotus commented 3 months ago

您好我想请教一下,我在使用clash_fit编译IOS的时候发现开启VPN之后无法连接上网络,而且Tun2Socks应该也是正常运行的,有输出以下结果:

Socks5Tunnel.run: 0

在关闭VPN之后发现可以正常联网,我根据 #21 里的讨论重新设置了全局代理之后好像也是没有作用:

class HttpProxy extends HttpOverrides {
  String? host;
  String? port;

  HttpProxy(this.host, this.port);

  @override
  HttpClient createHttpClient(SecurityContext? context) {
    var client = super.createHttpClient(context);
    client.badCertificateCallback =
        (X509Certificate cert, String host, int port) {
      return true;
    };
    return client;
  }

  @override
  String findProxyFromEnvironment(Uri url, Map<String, String>? environment) {
    if (host == null) {
      return super.findProxyFromEnvironment(url, environment);
    }

    environment ??= {};

    if (port != null) {
      environment['http_proxy'] = '$host:$port';
      environment['https_proxy'] = '$host:$port';
    } else {
      environment['http_proxy'] = '$host:8888';
      environment['https_proxy'] = '$host:8888';
    }

    return super.findProxyFromEnvironment(url, environment);
  }
}

HttpOverrides.global = HttpProxy("127.0.0.1", "7890");

同样的设置和yaml配置文件在Android上倒是可以正常运行,如果时间允许的话希望可以帮我解答一下OvO

LondonX commented 2 months ago

开了VPN后是App本身无法联网了还是其他App也无法联网了? 开了VPN之后试试DIRECT直连模式呢?

frost-lotus commented 2 months ago

开了VPN后是App本身无法联网了还是其他App也无法联网了? 开了VPN之后试试DIRECT直连模式呢?

是其他App也无法联网了,开了直连模式也是一样的

LondonX commented 2 months ago

可能是tun把自己的出站流量又给代理了,形成了loop? 可以看看你NEPacketTunnelProviderNEPacketTunnelNetworkSettings是怎么写的吗?

frost-lotus commented 2 months ago

可能是tun把自己的出站流量又给代理了,形成了loop? 可以看看你NEPacketTunnelProviderNEPacketTunnelNetworkSettings是怎么写的吗?

我是直接根据README提示copy的示例,给您看一下:

    private func initTunnelSettings(proxyHost: String, proxyPort: Int) -> NEPacketTunnelNetworkSettings {
        let settings = NEPacketTunnelNetworkSettings(tunnelRemoteAddress: "254.1.1.1")
        settings.mtu = 9000
        settings.ipv4Settings = {
            let settings = NEIPv4Settings(addresses: ["198.18.0.1"], subnetMasks: ["255.255.0.0"])
            settings.includedRoutes = [NEIPv4Route.default()]
            return settings
        }()
        settings.ipv6Settings = {
            let settings = NEIPv6Settings(addresses: ["fd6e:a81b:704f:1211::1"], networkPrefixLengths: [64])
            settings.includedRoutes = [NEIPv6Route.default()]
            return settings
        }()
        settings.dnsSettings = NEDNSSettings(servers: ["1.1.1.1"])
        settings.proxySettings = {
            let settings = NEProxySettings();
            settings.httpServer = NEProxyServer(address: "::1", port: proxyPort)
            settings.httpsServer = NEProxyServer(address: "::1", port: proxyPort)
            settings.httpEnabled = true
            settings.httpsEnabled = true
            settings.matchDomains = [""]
            return settings
        }()
        return settings
    }
LondonX commented 2 months ago

有点奇怪了,我重新试了一下example,并没有出现你这个情况啊,如果你没有改过iOS平台代码的话问题可能还是出在你的配置文件上?

另外我更新了一波依赖,已提交在 f338484,你可以拉下来编译example试试。