EN JA
GIF(4)
GIF(4) FreeBSD Kernel Interfaces Manual GIF(4)

名称

gif一般的なトンネルインタフェース

書式

device gif

解説

gif インタフェースは、IPv4 と IPv6 のための一般的なトンネルデバイスです。それは、IPv[46] トラフィックオーバ IPv[46] でトンネルすることができます。したがって、4 つの考えられる設定があり得ます。 gif の動作は、主に RFC2893 IPv6 オーバ IPv4 設定のトンネルに基づいています。また NetBSD では、 gif は、EON カプセル化を使用して ISO トラフィックオーバ IPv[46] でトンネルすることができます。 gif は、GRE カプセル化を実行しないことに注意してください。 GRE カプセル化のために gre(4) を使用します。

それぞれの gif インタフェースは、インタフェースクローニングを使用して実行時に作成されます。これは、“ ifconfig create”コマンドか、または rc.conf(5)ifconfig_< interface>変数を使用して、最も簡単に行なえます。

gif を使用するために、管理者は、外側のヘッダに使用されるプロトコルとアドレスを設定する必要があります。これは、 ifconfig(8) tunnel または SIOCSIFPHYADDR ioctl を使用することによって行なうことができます。管理者は、 ifconfig(8) で内側のヘッダのためにプロトコルとアドレスもまた設定する必要があります。 ( fe80:: で始まる) IPv6 リンクローカルアドレスは、可能ならいつでも自動的に設定されます。利用者が内側のヘッダとして IPv6 の使用を無効にしたいなら (例えば、純粋な IPv4 オーバ IPv6 トンネルを必要とするなら) 利用者は、 ifconfig(8) を使用することで手動で IPv6 のリンクローカルアドレスを取り除く必要があるかもしれません。最終的に、利用者は、 gif インタフェースを通してパケットをルート付けするためにルーティングテーブルを変更しなければなりません。

gif デバイスは、ECN フレンドリになるように設定することができます。これは、 IFF_LINK1 によって設定することができます。

ECN フレンドリ動作

gif デバイスは、 draft-ietf-ipsec-ecn-02.txt に記述されているように、ECN フレンドリになるように設定することができます。これは、デフォルトでオフです。 IFF_LINK1 インタフェースフラグによってオンにすることができます。

IFF_LINK1 なしでは、 gif は、RFC2893 に記述されているように通常の動作を示すでしょう。これは、次のようにまとめることができます:

Ingress (入口)
外側の TOS ビットを 0 に設定します。
Egress (出口)
外側の TOS ビットを落します。

IFF_LINK1 があれば、 gif は、次のように、出口と入口で ECN ビット (IPv4 TOS バイトまたは IPv6 トラフィッククラスバイトで 0x020x01) をコピーします:

Ingress (入口)
内側から外側まで ( 0xfe でマスクされた) ECN CE を除いて TOS ビットをコピーします。 ECN CE ビットを 0 に設定します。
Egress (出口)
いくらかの変更を伴う内側の TOS ビットを使用します。外側の ECN CE ビットが 1 であるなら、内側で ECN CE ビットを有効にします。

ECN フレンドリ動作は、RFC2893 に違反することに注意してください。これは、ピア (相手側) との双方の合意で使用されるべきです。

セキュリティ

悪意がある者は、トンネル化されたパケットを使用することによって、セキュリティフィルタを回避しようとするかもしれません。より良く保護するために、 gif は、出口で外側のソースアドレスに対して martian (火星) と入口フィルタリングの両方を実行します。 martian/入口フィルタは、決して完璧でないことに注意してください。利用者は、パケットフィルタを使用することによって、利用者のノードを保証することを望んでいるかもしれません。入口フィルタリングは、非対称的にルート付けされたネットワークでトンネル操作を壊すかもしれません。 IFF_LINK2 ビットでそれをオフにすることができます。

ルートキャッシュ

