Tours

La app de iOS, a fondo

13 min de lecturaView as markdown ↗

Esta es la inmersión a fondo: cada pantalla de URnetwork en iPhone y iPad, los ajustes con sus valores de fábrica y el conocimiento de resolución de problemas que suele vivir en la cabeza de un ingeniero de soporte. Para el camino de instalar a conectar, ver los primeros pasos en iOS; para el diseño de red que hay detrás de todo, la visión general.

Cómo está construida la app

Un solo proyecto de Xcode produce las apps de iOS y macOS. En tu dispositivo se ejecuta como dos procesos:

  • La app (bundle network.ur) es la interfaz que ves.
  • La extensión de túnel (network.ur.extension) es una Network Extension (NEPacketTunnelProvider) que el propio iOS arranca y supervisa. Tu tráfico se mueve por este proceso, no por la app: envuelve en cifrado lo que tu teléfono envía (el "túnel") antes de que salga del dispositivo. Cuatro cosas quedan fuera por configuración, como en cualquier VPN de iOS bien educada: tu red local (impresoras, AirPlay, dispositivos del hogar), las notificaciones push de Apple, los servicios de operadora como las llamadas por Wi-Fi, y el tráfico hacia tus propios dispositivos Apple cercanos.

Los dos hablan por un RPC de dispositivo local, así que tras un rearranque la app adopta el túnel vivo en lugar de tumbarlo y empezar de cero. Esta división es la razón de que la VPN siga funcionando cuando deslizas la app para cerrarla, y de que iOS te pida aprobar una configuración VPN la primera vez: la extensión es un componente gestionado por el sistema. Esa aprobación es el paso de consentimiento estándar de Apple para cualquier app de VPN. No concede ningún otro control sobre tu teléfono, y queda visible, y revocable, en Ajustes → General → VPN y gestión de dispositivos (Settings → General → VPN & Device Management).

La app necesita iOS 16.6 o posterior, y todo es código abierto en github.com/urnetwork. Ninguna auditoría independiente cubre el protocolo ni el código de servidor del operador, donde viven las afirmaciones de privacidad. Dos evaluaciones de terceros de 2025 cubren otras superficies: una prueba de penetración de la aplicación web y la API, y una evaluación MASA AL2 de Leviathan Security Group sobre la app de Android, que la superó. Ninguna cubre la app de iOS. El modelo de amenazas registra ambas y sus límites.

Las cuatro pestañas

La app son cuatro pestañas: Conectar (Connect), Cuenta (Account), Clasificación (Leaderboard) y Soporte (Support).

Conectar

La pantalla principal, de arriba abajo:

  • El globo. Una imagen en vivo de tu sesión. Conectado, muestra las ubicaciones por las que sale tu tráfico: donde internet te ve. Tu cliente mantiene varios proveedores a la vez, normalmente de tres a ocho, en dos ventanas en paralelo (una ventana de calidad que HTTPS prefiere y una ventana de velocidad para el resto), y fija cada sitio a uno. La imagen es plural a propósito mientras cualquier sitio web concreto sigue viendo una sola dirección estable. La visión general explica la ventana de proveedores al completo.
  • El botón de conectar. Un toque para conectar o desconectar.
  • El panel. Una hoja plegable bajo el botón que guarda tu ubicación seleccionada, las Opciones de conexión (Connect options), las gráficas de tráfico en vivo y el conmutador Bloquear anuncios y rastreadores (Block ads and trackers). Arrástrala hacia arriba para el contenido completo; tocar la pestaña Conectar cuando ya estás en ella vuelve a plegar el panel. Compartir conexión no está aquí. Vive en Cuenta → Ajustes.

