ابزارهای پیکربندی پشته شبکه

سیستم‌عامل Android شامل ابزارهای استاندارد شبکه Linux مثل ifconfig،‏ ip، و ip6tables است. این ابزارها در تصویر سیستم قرار دارند و پیکربندی کل پشته شبکه Linux را فعال می‌کنند. در دستگاه‌های دارای Android نسخه ۷.x و پایین‌تر، کد فروشنده مجاز است این فایل‌های اجرایی را مستقیماً فراخوانی کند که باعث بروز مشکلات زیر می‌شود:

  • چون ابزارهای کمکی شبکه در تصویر سیستم به‌روز می‌شوند، پیاده‌سازی پایداری ارائه نمی‌دهند.
  • دامنه ابزارهای شبکه آن‌قدر گسترده است که تکامل تصویر سیستم درحالی‌که رفتار قابل‌پیش‌بینی را تضمین می‌کند دشوار است.

در دستگاه‌های دارای Android نسخه ۸.۰ و بالاتر، پارتیشن فروشنده ثابت می‌ماند درحالی‌که پارتیشن سیستم به‌روزرسانی دریافت می‌کند. برای دستیابی به این هدف، Android 8.0 امکان تعریف میانای پایدار و نسخه‌دار را فراهم می‌کند و درعین‌حال از محدودیت‌های SELinux برای حفظ وابستگی متقابل فروشنده و تصویر سیستم به یک مجموعه خوب شناخته‌شده استفاده می‌کند.

فروشندگان می‌توانند از ابزارهای پیکربندی شبکه ارائه‌شده توسط پلاتفرم برای پیکربندی پشته شبکه Linux استفاده کنند، اما این ابزارها هنوز شامل پوشش میانای HIDL نمی‌شوند. برای تعریف چنین میانایی، Android 8.0 شامل ابزار netutils-wrapper-1.0 است.

بسته‌بندی‌کننده Netutils

ابزار پوشش netutils زیرمجموعه‌ای از پیکربندی پشته شبکه Linux را ارائه می‌دهد که تحت‌تأثیر به‌روزرسانی‌های پارتیشن سیستم قرار نمی‌گیرد. ‫Android 8.0 حاوی نسخه ۱.۰ از بسته‌بندی‌ها است که به شما امکان می‌دهد همان آرگومان‌های ابزارهای بسته‌بندی‌شده را که در پارتیشن سیستم در /system/bin نصب شده‌اند به این صورت ارسال کنید:

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

پیوندهای نمادین ابزارهای شبکه را که توسط netutils پوشش داده شده‌اند نشان می‌دهند، که شامل موارد زیر می‌شود:

  • ip
  • iptables
  • ip6tables
  • ndc
  • tc

برای استفاده از این ابزارها در Android 8.0 و بالاتر، پیاده‌سازی‌های فروشنده باید از قوانین زیر پیروی کنند:

  • فرایندهای فروشنده نباید مستقیماً /system/bin/netutils-wrapper-1.0 را اجرا کنند؛ تلاش برای انجام این کار منجر به خطا می‌شود.
  • همه کاربری‌های پیچیده‌شده توسط netutils-wrapper-1.0 باید بااستفاده از پیوندهای نمادین خود راه‌اندازی شوند. برای مثال، کد فروشنده‌ای را که قبلاً این کار را انجام می‌داد (/system/bin/ip <FOO> <BAR>) به /system/bin/ip-wrapper-1.0 <FOO> <BAR> تغییر دهید.
  • اجرای پوشش‌ها بدون انتقال دامنه در خط‌مشی SELinux پلاتفرم ممنوع است. این قانون نباید تغییر کند و در مجموعه آزمایش سازگاری Android (CTS) آزمایش می‌شود.
  • اجرای مستقیم ابزارهای کمکی (برای نمونه، /system/bin/ip <FOO> <BAR>) از فرایندهای فروشنده در خط‌مشی‌های پلاتفرم SELinux نیز ممنوع است. این قانون نباید تغییر کند و در CTS آزمایش می‌شود.
  • هر دامنه فروشنده (فرایندی) که نیاز به راه‌اندازی بسته‌بندی دارد باید قانون انتقال دامنه زیر را به خط‌مشی SELinux اضافه کند: domain_auto_trans(VENDOR-DOMAIN-NAME, netutils_wrapper_exec, netutils_wrapper).

فیلترهای پوشش Netutils

