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
or_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_
oqcom_
.
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.