2025 年 3 月 27 日より、AOSP のビルドとコントリビューションには aosp-main
ではなく android-latest-release
を使用することをおすすめします。詳細については、AOSP の変更をご覧ください。
ネットワーク スタック構成ツール
コレクションでコンテンツを整理
必要に応じて、コンテンツの保存と分類を行います。
Android オペレーティング システムには、ifconfig
、ip
、ip6tables
などの標準的な Linux ネットワーク ユーティリティが含まれています。これらのユーティリティはシステム イメージ上に存在し、Linux ネットワーク スタック全体を構成できます。Android 7.x 以前を搭載するデバイスでは、ベンダーコードが直接これらのバイナリを呼び出すことができますが、次の問題があります。
- ネットワーク ユーティリティはシステム イメージ内で更新されるため、安定した実装が提供されません。
- ネットワーク ユーティリティの範囲が広すぎるため、予測可能な動作を保証しながらシステム イメージを更新することは困難です。
Android 8.0 以降を搭載するデバイスでは、システム パーティションは更新を受信しますが、ベンダー パーティションは更新されません。これを実現するために、Android 8.0 ではバージョニングされた安定したインターフェースを定義し、SELinux の制限を使用して、ベンダーとシステム イメージの相互依存関係を、既知の良好なセットのまま維持します。
ベンダーは、プラットフォームが提供するネットワーク構成ユーティリティを使用して Linux ネットワーク スタックを構成できますが、これらのユーティリティにはまだ HIDL インターフェース ラッパーが含まれていません。このようなインターフェースを定義するために、Android 8.0 には netutils-wrapper-1.0
ツールが含まれています。
Netutils ラッパー
netutils
ラッパー ユーティリティは、システム パーティションのアップデートの影響を受けない、Linux ネットワーク スタック構成のサブセットを提供します。Android 8.0 にはバージョン 1.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 でテストされます。
- ラッパーを起動する必要があるベンダー ドメイン(プロセス)は、ドメイン移行ルール
domain_auto_trans(VENDOR-DOMAIN-NAME, netutils_wrapper_exec,
netutils_wrapper)
を SELinux ポリシーに追加する必要があります。
Netutils ラッパー フィルタ
ラップされたユーティリティは、Linux ネットワーク スタックのほぼすべての要素を構成するために使用できます。ただし、安定したインターフェースを維持し、システム パーティションのアップデートを可能にするために、コマンドライン引数の特定の組み合わせのみが許可され、他のコマンドは拒否されます。
ベンダー インターフェースとベンダー チェーン
ラッパーには、ベンダー インターフェースというコンセプトがあります。これは、モバイルデータ インターフェースなど、一般的にベンダーコードによって管理されるインターフェースです。通常、他のタイプのインターフェース(Wi-Fi など)は HAL とフレームワークによって管理されます。ラッパーは、ベンダー インターフェースを(正規表現を使用して)名前で認識し、ベンダーコードがそれらに対して多くのオペレーションを実行できるようにします。現在、ベンダー インターフェースには次のものがあります。
- 名前が「oem」で終わり、その後に番号が続くインターフェース(
oem0
や r_oem1234
など)。
- 現在の SOC と OEM の実装で使用されるインターフェース(
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
は、Android でほとんどのネットワーク構成を行う netd
デーモンと通信するために使用します。ラッパーを使用すると、次のようなコマンドを実行できます。
- OEM ネットワーク(
oemXX
)の作成と破棄。
- OEM ネットワークへのベンダー管理インターフェースの追加。
- OEM ネットワークへのルートの追加。
- グローバルまたはベンダー インターフェースでの、IP 転送の有効化または無効化。
tc
tc
コマンドは、ベンダー インターフェース上のトラフィックのキューイングとシェーピングを構成するために使用します。
このページのコンテンツやコードサンプルは、コンテンツ ライセンスに記載のライセンスに従います。Java および OpenJDK は Oracle および関連会社の商標または登録商標です。
最終更新日 2025-07-29 UTC。
[[["わかりやすい","easyToUnderstand","thumb-up"],["問題の解決に役立った","solvedMyProblem","thumb-up"],["その他","otherUp","thumb-up"]],[["必要な情報がない","missingTheInformationINeed","thumb-down"],["複雑すぎる / 手順が多すぎる","tooComplicatedTooManySteps","thumb-down"],["最新ではない","outOfDate","thumb-down"],["翻訳に関する問題","translationIssue","thumb-down"],["サンプル / コードに問題がある","samplesCodeIssue","thumb-down"],["その他","otherDown","thumb-down"]],["最終更新日 2025-07-29 UTC。"],[],[],null,["# Network stack configuration tools\n\nThe Android operating system contains standard Linux networking utilities\nsuch as `ifconfig`, `ip`, and `ip6tables`.\nThese utilities reside on the system image and enable configuration of the\nentire Linux networking stack. On devices running Android 7.x and lower,\nvendor code is allowed to call these binaries directly, which presents the\nfollowing problems:\n\n- Because network utilities are updated in the system image, they don't provide a stable implementation.\n- The scope of the networking utilities is so broad it is difficult to evolve the system image while guaranteeing predictable behaviour.\n\nOn devices running Android 8.0 and higher, the vendor partition remains the same\nwhile the system partition receives an update. To achieve this, Android 8.0\nprovides the ability to define a stable, versioned interface while also using\nSELinux restrictions to keep the interdependency of vendor and system image to a\nknown good set.\n\nVendors can use the platform-provided network configuration utilities to\nconfigure the Linux networking stack, but these utilities don't yet include a\nHIDL interface wrapper. To define such an interface, Android 8.0 includes the\n`netutils-wrapper-1.0` tool.\n\nNetutils wrapper\n----------------\n\nThe `netutils` wrapper utility provides a subset of the Linux\nnetwork stack configuration that isn't affected by system partition updates.\nAndroid 8.0 contains version 1.0 of the wrappers, which allows you to pass the\nsame arguments as the wrapped utilities, installed in the system partition at\n`/system/bin` as follows: \n\n```actionscript-3\nu:object_r:system_file:s0 /system/bin/ip-wrapper-1.0 -\u003e netutils-wrapper-1.0\nu:object_r:system_file:s0 /system/bin/ip6tables-wrapper-1.0 -\u003e netutils-wrapper-1.0\nu:object_r:system_file:s0 /system/bin/iptables-wrapper-1.0 -\u003e netutils-wrapper-1.0\nu:object_r:system_file:s0 /system/bin/ndc-wrapper-1.0 -\u003e netutils-wrapper-1.0\nu:object_r:netutils_wrapper_exec:s0 /system/bin/netutils-wrapper-1.0\nu:object_r:system_file:s0 /system/bin/tc-wrapper-1.0 -\u003e netutils-wrapper-1.0\n```\n\nSymlinks show the networking utilities wrapped by the `netutils`\nwrapper, which include:\n\n- `ip`\n- `iptables`\n- `ip6tables`\n- `ndc`\n- `tc`\n\nTo use these utilities in Android 8.0 and higher, vendor implementations must\nadhere to the following rules:\n\n- Vendor processes must not execute `/system/bin/netutils-wrapper-1.0` directly; attempts to do so results in error.\n- All utilities wrapped by `netutils-wrapper-1.0` must be launched using their symlinks. For example, change the vendor code that did this before (`/system/bin/ip \u003cFOO\u003e \u003cBAR\u003e`) to `/system/bin/ip-wrapper-1.0 \u003cFOO\u003e \u003cBAR\u003e`.\n- Executing the wrappers without domain transition is prohibited in platform SELinux policy. This rule must not be changed and is tested against in the [Android Compatibility Test Suite (CTS)](/docs/compatibility/cts).\n- Executing the utilities directly (e.g., `/system/bin/ip \u003cFOO\u003e \u003cBAR\u003e`) from the vendor processes is also prohibited in the platform SELinux policies. This rule must not be changed and is tested against in CTS.\n- Any vendor domain (process) that needs to launch a wrapper must add the following domain transition rule in the SELinux policy: `domain_auto_trans(`\u003cvar translate=\"no\"\u003eVENDOR-DOMAIN-NAME\u003c/var\u003e`, netutils_wrapper_exec,\n netutils_wrapper)`.\n\n| **Note:** For details on SELinux in Android 8.0 and higher, see [Customizing\n| SEPolicy in Android 8.0+](/docs/security/features/selinux/customize#android-o).\n\nNetutils wrapper filters\n------------------------\n\nWrapped utilities can be used to configure almost any aspect of the Linux\nnetworking stack. However, to ensure it is possible to maintain a stable\ninterface and allow updates to the system partition, only certain combinations\nof command line arguments are allowed; other commands are rejected.\n\n### Vendor interfaces and chains\n\nThe wrapper has a concept of *vendor interfaces*. These are interfaces\ntypically managed by vendor code, such as cellular data interfaces. Typically,\nother types of interfaces (such as Wi-Fi) are managed by the HALs and the\nframework. The wrapper recognizes vendor interfaces by name (using a regular\nexpression) and allows vendor code to perform many operations on them.\nCurrently, vendor interfaces are:\n\n- Interfaces whose names end in \"oem\" followed by a number, such as `oem0` or `r_oem1234`.\n- Interfaces used by current SOC and OEM implementations, such as `rmnet_data[0-9]`.\n\nNames of interfaces that are typically managed by the framework (such as\n`wlan0`) are never vendor interfaces.\n\nThe wrapper has a similar concept of *vendor chains* . These are used\nin `iptables` commands and are also recognized by name. Currently,\nvendor chains:\n\n- Start with `oem_`.\n- Are used by current SOC and OEM implementations, e.g., chains starting in `nm_` or `qcom_`.\n\n### Allowed commands\n\nCurrently allowed commands are listed below. Restrictions are implemented via\na set of regular expressions on the executed command lines. For details, refer\nto `system/netd/netutils_wrappers/NetUtilsWrapper-1.0.cpp`.\n\n#### ip\n\nThe `ip` command is used to configure IP addresses, routing, IPsec\nencryption, and a number of other network parameters. The wrapper allows the\nfollowing commands:\n\n- Add and remove IP addresses from vendor-managed interfaces.\n- Configure IPsec encryption.\n\n#### iptables and ip6tables\n\nThe `iptables` and `ip6tables` commands are used to\nconfigure firewalling, packet mangling, NAT, and other per-packet processing.\nThe wrapper allows the following commands:\n\n- Add and delete vendor chains.\n- Add and delete rules in any chain that refers to packets going into (`-i`) or out of (`-o`) a vendor interface.\n- Jump to a vendor chain from any point in any other chain.\n\n#### ndc\n\n`ndc` is used to communicate to the `netd` daemon that\nperforms most network configuration on Android. The wrapper allows the following\ncommands:\n\n- Create and destroy OEM networks (`oemXX`).\n- Add vendor-managed interfaces to OEM networks.\n- Add routes to OEM networks.\n- Enable or disable IP forwarding globally and on vendor interfaces.\n\n#### tc\n\nThe `tc` command is used to configure traffic queueing and shaping\non vendor interfaces."]]