Tools für die Konfiguration von Netzwerk-Stacks

Das Android-Betriebssystem enthält Standard-Linux-Netzwerkdienstprogramme. z. B. ifconfig, ip und ip6tables. Diese Dienstprogramme befinden sich auf dem System-Image und ermöglichen die Konfiguration der den gesamten Linux-Netzwerk-Stack. Auf Geräten mit Android 7.x und niedriger Anbietercode ist berechtigt, diese Binärdateien direkt aufzurufen, wodurch die folgenden Problemen:

  • Da Netzwerkdienstprogramme im System-Image aktualisiert werden, für eine stabile Implementierung.
  • Der Umfang der Netzwerkdienstprogramme ist so breit, dass es schwierig ist, System-Image zu speichern und ein vorhersehbares Verhalten zu gewährleisten.

Auf Geräten mit Android 8.0 und höher bleibt die Anbieterpartition unverändert. während die Systempartition aktualisiert wird. Um dies zu erreichen, wurde Android 8.0 können Sie eine stabile, versionierte Oberfläche definieren und gleichzeitig SELinux-Einschränkungen, um die Abhängigkeit von Anbieter und System-Image gutes Set kennen.

Anbieter können die von der Plattform bereitgestellten Dienstprogramme zur Netzwerkkonfiguration nutzen, den Linux-Netzwerkstack konfigurieren, aber diese Dienstprogramme enthalten noch kein HIDL-Schnittstellen-Wrapper. Um eine solche Schnittstelle zu definieren, enthält Android 8.0 die netutils-wrapper-1.0-Tool.

Netutils-Wrapper

Das Wrapper-Dienstprogramm netutils bietet einen Teil des Konfiguration des Netzwerk-Stacks, die nicht von Updates der Systempartition betroffen ist. Android 8.0 enthält Version 1.0 der Wrapper, mit denen Sie den dieselben Argumente wie die umschlossenen Dienstprogramme, die in der Systempartition unter /system/bin so:

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

Symlinks zeigen die Netzwerkdienstprogramme an, die vom netutils umschlossen werden. Wrapper mit Folgendem:

  • ip
  • iptables
  • ip6tables
  • ndc
  • tc

Um diese Dienstprogramme in Android 8.0 und höher verwenden zu können, müssen die Anbieterimplementierungen müssen folgende Regeln eingehalten werden:

  • Zulieferunternehmen dürfen keine /system/bin/netutils-wrapper-1.0 direkt; versuchen, dies zu tun zu Fehlern führt.
  • Alle von netutils-wrapper-1.0 umschlossenen Dienstprogramme müssen gestartet werden über ihre Symlinks. Ändern Sie beispielsweise den Anbietercode, der dies zuvor getan hat. (/system/bin/ip <FOO> <BAR>) bis /system/bin/ip-wrapper-1.0 <FOO> <BAR>.
  • Die Ausführung der Wrapper ohne Domainumstellung ist auf der Plattform nicht zulässig SELinux-Richtlinie. Diese Regel darf nicht geändert werden und wird im Android Compatibility Test Suite (CTS)
  • Dienstprogramme direkt ausführen (z.B. /system/bin/ip <FOO> <BAR>) von den Anbieterprozessen ist auch in den SELinux-Richtlinien der Plattform nicht zulässig. Diese Regel darf nicht geändert und in CTS getestet.
  • Jede Anbieterdomain (Prozess), die einen Wrapper starten muss, muss den Parameter folgende Regel für den Domainwechsel in der SELinux-Richtlinie: domain_auto_trans(VENDOR-DOMAIN-NAME, netutils_wrapper_exec, netutils_wrapper)

Netutils-Wrapper-Filter

Mit verpackten Dienstprogrammen können fast alle Aspekte des Linux-Systems Ihres Netzwerk-Stacks. Um jedoch eine stabile und Updates der Systempartition zulassen, sind nur bestimmte Kombinationen von Befehlszeilenargumenten sind zulässig. andere Befehle werden abgelehnt.

Benutzeroberflächen und Ketten von Anbietern

Der Wrapper beruht auf dem Konzept von Anbieteroberflächen. Das sind Schnittstellen, in der Regel über Anbietercode wie mobile Datenschnittstellen verwaltet werden. Normalerweise andere Schnittstellen (z. B. WLAN) von den HALs und den Framework. Der Wrapper erkennt Anbieteroberflächen anhand des Namens (mit einem regulären Ausdruck) und ermöglicht es dem Anbietercode, viele Vorgänge darauf auszuführen. Derzeit gibt es folgende Schnittstellen für Anbieter:

  • Schnittstellen, deren Namen auf "oem" enden gefolgt von einer Zahl wie oem0 oder r_oem1234.
  • Schnittstellen, die von aktuellen SOC- und OEM-Implementierungen verwendet werden, z. B. rmnet_data[0-9]

Namen von Schnittstellen, die in der Regel vom Framework verwaltet werden (z. B. wlan0) sind niemals Anbieterschnittstellen.

Der Wrapper nutzt ein ähnliches Konzept von Anbieterketten. Diese werden verwendet, in iptables-Befehlen und werden auch namentlich erkannt. Derzeit Zulieferketten:

  • Beginnen Sie mit oem_.
  • werden von aktuellen SOC- und OEM-Implementierungen verwendet, z.B. Ketten nm_ oder qcom_.

Zulässige Befehle

Derzeit zulässige Befehle sind unten aufgeführt. Einschränkungen werden über eine Reihe regulärer Ausdrücke in den ausgeführten Befehlszeilen. Weitere Informationen finden Sie unter an system/netd/netutils_wrappers/NetUtilsWrapper-1.0.cpp.

IP-Adresse

Mit dem Befehl ip werden IP-Adressen, Routing und IPsec konfiguriert Verschlüsselung und einige andere Netzwerkparameter. Der Wrapper ermöglicht den folgenden Befehle:

  • Fügen Sie IP-Adressen von Anbietern verwalteten Schnittstellen hinzu oder entfernen Sie sie.
  • Konfigurieren Sie die IPsec-Verschlüsselung.

iptables und ip6tables

Die Befehle iptables und ip6tables werden verwendet, um Firewalls, Paketverwaltung, NAT und andere Verarbeitung einzelner Pakete konfigurieren. Der Wrapper ermöglicht die folgenden Befehle:

  • Hinzufügen und Löschen von Anbieterketten
  • Fügen Sie Regeln in jeder Kette hinzu, die auf Pakete verweist, (-i) oder von (-o) einer Anbieteroberfläche.
  • Sie können an jeder beliebigen Stelle in einer beliebigen anderen Kette zu einer Lieferantenkette springen.

NDC

ndc wird für die Kommunikation mit dem netd-Daemon verwendet, die meisten Netzwerkkonfigurationen unter Android ausführt. Der Wrapper ermöglicht Folgendes: Befehle:

  • Erstellen und löschen Sie OEM-Netzwerke (oemXX).
  • Fügen Sie OEM-Netzwerken anbieterverwaltete Schnittstellen hinzu.
  • Fügen Sie Routen zu OEM-Netzwerken hinzu.
  • Aktivieren oder deaktivieren Sie die IP-Weiterleitung global und auf Anbieterschnittstellen.

TC

Mit dem Befehl tc können Sie Traffic-Warteschlangen und ‐Formulierungen konfigurieren zu Anbieteroberflächen.