Alat Konfigurasi Tumpukan Jaringan

Sistem operasi Android berisi utilitas jaringan Linux standar seperti ifconfig , ip , dan ip6tables . Utilitas ini berada pada image sistem dan memungkinkan konfigurasi seluruh tumpukan jaringan Linux. Pada perangkat yang menjalankan Android 7.x dan lebih rendah, kode vendor diizinkan untuk memanggil biner ini secara langsung, sehingga menimbulkan masalah berikut:

  • Karena utilitas jaringan diperbarui pada citra sistem, utilitas tersebut tidak menyediakan implementasi yang stabil.
  • Cakupan utilitas jaringan sangat luas sehingga sulit untuk mengembangkan citra sistem sambil menjamin perilaku yang dapat diprediksi.

Pada perangkat yang menjalankan Android 8.0 dan lebih tinggi, partisi vendor tetap sama saat partisi sistem menerima pembaruan. Untuk mencapai hal ini, Android 8.0 menyediakan kemampuan untuk menentukan antarmuka yang stabil dan berversi serta menggunakan batasan SELinux untuk menjaga saling ketergantungan antara vendor dan citra sistem pada tingkat yang baik.

Vendor dapat menggunakan utilitas konfigurasi jaringan yang disediakan platform untuk mengkonfigurasi tumpukan jaringan Linux, namun utilitas ini belum menyertakan pembungkus antarmuka HIDL. Untuk mendefinisikan antarmuka seperti itu, Android 8.0 menyertakan alat netutils-wrapper-1.0 .

Pembungkus Netutils

Utilitas wrapper netutils menyediakan subset konfigurasi tumpukan jaringan Linux yang tidak terpengaruh oleh pembaruan partisi sistem. Android 8.0 berisi wrapper versi 1.0, yang memungkinkan Anda meneruskan argumen yang sama dengan utilitas yang dibungkus, yang dipasang di partisi sistem di /system/bin sebagai berikut:

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

Symlink menunjukkan utilitas jaringan yang dibungkus oleh netutils wrapper, yang meliputi:

  • ip
  • iptables
  • ip6tables
  • ndc
  • tc

Untuk menggunakan utilitas ini di Android 8.0 dan lebih tinggi, implementasi vendor harus mematuhi aturan berikut:

  • Proses vendor tidak boleh mengeksekusi /system/bin/netutils-wrapper-1.0 secara langsung; upaya untuk melakukannya akan menghasilkan kesalahan.
  • Semua utilitas yang dibungkus oleh netutils-wrapper-1.0 harus diluncurkan menggunakan symlinknya. Misalnya, ubah kode vendor yang melakukan ini sebelumnya ( /system/bin/ip <FOO> <BAR> ) menjadi /system/bin/ip-wrapper-1.0 <FOO> <BAR> .
  • Mengeksekusi wrapper tanpa transisi domain dilarang dalam kebijakan platform SELinux. Aturan ini tidak boleh diubah dan diuji di Android Compatibility Test Suite (CTS) .
  • Mengeksekusi utilitas secara langsung (misalnya, /system/bin/ip <FOO> <BAR> ) dari proses vendor juga dilarang dalam kebijakan platform SELinux. Aturan ini tidak boleh diubah dan diuji di CTS.
  • Setiap domain vendor (proses) yang perlu meluncurkan wrapper harus menambahkan aturan transisi domain berikut dalam kebijakan SELinux: domain_auto_trans( VENDOR-DOMAIN-NAME , netutils_wrapper_exec, netutils_wrapper) .

Filter pembungkus Netutils

Utilitas terbungkus dapat digunakan untuk mengkonfigurasi hampir semua aspek tumpukan jaringan Linux. Namun, untuk memastikan antarmuka stabil dan memungkinkan pembaruan pada partisi sistem, hanya kombinasi argumen baris perintah tertentu yang diperbolehkan; perintah lain akan ditolak.

Antarmuka dan rantai vendor

Pembungkusnya memiliki konsep antarmuka vendor . Ini adalah antarmuka yang biasanya dikelola oleh kode vendor, seperti antarmuka data seluler. Biasanya, jenis antarmuka lain (seperti Wi-Fi) dikelola oleh HAL dan kerangka kerja. Wrapper mengenali antarmuka vendor berdasarkan namanya (menggunakan ekspresi reguler) dan memungkinkan kode vendor melakukan banyak operasi pada antarmuka tersebut. Saat ini, antarmuka vendor adalah:

  • Antarmuka yang namanya diakhiri dengan "oem" diikuti dengan angka, seperti oem0 atau r_oem1234 .
  • Antarmuka yang digunakan oleh implementasi SOC dan OEM saat ini, seperti rmnet_data[0-9] .

Nama antarmuka yang biasanya dikelola oleh kerangka kerja (seperti wlan0 ) tidak pernah merupakan antarmuka vendor.

Pembungkusnya memiliki konsep serupa dengan rantai vendor . Ini digunakan dalam perintah iptables dan juga dikenali berdasarkan namanya. Saat ini, rantai vendor:

  • Mulailah dengan oem_ .
  • Digunakan oleh implementasi SOC dan OEM saat ini, misalnya rantai yang dimulai dengan nm_ atau qcom_ .

Perintah yang diizinkan

Perintah yang diizinkan saat ini tercantum di bawah. Pembatasan diterapkan melalui serangkaian ekspresi reguler pada baris perintah yang dijalankan. Untuk detailnya, lihat system/netd/netutils_wrappers/NetUtilsWrapper-1.0.cpp .

aku p

Perintah ip digunakan untuk mengkonfigurasi alamat IP, perutean, enkripsi IPsec, dan sejumlah parameter jaringan lainnya. Pembungkusnya mengizinkan perintah berikut:

  • Menambah dan menghapus alamat IP dari antarmuka yang dikelola vendor.
  • Konfigurasikan enkripsi IPsec.

iptables/ip6tables

Perintah iptables dan ip6tables digunakan untuk mengkonfigurasi firewall, packet mangling, NAT, dan pemrosesan per paket lainnya. Pembungkusnya mengizinkan perintah berikut:

  • Menambah dan menghapus rantai vendor.
  • Tambahkan dan hapus aturan dalam rantai apa pun yang merujuk pada paket yang masuk ( -i ) atau keluar ( -o ) antarmuka vendor.
  • Lompat ke rantai vendor dari titik mana pun di rantai lainnya.

ndc

ndc digunakan untuk berkomunikasi dengan daemon netd yang melakukan sebagian besar konfigurasi jaringan di Android. Pembungkusnya mengizinkan perintah berikut:

  • Membuat dan menghancurkan jaringan OEM ( oemXX ).
  • Tambahkan antarmuka yang dikelola vendor ke jaringan OEM.
  • Tambahkan rute ke jaringan OEM.
  • Mengaktifkan atau menonaktifkan penerusan IP secara global dan pada antarmuka vendor.

tc

Perintah tc digunakan untuk mengkonfigurasi antrian dan pembentukan lalu lintas pada antarmuka vendor.