Toca la tarjeta de ubicación para abrir la hoja Proveedores disponibles (Available providers). Abre con tus propios dispositivos, "Mejor proveedor disponible" (Best available provider) y países con un recuento en vivo de proveedores en línea. Teclea el nombre de un lugar en "Buscar proveedores" (Search providers) y los resultados ganan una sección de Ciudades (Cities): buscar es como se llega a la puntería de nivel ciudad, no desplazarse. Una ubicación se lista solo mientras el dispositivo de un miembro está en línea en ella, y la plataforma deriva la ciudad de la conexión que observa en lugar de fiarse de lo que el proveedor declare; una dirección que parece un centro de datos o una VPN se degrada en lugar de recibir confianza. "Mejor disponible" elige los proveedores mejor puntuados cerca de ti; una ubicación concreta te hace aparecer allí (las salidas cercanas suelen ser las más rápidas, porque la distancia cuesta latencia). Los proveedores son otros miembros compartiendo ancho de banda sobrante. Tu tráfico les llega ya cifrado, porque la web es HTTPS antes de entrar siquiera en el túnel, así que un proveedor ve adónde va el tráfico que transporta, como hace un ISP, pero no sus contenidos, y no tu dirección real.

Más abajo en el panel están las cuatro Opciones de conexión:

AjusteValor por defectoEfectoCoste principal
Modo de conexión (Connection Mode)AutoAuto ejecuta ambas ventanas de proveedores y encamina cada paquete a la que correspondeWeb o Streaming se comprometen con una sola ventana
IP fija (Fixed IP)DesactivadoEstrecha la ventana a un solo proveedor, así que todos los sitios ven una misma dirección estableRenuncia a la salida plural
Anonimización fuerte (Strong Anonymization)ActivadoProhíbe una ruta directa cliente-proveedor, así que el proveedor nunca ve tu IP realMás lento que la ruta directa
Cifrado poscuántico (Post Quantum Encryption)ActivadoSella la sesión de extremo a extremo hasta el proveedor, así que el operador transporta texto cifradoOmite los proveedores con los que no puede sellar
  • IP fija es seleccionable fuera de Auto.
  • Desactivar Anonimización fuerte es como se opta al modo directo: el salto anonimizador desaparece, tu cliente habla directamente con el proveedor, el rendimiento sube y ese proveedor pasa a ver tu dirección real. El valor por defecto protege tu identidad; gástala por velocidad solo si es lo que quieres.
  • Bloquear anuncios y rastreadores, en el mismo panel, está desactivado hasta que lo enciendas y filtra todo lo que transporta el túnel.
  • Entre los dos valores por defecto activados, un proveedor nunca sabe quién eres y el operador nunca lee lo que envías. Ambas cosas se cumplen sin tocar un ajuste, así que ninguna parte por sí sola reúne tu identidad y tu actividad.

Esos dos conmutadores y el valor de fábrica son el cuadro completo:

ModoEl operador veEl proveedor veValor por defecto y disponibilidad
Retransmitido selladotu cuenta y conexión de origen, en qué proveedores estás, y texto cifrado con su tiempo y volumenlos destinos que saca a internet y un id de dispositivo/contrato, no tu IP realel valor de fábrica: Cifrado poscuántico, activado en el panel de conexión
Retransmitido estándartu cuenta y conexión de origen, en qué proveedores estás, y los destinos y bytes de paquete del interiorlos destinos que saca a internet y un id de dispositivo/contrato, no tu IP realopcional: desactiva Cifrado poscuántico
Directomenos intervención en la retransmisióntu IP real y los destinos que saca a internetopcional: desactiva Anonimización fuerte

Lee la primera fila como el lugar donde estás por defecto. Mientras Cifrado poscuántico está activado, el cliente opera con fallo cerrado: un proveedor con el que no puede sellar una sesión se omite, no se usa en claro, así que lo que cuesta un desajuste es ese proveedor, no tu confidencialidad. Desactivar el ajuste es lo que te pone en la segunda fila. Ninguna app muestra todavía un veredicto de sellado-o-no por conexión, así que lo que te dice dónde estás es el ajuste, no la sesión. Límite: nada verifica que los proveedores que se te ofrecen sean independientes entre sí o del operador, y el operador puede ejecutar proveedores él mismo. El modelo de amenazas trabaja estas filas frente a adversarios con nombre, incluido un operador hostil, y es explícito sobre dónde falla cada una.

DNS personalizado