各パケットを処理することは、2 つのルート検索を必要とします: 最初は、パケット自体と 2 番目は、トンネルの宛先です。この 2 番目のルートは、トンネルの性能を向上させてキャッシュすることができます。しかしながら、動的にルート付けされたネットワークでは、ルーティングテーブル検索を無視して、トンネルは、キャッシュされたルートに貼り付けられます。ルートキャッシュは、 IFF_LINK0 フラグで有効にすることができます。

その他

デフォルトでは、 gif トンネルは、入れ子にすることはできません。この振舞いは、 sysctl(8) 変数 net.link.gif.max_nesting を望みの入れ子のレベルに設定することによって、実行時に変更することができます。さらに、 gif トンネルは、エンドポイントの組ごとに 1 つに制限されます。パラレル (平行な) トンネルは、 sysctl(8) 変数 net.link.gif.parallel_tunnels を 1 に設定することによって有効にすることができます。

関連項目

gre(4), inet(4), inet6(4), ifconfig(8) R. Gilligan and E. Nordmark, Transition Mechanisms for IPv6 Hosts and Routers, RFC2893, http://tools.ietf.org/html/rfc2893, August 2000. Sally Floyd, David L. Black, and K. K. Ramakrishnan, IPsec Interactions with ECN, December 1999, draft-ietf-ipsec-ecn-02.txt.

歴史

gif デバイスは、WIDE hydrangea IPv6 キットではじめて登場しました。

バグ

すべて互いに異なって定義された多くのトンネルプロトコル仕様があります。 gif デバイスは、異なった仕様に基づいていて、外側のヘッダフィールドに関して好き嫌いのある、ピア (相手側) と同時に使用しないかもしれません。例えば、通常、利用者は、IPsec トンネルモードを使用する IPsec デバイスと通信するのに gif を使用することができません。

現在のコードは、 gif インタフェースで設定された入口アドレス (外側のソースアドレス) が意味があるかどうかチェックしません。利用者のノードに属するアドレスを必ず指定するようにしてください。そうでなければ、利用者のノードは、ピアからパケットを受信することができません。そして、それは、偽造しているソースアドレスでパケットを生成します。

外側のプロトコルが IPv4 であるなら、 gif は、カプセル化されたパケットのためのパス MTU 発見を実行しようとしません (DF ビットは、0 に設定され)。

外側のプロトコルが IPv6 であるなら、カプセル化されたパケットのためのパス MTU 発見は、インタフェース上で通信に影響するかもしれません。最初の「pmtu より大きいパケット」は、失われるかもしれません。問題を避けるために、外側のヘッダが IPv6 であり内側のヘッダが IPv4 であるときに、利用者が望むように、 gif のためのインタフェース MTU を 1240 以下に設定することができます。

gif デバイスは、外側のヘッダのために ICMP メッセージを内側のヘッダに変換しません。

過去に、 gif には、 IFF_LINK0 フラグを通して設定可能な複数宛先動作がありました。その動作は、時代遅れでありもうサポートされません。

FreeBSD 6.1, 6.2, 6.3, 7.0, 7.1 と 7.2 では、 gif は、 if_bridge(4) が一緒に使用されるとき、逆にされたバージョンフィールドがある不正確な EtherIP パケットを送信して受信します。この相互運用性の問題に関する回避策として、次の 2 つの ifconfig(8) フラグを使用することができます:

accept_rev_ethip_ver
有効にされるなら、正しい EtherIP パケットと逆にされたバージョンフィールドのあるパケットの両方を受け付けます。無効にされるなら、 gif は、正しいパケットだけを受け付けます。このフラグは、デフォルトで有効にされます。
send_rev_ethip_ver
有効にされるなら、故意に逆にされたバージョンフィールドがある EtherIP パケットを送信します。無効にされるなら、 gif は、正しいパケットだけを送ります。このフラグは、デフォルトで無効にされます。

より古い FreeBSD マシンがある相互運用性を必要とするなら、これらの 2 つのフラグの両方を有効にしなければなりません。

August 1, 2011 FreeBSD