TUN/TAP は、ユーザー空間のファイルディスクリプターに接続された仮想ネットワーク インターフェイスを作成します。TUN デバイスはレイヤー 3 の IP パケットを運び、 TAP デバイスはレイヤー 2 の Ethernet フレームを運びます。VPN、パケットアナライザー、 ユーザー空間ネットワークスタック、仮想マシンで使用されます。
インターフェイスの作成 #
/dev/net/tun を読み書き用に開き、ifreq とともに TUNSETIFF を発行します。
IFF_TUN または IFF_TAP を設定し、プログラムがパケットまたはフレームだけを
受信する場合は IFF_NO_PI も追加します。IFF_NO_PI がない場合、各 read は
フラグとプロトコルを含む 4 バイトのパケット情報ヘッダーで始まります。カーネルが
ネットワークインターフェイスを作成した後、ip link、ip address、ip route で
管理状態、アドレス、ルートを設定します。
自動的に作成されないシステムでは、デバイスノードはキャラクターデバイスの major 10、minor 200 です。アクセスは慎重に制御する必要があります。インターフェイスの 作成やネットワーク名前空間への接続には適切な権限が必要です。最後のファイル ディスクリプターを閉じると、永続化が設定されていない非永続 TUN/TAP インターフェイス は削除されます。
パケットの方向 #
プログラムが書き込んだパケットは、仮想インターフェイスに到着したかのように
カーネルが受信します。カーネルがそのインターフェイス経由で送信するパケットは、
read(2) によってプログラムへ返されます。ip tuntap add dev tun0 mode tun または
mode tap を使用すると、カスタム C プログラムなしで基本的な作成を行えます。
コメント
GitHub で閲覧・コメントする(投稿にはログインが必要です)