Bajo los detalles de la pestaña Conectar vive un panel de control de DNS completo. El DNS es la guía telefónica de internet, la consulta que convierte un nombre como ur.io en una dirección de red, y quien responde esas consultas (el resolvedor) ve el nombre de cada sitio que visitas. El valor por defecto es la disposición más segura: DNS cifrado sobre HTTPS, resuelto a través del túnel. Todo lo demás es un intercambio que puedes hacer:

  • DNS sobre HTTPS (remoto). DoH resuelto al otro lado del túnel. El valor por defecto, y el más privado: el resolvedor ve la dirección de un proveedor, no la tuya.
  • DNS sobre HTTPS (local). DoH resuelto directamente desde tu dispositivo.
  • DNS sin cifrar (remoto / local). DNS UDP clásico, por el túnel o directo desde el dispositivo, para redes y resolvedores que lo necesiten.
  • Respaldo de DNS local (Local DNS fallback). Hace competir a un resolvedor local mientras el túnel arranca, para que las consultas de nombres no se atasquen durante el handshake. Desactivado, el DNS solo se resuelve a través del túnel.

Puedes editar tú mismo las listas de resolvedores (URLs de DoH remotas y locales, servidores DNS remotos y locales, IPv4 e IPv6). Dos comodidades encima:

  • Recomendaciones por país. Se sabe que los ajustes más fuertes no funcionan en algunos países. Cuando te conectas a un lugar con una recomendación conocida, la pantalla lo dice y ofrece un "Usar ajustes recomendados" (Use recommended settings) de un toque, y una restauración de un toque de vuelta a los valores más seguros.
  • Servidores sugeridos. Una lista curada de servidores DNS remotos, con los sugeridos para tu país conectado marcados en su color. Activar uno lo añade a tu lista de resolvedores remotos.

Reglas de división

Las reglas de división te dejan encaminar tráfico concreto fuera del túnel o fijarlo en su sitio, a nivel de dominio e IP:

  • Conectado, la pantalla muestra la actividad de enrutamiento en vivo. Toca un dominio para encaminarlo en local (esquivando el túnel, con lo que ese sitio pasa a ver tu dirección real), o mantenlo en un solo proveedor para que ese sitio vea una dirección estable durante más tiempo en lugar de tu salida plural habitual. Útil para bancos e inicios de sesión que desafían cualquier cambio de dirección.
  • Las reglas se aplican a todo el grupo de red coasociado alrededor de un dominio, así que los hosts relacionados y el tráfico de CDN caen juntos en lugar de escaparse un subdominio cada vez.
  • Las reglas persisten y pueden quitarse en cualquier momento desde la misma pantalla.

Límite: el túnel dividido por aplicación no está disponible en iOS (Android y Windows lo tienen). iOS no da a las apps de VPN una vía soportada para incluir o excluir tráfico por app, así que en iPhone y iPad las reglas de división operan sobre dominios e IPs, no sobre apps.

Compartir conexión

Compartir tu ancho de banda sobrante es un selector de cuatro posiciones Compartir conexión (Provide mode) en Cuenta → Ajustes → Conexiones (Account → Settings → Connections), fijado en Nunca (Never) hasta que lo cambies:

ModoQué transporta
Nunca (Never)Nada. El valor por defecto.
AutoTráfico público mientras tú estás conectado; solo tus propios dispositivos cuando no
Siempre (Always)Tráfico público, conectado o no
Red (Network)Solo los dispositivos de tu propia red, sin pago. El compartir más estrecho que implementa la app

Algunas reglas básicas. Compartir usa solo Wi-Fi salvo que actives Permitir compartir en red móvil (Allow providing on cellular network) en la misma sección, así que nunca toca tu plan de datos por sorpresa. Corre dentro del proceso del túnel, así que sigue funcionando mientras el teléfono está inactivo. El tráfico que transportas son sesiones cifradas de otras personas: no puedes leerlo, y no puede tocar tu dispositivo. La aplicación de las normas contra el abuso corre en tu dispositivo en la salida, donde el tráfico parte hacia internet: BitTorrent y los patrones de ataque conocidos se descartan allí. El descarte no registra nada, ni destino, ni dominio, ni contenidos, aunque una coincidencia de BitTorrent en claro envía además al operador una señal que lleva el id de dispositivo y un booleano, nada más. El tráfico público que transportas se mide bajo contratos firmados, y los proveedores participan en el protocolo UR. ur.xyz documenta cómo funcionan las recompensas.

