日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.4-RELEASE-K, 13.0-RELEASE-K から 13.3-RELEASE-K, 14.0-RELEASE-K から 14.1-RELEASE-K は、全翻訳済み)
13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。
Table of Contents
DIVERT(4) FreeBSD カーネルインタフェースマニュアル DIVERT(4) 名称 divert -- カーネルパケット divert (迂回) メカニズム 書式 #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> int socket(PF_INET, SOCK_RAW, IPPROTO_DIVERT); divert ソケットのサポートを有効にするためには、次の行をカーネル設定ファイ ルに置きます: options IPFIREWALL options IPDIVERT もう一つの方法として、ブート時にモジュールとしてドライバをロードするため には、次の行を loader.conf(5) に置きます: ipfw_load="YES" ipdivert_load="YES" 解説 divert (迂回) ソケットは、bind(2) システムコールによって指定された divert (迂回) ポートをバインドすることができることを除いて、生の IP ソケットと同 様です。bind の IP アドレスは、無視され、ポート番号だけが意味があります。 divert ポートにバインドされた divert ソケットは、何らかの (ここでは特定さ れません) カーネルメカニズムによってそのポートを迂回するすべてのパケット を受信します。パケットは、divert ポートに書き込むこともでき、その場合に、 それらは、カーネル IP パケット処理に再び入力されます。 divert (迂回) ソケットは、通常、FreeBSD のパケットフィルタリングの実装と ipfw(8) プログラムと連動して使用されます。divert ソケットからの読み込みと 書き込みよって、一致するパケットは、ホストマシンを経由するような任意の ``フィルタ'' をパススルー (通過) でき、特別な経路制御 (ルーティング) ト リックなどを行なうことができます。 パケット読み込み パケットは、``着信'' または ``発信'' のいずれでも迂回されます。着信パケッ トは、IP インタフェースで受信の後に迂回されますが、発信パケットは、次の中 継点 (ホップ) に転送する前に迂回されます。 divert (迂回) されたパケットは、read(2), recv(2) または recvfrom(2) に よって変更されずに読み込まれます。後者の場合に、返されたアドレスは、パ ケットの迂回プログラムによって供給されたあるタグに設定されたポートがあ り、(通常、ipfw ルール番号) と IP アドレスは、(パケットが着信であったな ら) パケットが受信されたインタフェースの (最初の) アドレスを設定し、(パ ケットが発信であったなら) INADDR_ANY を設定します。(パケットのために定義 されるなら) インタフェース名は、それに適合するなら、アドレスに続く 8 バイ トに置かれます。 パケット書き込み divert ソケットに書き込むことは、生の IP ソケットに書き込むのと似ていま す。パケットは、``そのまま'' の形で sendto(2) を使用して通常のカーネル IP パケット処理に投入され、最小のエラーチェックが行なわれます。パケットは、 着信または発信のいずれかとして区別されます。sendto(2) が INADDR_ANY の宛 先 IP アドレスとともに使用されるなら、パケットは、あたかも発信しているか のように扱われます、すなわち、ローカルでないアドレスに行くことになってい ます。そうでなければ、パケットは、着信であると想定され、完全なパケット経 路制御 (ルーティング) が行われます。 後者の場合に、指定された IP アドレスは、いくつかのローカルインタフェース のアドレスに一致しなければならないか、またはインタフェース名は、IP アドレ スの後に見つけられなければなりません。インタフェース名が見つけられるな ら、そのインタフェースが、使用され、(それが INADDR_ANY でないという事実を 除いて) IP アドレスの値は、無視されます。これは、パケットがどのインタ フェースで ``到着したか'' を示すためです。 通常、着信として読み込まれるパケットは、着信として書き込まれるべきです。 発信パケットも同様です。パケットを読み込んで次に書き戻すとき、修正されな い recvfrom(2) によって供給された同じソケットアドレスを sendto(2) に渡す ことは、ものを単純化します (下記参照)。 sendto(2) に渡されたソケットアドレスのポート部分は、迂回モジュールにとっ て重要になるべきであるタグを含んでいます。ipfw(8) の場合に、タグは、ルー ル処理が再開するべきである後のルール番号として解釈されます。 ループの回避 (sendto(2) を使用して) divert ソケットに書き込まれたパケットは、通常、(同 じ番号がいくつかあるなら、次のルールではない) 迂回を引き起こしたルール番 号で既に設定されている、ソケットアドレスのポート部分で与えられたタグに続 くルール番号でパケットフィルタに再入されます。'タグ' が別の再入点を示すた めに変更されるなら、同じパケットが、同じルールで 2 回以上迂回されるところ で、ループを避けるために注意を要します。 詳細 パケットが迂回されるが、ソケットがポートにバインドされていないなら、また は IPDIVERT がカーネルで有効になっていない、またはロードされていないな ら、パケットは、落されます。 迂回される着信パケットのフラグメントは、配信の前に完全に再構築されます。 フラグメントが 1 つでも迂回されると、すべてのパケットは、迂回されます。異 なったフラグメントが異なったポートに迂回されるなら、結局どのポートが選ば れるかは予測できません。 ipfw(8) tee 動作によって divert ソケットで到着したパケットは、そのまま配 信され、この場合、パケットのフラグメント (断片) は、再組み立てされないこ とに注意してください。 発信として読み込まれたパケットが不正な IP ヘッダチェックサムがあり、発信 として書き込まれるパケットが正しい値でそれらの IP ヘッダチェックサムを上 書きすることを除いて、パケットは、受信され、変更せずに送信されます。着信 として書き込まれ不正なチェックサムがあるパケットは、落されます。そうでな ければ、すべてのヘッダフィールドは、変更されません (そして、その結果、 ネットワーク順序で)。 タイプ SOCK_RAW のソケットを作成するように、1024 未満のポート番号へのバイ ンドは、スーパユーザのアクセスを必要とします。 エラー 生のパケットを書き込むとき、起こり得る普通のエラーと共に divert ソケット への書き込みは、次のエラーを返すかもしれません: [EINVAL] パケットに不正なヘッダがあるか、またはパケットの IP オ プションと設定されたソケットオプションが、不適合です。 [EADDRNOTAVAIL] 宛先アドレスが、あらゆるインタフェースにも関連付けられ なかった INADDR_ANY と等しくない IP アドレスを含んでい ます。 関連項目 bind(2), recvfrom(2), sendto(2), socket(2), ipfw(4), ipfw(8) 作者 Archie Cobbs <archie@FreeBSD.org>, Whistle Communications Corp. バグ これは、アドレス変換のような様々な IP トリックを実装するためにユーザモー ドのプロセスのためのクリーンな方法を提供する試みですが、きれいになるかも しれませんが、それは、ipfw(8) に依存しすぎています。 迂回される前に着信フラグメントが再構築されるべきかどうかは、疑問の余地が あります。例えば、別のマシンに向けられたパケットのいくつかのフラグメント だけがローカルマシンを介して経路制御されないなら、パケットは、失われま す。これは、たぶんどんな場合でも設定可能なソケットオプションであるべきで す。 FreeBSD 11.4 December 17, 2004 FreeBSD 11.4