HarmonyOS 鸿蒙Next中vpn ipv6 路由添加无效

HarmonyOS 鸿蒙Next中vpn ipv6 路由添加无效 vpn配置设置

class Config {
  addresses: AddressWithPrefix[];
  mtu: number;
  dnsAddresses: string[];
  routes: Array<vpnExt.RouteInfo>;
  isIPv6Accepted: boolean;

  constructor(
    tunIp: string,
    tunIpv6: string,
  ) {
    this.addresses = [
      new AddressWithPrefix(new Address(tunIp, 1), 24),
      new AddressWithPrefix(new Address(tunIpv6, 2), 64),
    ];
    this.mtu = 1500;
    this.dnsAddresses = ["223.5.5.5"];
    this.routes = [];
    this.isIPv6Accepted = true;
  }
}

添加ipv6 路由

class RouteInfo {
  interface: string = "vpn-tun";
  destination: AddressWithPrefix;
  gateway: Address;
  hasGateway: boolean = true;
  isDefaultRoute: boolean = true;

  constructor(
    address: string,
    gateway: string,
    gatewayv6: string,
  ) {
    let ip = address.split("/")[0]
    let cidr = Number(address.split("/")[1])
    let family = 1;
    if(ip.indexOf(":")>0){ // ipv6
      family = 2;
    }
    this.destination = new AddressWithPrefix(new Address(ip, family), cidr)
    this.gateway = new Address(family == 2 ? gatewayv6:gateway, family)
  }
}

let config = new Config(this.tunIp,this.tunIpv6);
// 根据授权应用列表 添加实际路由
let routes = getPushRouteAppIPList(Env.apps, Env.controllerAddr);
for (const ip of routes) {
  hilog.info(0x0000, 'vpn', ' route add %{public}s', ip);
  config.routes.push(new RouteInfo(ip, this.tunIp, this.tunIpv6));
}

09-29 16:52:37.210 38907-38907 A00000/com.nsf…ag/developTag com.nsfocus.sag I vpn SetupVpn

09-29 16:52:37.210 38907-38907 A00000/com.nsfocus.sag/vpn com.nsfocus.sag I route add 10.66.248.186/32

09-29 16:52:37.210 38907-38907 A00000/com.nsfocus.sag/vpn com.nsfocus.sag I route add 10.66.210.224/32

09-29 16:52:37.210 38907-38907 A00000/com.nsfocus.sag/vpn com.nsfocus.sag I route add 10.66.33.124/32

09-29 16:52:37.210 38907-38907 A00000/com.nsfocus.sag/vpn com.nsfocus.sag I route add 10.66.210.188/32

09-29 16:52:37.210 38907-38907 A00000/com.nsfocus.sag/vpn com.nsfocus.sag I route add fd00:10:66:210::188/128 以下是我设置虚拟网卡设置ipv6地址后,调用官方接口获取所有网卡的IP信息。确保ipv6配置成功

cke_25973.png

cke_26659.png

路由,ipv6网卡配置 都是正常得。 但是通过vpn-tun网卡fd无法读到本地请求fd00:10:66:210::188得数据报。其他ipv4正常


更多关于HarmonyOS 鸿蒙Next中vpn ipv6 路由添加无效的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

在HarmonyOS鸿蒙Next中,VPN IPv6路由添加无效通常与系统网络栈配置或VPN服务实现有关。可能原因包括:系统IPv6支持未完全启用、VPN应用未适配鸿蒙网络接口、路由表权限限制或内核策略阻止。需检查VPN配置是否遵循鸿蒙网络规范,确认应用使用正确的NetworkManagement API。系统日志中可能出现NETLINK或ROUTE相关错误码。部分情况与SEPolicy安全策略有关。

更多关于HarmonyOS 鸿蒙Next中vpn ipv6 路由添加无效的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


从代码和日志分析,IPv6路由添加无效的问题可能出现在以下几个方面:

  1. 路由配置参数问题

    • 在RouteInfo构造函数中,IPv6路由的isDefaultRoute被设置为true,这可能导致路由优先级冲突。对于具体的IPv6路由,建议将isDefaultRoute设为false。
  2. 网关配置逻辑

    • 当前代码根据IP类型选择网关(IPv4用tunIp,IPv6用tunIpv6),但tunIpv6可能未正确配置为有效的IPv6网关地址。请确认tunIpv6是否是一个可路由的IPv6地址。
  3. 路由表生效验证

    • 虽然日志显示添加了fd00:10:66:210::188/128的路由,但系统可能未实际生效。建议在添加路由后,通过netmanager.getRoutes()接口验证路由表内容。
  4. 网络栈兼容性

    • HarmonyOS Next对IPv6的支持可能存在特定要求,确保所有IPv6地址格式符合RFC标准,且前缀长度(如/128)与网关匹配。

建议修改RouteInfo类,针对IPv6路由显式设置isDefaultRoute: false,并检查tunIpv6的配置是否正确。同时,在路由添加后打印实际的路由表进行对比调试。

回到顶部