Cuenta

Tu identidad y tu plan viven aquí:

  • Plan. Gratuito o Pro, el saldo que te queda, la vía de mejora (Upgrade) y un total acumulado de lo que tu conexión ha transportado para la red.
  • Canjear código de saldo (Redeem Balance Code). Una concesión de datos de un solo uso, sin suscripción.
  • Perfil (Profile), Ajustes (Settings), Cartera (Wallet). Ajustes es el profundo: frase de recuperación, métodos de inicio de sesión, nombre del dispositivo, Conexiones (compartir conexión, el permiso de datos móviles, el kill switch (interruptor de corte), Ubicaciones bloqueadas (Blocked locations): países por los que nunca quieres salir), notificaciones, eliminación de la cuenta y un enlace "Usa el protocolo UR" (Uses the UR Protocol) a ur.xyz sobre cómo se recompensa a los proveedores.
  • Comprobar mi IP (Check my IP). Abre ur.io/ip, la forma de confirmar desde fuera de la app que tu tráfico de verdad está saliendo por otro lugar.
  • Identidad poscuántica (Post Quantum Identity). El panel de abajo, y la vía a las identidades de los proveedores a los que estás conectado.

El panel de identidad poscuántica

El panel al final de Cuenta muestra la identidad de tu dispositivo como un identicon (una imagen derivada de la clave, más fácil de comparar a ojo que el hexadecimal) con su hash de clave y su id de cliente debajo, cada uno copiable con un toque, una hoja de compartir y una baraja de los pares a los que estás conectado que abre la lista completa. Declara su propio propósito: si la clave de un par alguna vez se ve distinta de la almacenada en local, no se puede confiar en el operador de en medio. Esto hace comprobable la ceguera del operador.

El cifrado que nombra es el conmutador Cifrado poscuántico del panel de conexión, activado por defecto, así que tu cliente sella el tráfico directamente hasta el proveedor desde la primera conexión. La sesión es TLS 1.3 mutuamente autenticado con claves de X25519MLKEM768 (una curva clásica hibridada con el ML-KEM del NIST), de modo que el operador retransmite bytes que no puede leer. El lado que responde es oportunista: toda compilación actual de proveedor lo habilita, así que un mismo proveedor puede atender por igual a clientes sellados y sin sellar. Tu lado no lo es. Mientras el conmutador está activado el cliente opera con fallo cerrado, y un proveedor con el que no puede sellar una sesión se omite en lugar de usarse en claro. Ninguna app muestra todavía un veredicto de sellado-o-no por conexión. Las identidades siguen siendo Ed25519.

Clasificación

Rankings de los mayores proveedores por datos movidos. Si compartes, puedes aparecer aquí, en público o en privado, a tu elección.

Soporte

Titulada "Ponte en contacto" (Get in touch): una caja de comentarios, una valoración con estrellas, un conmutador opcional Adjuntar logs al comentario (Attach logs to feedback) y una invitación a Discord para ayuda en vivo. Los planes no están aquí; la mejora vive en la pestaña Cuenta.

Siri y Atajos

La app registra dos App Intents: Conectar URnetwork VPN (Connect URnetwork VPN) y Desconectar URnetwork VPN (Disconnect URnetwork VPN). Aparecen en la app Atajos (Shortcuts), funcionan por voz ("Oye Siri, conecta URnetwork") y se encadenan en automatizaciones, como conectar al salir de la Wi-Fi de casa.

Empezar sin correo, y la frase que lo conserva

