Herramientas de configuración de pila de red

El sistema operativo Android contiene utilidades de red estándar de Linux. como ifconfig, ip y ip6tables. Estas utilidades residen en la imagen del sistema y habilitan la configuración de la toda la pila de redes de Linux. En dispositivos con Android 7.x y versiones anteriores, haz lo siguiente: proveedor tiene permitido llamar a estos objetos binarios directamente, lo que presenta el los siguientes problemas:

  • Debido a que las utilidades de red se actualizan en la imagen del sistema, no proporcionan una implementación estable.
  • El alcance de las utilidades de redes es tan amplio que es difícil evolucionar la imagen del sistema y, al mismo tiempo, garantizar un comportamiento predecible.

En dispositivos que ejecutan Android 8.0 y versiones posteriores, la partición del proveedor sigue siendo la misma. mientras la partición del sistema recibe una actualización. Para lograrlo, Android 8.0 permite definir una interfaz estable con control de versiones y, al mismo tiempo, usar Restricciones de SELinux para mantener la interdependencia del proveedor y la imagen del sistema en un que ya conocemos.

Los proveedores pueden usar las utilidades de configuración de red proporcionadas por la plataforma para configurar la pila de redes de Linux, pero estas utilidades aún no incluyen Wrapper de la interfaz HIDL Para definir esta interfaz, en Android 8.0 se incluye la netutils-wrapper-1.0.

Wrapper de Netutils

La utilidad del wrapper netutils proporciona un subconjunto de la interfaz de usuario configuración de la pila de red que no se ve afectada por las actualizaciones de la partición del sistema. Android 8.0 contiene la versión 1.0 de los wrappers, que te permite pasar los los mismos argumentos que las utilidades unidas, instaladas en la partición del sistema en /system/bin de la siguiente manera:

u:object_r:system_file:s0           /system/bin/ip-wrapper-1.0 -> netutils-wrapper-1.0
u:object_r:system_file:s0           /system/bin/ip6tables-wrapper-1.0 -> netutils-wrapper-1.0
u:object_r:system_file:s0           /system/bin/iptables-wrapper-1.0 -> netutils-wrapper-1.0
u:object_r:system_file:s0           /system/bin/ndc-wrapper-1.0 -> netutils-wrapper-1.0
u:object_r:netutils_wrapper_exec:s0 /system/bin/netutils-wrapper-1.0
u:object_r:system_file:s0           /system/bin/tc-wrapper-1.0 -> netutils-wrapper-1.0

Los vínculos simbólicos muestran las utilidades de red unidas por netutils. wrapper, que incluyen lo siguiente:

  • ip
  • iptables
  • ip6tables
  • ndc
  • tc

Para usar estas utilidades en Android 8.0 y versiones posteriores, las implementaciones de los proveedores deben cumplir con las siguientes reglas:

  • Los procesos del proveedor no deben ejecutarse /system/bin/netutils-wrapper-1.0 directamente; intenta hacerlo se produce un error.
  • Se deben iniciar todas las utilidades unidas por netutils-wrapper-1.0 con sus symlinks. Por ejemplo, cambia el código del proveedor que hiciste antes. (/system/bin/ip <FOO> <BAR>) a /system/bin/ip-wrapper-1.0 <FOO> <BAR>
  • La ejecución de los wrappers sin transición al dominio está prohibida en la plataforma Política de SELinux. Esta regla no se debe cambiar y se prueba en el Conjunto de pruebas de compatibilidad (CTS) de Android.
  • Ejecutar las utilidades de forma directa (p.ej., /system/bin/ip <FOO> <BAR>) de los procesos del proveedor en las políticas de SELinux de la plataforma. Esta regla no debe y se prueba en el CTS.
  • Cualquier dominio del proveedor (proceso) que necesite iniciar un wrapper debe agregar el siguiente regla de transición de dominio en la política SELinux: domain_auto_trans(VENDOR-DOMAIN-NAME, netutils_wrapper_exec, netutils_wrapper)

Filtros de wrapper de Netutils

Las utilidades unidas se pueden usar para configurar casi cualquier aspecto de la arquitectura en la pila de herramientas de redes. Sin embargo, para garantizar que sea posible mantener y permitir actualizaciones de la partición del sistema, solo se pueden usar de argumentos de línea de comandos. otros comandos se rechazan.

Interfaces y cadenas de proveedores

El wrapper tiene un concepto de interfaces de proveedores. Estas son interfaces normalmente, se gestionan mediante el código del proveedor, como las interfaces de datos móviles. Normalmente, las HAL y las HALs. en un framework de aplicaciones. El wrapper reconoce las interfaces del proveedor por su nombre (mediante un expresión) y permite que el código del proveedor realice muchas operaciones en ellos. En la actualidad, las interfaces del proveedor son las siguientes:

  • Interfaces cuyos nombres terminan en "oem" seguido de un número, como oem0 o r_oem1234.
  • Interfaces utilizadas por las implementaciones actuales de SOC y OEM, como rmnet_data[0-9]

Nombres de interfaces que generalmente administra el framework (como wlan0) nunca son interfaces de proveedores.

El wrapper tiene un concepto similar de cadenas de proveedores. Se usan en los comandos iptables y también se reconocen por su nombre. Actualmente, cadenas de proveedores:

  • Comienza con oem_.
  • Se usan en implementaciones actuales de SOC y OEM, p.ej., cadenas que comienzan en nm_ o qcom_.

Comandos permitidos

A continuación, se enumeran los comandos permitidos actualmente. Las restricciones se implementan un conjunto de expresiones regulares en las líneas de comandos ejecutadas. Para obtener más información, consulta a system/netd/netutils_wrappers/NetUtilsWrapper-1.0.cpp.

IP

El comando ip se usa para configurar direcciones IP, enrutamiento, IPsec encriptación y otros parámetros de red. El wrapper permite los siguientes comandos:

  • Agregar y quitar direcciones IP de las interfaces administradas por el proveedor
  • Configurar la encriptación con IPsec

iptables e ip6tables

Los comandos iptables y ip6tables se usan para configurar el firewall, la modificación de paquetes, la NAT y otros tipos de procesamiento por paquete. El wrapper permite los siguientes comandos:

  • Agregar y borrar cadenas de proveedores
  • Agrega y borra reglas en cualquier cadena que haga referencia a los paquetes que ingresan (-i) o de (-o) una interfaz de proveedor.
  • Pasa a una cadena de proveedores desde cualquier punto de cualquier otra cadena.

NDC

ndc se usa para comunicarse con el daemon netd que realiza la mayor parte de la configuración de red en Android. El wrapper permite lo siguiente comandos:

  • Crea y destruye redes de OEM (oemXX).
  • Agrega interfaces administradas por proveedores a redes de OEM.
  • Agrega rutas a redes de OEM.
  • Habilita o inhabilita el reenvío de IP de forma global y en las interfaces de los proveedores.

tc

El comando tc se usa para configurar la cola de tráfico y la forma en las interfaces del proveedor.