از ابزارهای کمکی بسته‌بندی‌شده می‌توان برای پیکربندی تقریباً هر جنبه‌ای از پشته شبکه Linux استفاده کرد. بااین‌حال، برای اطمینان از اینکه حفظ یک میانای پایدار امکان‌پذیر است و به‌روزرسانی‌های پارتیشن سیستم مجاز است، فقط ترکیب‌های خاصی از آرگومان‌های خط فرمان مجاز است؛ سایر فرمان‌ها رد می‌شوند.

زنجیره‌ها و میاناهای فروشنده

پوشش‌دهنده مفهوم واسط‌های فروشنده را دارد. این‌ها میانه‌هایی هستند که معمولاً با کد فروشنده مدیریت می‌شوند، مثل میانه‌های داده شبکه تلفن همراه. معمولاً، انواع دیگر میان‌ها (مثل Wi-Fi) توسط HALها و چارچوب مدیریت می‌شوند. پوشاننده میاناهای فروشنده را با نام (بااستفاده از عبارت باقاعده) تشخیص می‌دهد و به کد فروشنده اجازه می‌دهد عملیات‌های زیادی را روی آن‌ها انجام دهد. درحال‌حاضر، واسط‌های فروشنده عبارت‌اند از:

  • رابط‌هایی که نامشان به «oem» و سپس یک عدد ختم می‌شود، مانند oem0 یا r_oem1234.
  • میاناهایی که در پیاده‌سازی‌های فعلی «سیستم روی تراشه» و «تولیدکننده تجهیزات اصلی» استفاده می‌شوند، مثل rmnet_data[0-9].

نام واسط‌هایی که معمولاً توسط چارچوب مدیریت می‌شوند (مانند wlan0) هرگز واسط فروشنده نیستند.

پوشاننده مفهوم مشابهی از زنجیره‌های فروشنده دارد. این‌ها در فرمان‌های iptables استفاده می‌شوند و با نام نیز تشخیص داده می‌شوند. درحال‌حاضر، زنجیره‌های فروشنده:

  • با oem_ شروع کنید.
  • توسط پیاده‌سازی‌های SOC و OEM فعلی استفاده می‌شوند، مثلاً زنجیره‌هایی که در nm_ یا qcom_ شروع می‌شوند.

فرمان‌های مجاز

فرمان‌های مجاز فعلی در زیر فهرست شده‌اند. محدودیت‌ها ازطریق مجموعه‌ای از عبارت‌های باقاعده در خطوط فرمان اجراشده اعمال می‌شوند. برای جزئیات، به system/netd/netutils_wrappers/NetUtilsWrapper-1.0.cpp مراجعه کنید.

ip

از فرمان ip برای پیکربندی نشانی‌های IP، مسیریابی، رمزگذاری IPsec، و تعدادی از پارامترهای دیگر شبکه استفاده می‌شود. پوشش‌دهنده به فرمان‌های زیر اجازه می‌دهد:

  • نشانی‌های IP را به میاناهای مدیریت‌شده توسط فروشنده اضافه و از آن‌ها حذف کنید.
  • رمزگذاری IPsec را پیکربندی کنید.

iptables و ip6tables

از فرمان‌های iptables و ip6tables برای پیکربندی دیوار آتش، دستکاری بسته، NAT، و پردازش‌های دیگر بسته استفاده می‌شود. پوشاننده فرمان‌های زیر را مجاز می‌کند:

  • زنجیره‌های فروشنده را اضافه و حذف کنید.
  • افزودن و حذف کردن قوانین در هر زنجیره‌ای که به بسته‌های ورودی به (-i) یا خروجی از (-o) میانای فروشنده اشاره دارد.
  • از هر نقطه در هر زنجیره دیگری به زنجیره فروشنده بپرید.

ndc

از ndc برای برقراری ارتباط با دیمون netd استفاده می‌شود که بیشتر پیکربندی‌های شبکه را در Android انجام می‌دهد. پوشش‌دهنده اجازه می‌دهد که از دستورات زیر استفاده شود:

  • ایجاد و ازبین بردن شبکه‌های سازنده اصلی محصول (oemXX).
  • واسط‌های مدیریت‌شده توسط فروشنده را به شبکه‌های سازنده تجهیزات اصلی اضافه کنید.
  • مسیرهایی به شبکه‌های OEM اضافه کنید.
  • انتقال IP را به‌صورت جهانی و در میاناهای فروشنده فعال یا غیرفعال کنید.

tc

از فرمان tc برای پیکربندی صف‌بندی و شکل‌دهی ترافیک در میاناهای فروشنده استفاده می‌شود.