Crear Cuenta instantánea (Create Instant Account) en la pantalla de inicio de sesión te da una red real y permanente en un toque. Sin correo, sin teléfono, sin contraseña, como dice la propia pantalla. Lo que la asegura en su lugar es una frase de recuperación (seedphrase): una lista de palabras que la plataforma genera y te muestra exactamente una vez, en la pantalla justo después de la creación, conservando después solo formas hash de ella. Guárdala en ese momento. Es la única forma de volver a entrar desde un dispositivo que no tenga ya la sesión iniciada. Mientras aún tengas uno que la tenga, Ajustes → Frase de recuperación (Settings → Seedphrase) acuña una frase nueva y retira la antigua. Con ella guardada, la cuenta sobrevive a una reinstalación o a un iPhone nuevo, con plan e historial intactos, cosa que una identidad local del dispositivo nunca hace. Nada de esto es de segunda clase: Ajustes → Métodos de inicio de sesión (Settings → Sign-In Methods) añade un correo, un teléfono, un inicio de sesión con Apple o Google, o una cartera a la misma red, conservando tu saldo de datos y tu historial. El anonimato está en la cuenta, no en el pago: una suscripción comprada en la app queda ligada a tu cuenta de Apple; un código de saldo, a nadie.

Resolución de problemas

La aprobación de la configuración VPN

La primera conexión pide añadir una configuración VPN. Si la rechazaste, el túnel no puede arrancar jamás. Apruébala en el siguiente intento de conexión, o revisa Ajustes → General → VPN y gestión de dispositivos, donde la configuración de URnetwork debería estar listada.

Varios perfiles de VPN, y cómo los gestiona la app

iOS puede acumular más de un perfil de VPN de URnetwork a lo largo de reinstalaciones y actualizaciones. La app cuenta con ello: al conectar enumera todos los perfiles, restablece y reintenta cualquiera que no arranque, y pasa al siguiente. Si un túnel ya está en marcha, lo adopta por el RPC de dispositivo en lugar de reiniciarlo. Los perfiles rotos se restablecen o eliminan, con un tope de eliminaciones para que la limpieza nunca se desboque, y toda operación sobre perfiles está acotada por plazos para que un demonio del sistema atascado no pueda colgar la app. Todo es automático. Se describe aquí solo para que la lista de perfiles de Ajustes tenga sentido cuando la mires.

"Failed to load VPN profiles" (error 12)

Si conectar falla con "Failed to load VPN profiles" (código de error 12), el almacén de preferencias de VPN del sistema se niega a enumerar perfiles, un estado que la app no puede reparar desde dentro. Arréglalo a mano:

  1. Abre Ajustes → General → VPN y gestión de dispositivos.
  2. Elimina la(s) configuración(es) VPN de URnetwork.
  3. Vuelve a la app y conecta. Se te pedirá aprobar una configuración nueva, y el túnel arranca limpio.

Cómo funciona aquí el kill switch

La app lleva un conmutador Kill switch en Cuenta → Ajustes → Conexiones, el mismo control del SDK que tiene toda app de URnetwork, desactivado hasta que lo enciendas. Activado, el cliente se niega a recurrir a tu ruta local, así que el tráfico se detiene en lugar de fugarse fuera del túnel. Lo que iOS no le da es aplicación a nivel de sistema operativo. La app no establece includeAllNetworks, así que si el proceso del túnel muere de forma inesperada, iOS restaura la red normal en lugar de bloquear el tráfico. La supervisión, los reintentos y la recuperación de perfiles mantienen sano el túnel, pero la app no le pide al sistema un fallo cerrado garantizado. Si tu modelo de amenazas exige una red con fallo cerrado garantizado, cuenta con ello.

Leer los logs del túnel

La extensión del túnel escribe en el log unificado del sistema, no en archivos. Para verlo:

  1. Conecta el dispositivo a un Mac y abre Console.app.
  2. Selecciona el dispositivo, y en el menú Acción activa Incluir mensajes de información (Include Info Messages) e Incluir mensajes de depuración (Include Debug Messages). Las líneas interesantes están en esos niveles.
  3. Filtra por el subsistema network.ur.extension o busca "URnetwork".

Reposo y comportamiento en segundo plano

El túnel está configurado con disconnectOnSleep desactivado: la VPN se mantiene a través del reposo del dispositivo en lugar de rehacer el handshake cada vez que la pantalla se bloquea. Con el diseño de dos procesos también sobrevive a que deslices la app para cerrarla. Desconectar es algo que haces con el botón, con Siri o quitando el perfil.

Adónde ir ahora