スポンサーリンク

FAITHD(8) FreeBSD システム管理者マニュアル FAITHD(8)

名称

faithd − FAITH IPv6/v4 変換デーモン

書式

faithd [−dp] [−f configfile] service [serverpath [serverargs]]

解説

faithd ユーティリティは IPv6 から IPv4 への TCP リレー機能を提供します。 faithd は IPv4/v6 デュアルスタックルータ上で起動しなければなりません。

TCPv6 トラフィックが見つかると、 faithd はその TCPv6 トラフィックを TCPv4 にリレーします。リレーする TCPv4 コネクションの終点は、元の IPv6 終点の末 尾 4 オクテットから決定されます。例えば、 faithd 用に 3ffe:0501:4819:ffff:: が予約されていて、 TCPv6 終点アドレスが 3ffe:0501:4819:ffff::0a01:0101 なら、このトラフィックは IPv4 の終点 10.1.1.1 に向けてリレーされます。

faithd による変換サービスを用いるには、 IPv4 アドレスをマップするための IPv6 アドレスプレフィックスを予約しておく必要があります。カーネルは、そこ で予約した IPv6 アドレスプレフィックスへのすべての TCP コネクションを、 route(8) を用いて疑似インタフェース faith(4) にルーティングするように、適 切に構築されていなければなりません。また、 sysctl(8) を用いて net.inet6.ip6.keepfaith を 1 に設定しておくべきです。

ルータは、予約された IPv6 アドレスプレフィックス行きのすべての TCP トラ フィックを捕まえるように設定しなければなりません。このためには route(8)sysctl(8) のコマンドを使用します。

faithd ユーティリティは、名前からアドレスへの特別な変換機構を必要とし、ホ スト名から特別な IPv6 アドレスプレフィックスへ解決します。小規模なインス トールでは、 hosts(5) を使用してください。大規模なインストールでは、特別 なアドレス変換をサポートする DNS サーバが有用でしょう。 totd と呼ばれる実 装が http://www.vermicelli.pasta.cs.uit.no/ipv6/software.html で入手可能 です。変換された DNS レコードが一般の DNS 群に伝播されないよう、注意して ください。非常に有害です。

デーモンモード

faithd がスタンドアロンプログラムとして起動されると、 faithd は自分自身を デーモン化します。 faithd ユーティリティは TCPv6 のポート service を listen します。ポート service への TCPv6 トラフィックを見付けると、コネク ションをリレーします。

faithd が TCP ポート service を listen するので、 inetd(8) や他の標準的な 仕組みを用いて、そのルータ上で service ポートを使うローカルな TCP デーモ ンを動作させることはできません。 faithd に対して serverpath を指定するこ とで、ルータ上でローカルデーモンを走らせることができます。終点アドレスが ローカルのインターネットアドレスであれば、 faithd ユーティリティは serverpath においてローカルデーモンを起動します。それ以外の場合、 faithd は IPv4 TCP への変換を行います。ローカルデーモンの引数は serverargs を用 いて指定することができます。

次のオプションが使用可能です:

       −d

syslog(3) を用いてデバッグ情報を出力します。

−f configfile
アクセス制御用の設定ファイルを指定します。後述を参照してくださ い。

−p
IPv4 TCP コネクションを最終の終点向けにリレーする際、 faithd は ソースポートとして特権 TCP ポートを使用します。 ftp(1) をリレーす る際は本オプションは不要です。そのための特別なプログラムコードが 含まれています。

faithd ユーティリティは通常の TCP データも帯域外 TCP データもリレーしま す。 TCP half close をエミュレートすることも可能です。 faithd ユーティリ ティは ftp(1) で用いられるプロトコルに対して、特別なサポートを行います。 FTP プロトコルを転送する際は、 faithd は、 PORT/LPRT/EPRT コマンドおよび PASV/LPSV/EPSV コマンドにおけるネットワークレベルアドレスも変換します。

アクティブでないセッションは 30 分で切断します。これは、使わなくなった セッションのせいでリソースが消費されるのを防ぐためです。サービスによって はこの機能は適切でないかもしれません。 (この機能をコンフィギュレーション 可能にすべきでしょうか?)

inetd モード
faithd
inetd(8) から起動されると、 faithd ユーティリティは標準入力から 渡されるコネクションを扱います。コネクションの終点が、予約した IPv6 アド レスプレフィックスの範囲内の場合、 faithd はコネクションをリレーします。 それ以外の場合、 faithd はサービスに対応する telnetd(8) のようなデーモン を起動し、 inetd(8) から渡されるコマンド引数を使用します。

faithd は、ローカルな TCP ポート番号を元に動作モードを決定し、必要な時/可 能な時には特別なプロトコル処理を有効にします。例えば、 faithd が FTP ポー ト上で inetd(8) から起動されると、これは FTP リレーとして動作します。

この動作モードでは、 inetd(8) 中に faithd 用の特別なサポートを必要としま す。

アクセス制御
悪意あるアクセスを防ぐため、 faithd は単純なアドレスベースのアクセス制御 を実装しています。 /etc/faithd.conf (または −f で指定した configfile) で、 faithd は望まないトラフィックの中継を防ぎます。 faithd.conf は、次の 書式のディレクティブを含みます:

src/slen deny dst/dlen

問い合わせの始点アドレスが src/slen に合致する場合で、変換後の終点ア ドレスが dst/dlen に合致する場合、接続を拒否します。

src/slen permit dst/dlen

問い合わせの始点アドレスが src/slen に合致する場合で、変換後の終点ア ドレスが dst/dlen に合致する場合、接続を許可します。

これらのディレクティブは順番に評価され、最初に合致するエントリが効果を持 ちます。合致しないと (これがルールセットの最後である場合) トラフィックは 拒否されます。

inetd モードでは、 inetd(8) のアクセス制御機能でトラフィックをフィルタ可 能です。

診断

成功すると faithd ユーティリティは EXIT_SUCCESS (0) で終了し、エラーがあ る場合は EXIT_FAILURE (1) で終了します。

使用例

faithd を起動する前に、 faith(4) インタフェースを適切に設定しておく必要が あります。

# sysctl net.inet6.ip6.accept_rtadv=0
# sysctl net.inet6.ip6.forwarding=1
# sysctl net.inet6.ip6.keepfaith=1
# ifconfig faith0 up
# route add -inet6 3ffe:501:4819:ffff:: -prefixlen 96 ::1
# route change -inet6 3ffe:501:4819:ffff:: -prefixlen 96 -ifp faith0

デーモンモードのサンプル

telnet サービスを変換し、そしてローカルな telnet サービスを提供しない場合 は、次のように faithd を起動します:

# faithd telnet

もし /usr/libexec/telnetd にある telnetd(8) によるローカル telnet サービ スを提供したい場合は、次のコマンドラインを使用します:

# faithd telnet /usr/libexec/telnetd telnetd

ローカルデーモンに追加の引数を渡したい場合は:

# faithd ftp /usr/libexec/ftpd ftpd -l

他の使用例です。サービスが始点ポート範囲をチェックする場合には −p が必要 かもしれません。

# faithd ssh
# faithd telnet /usr/libexec/telnetd telnetd

inetd モードのサンプル

inetd.conf(5) に次の行を追加します。構文はオペレーティングシステムによっ て様々でしょう。

telnet  stream  tcp6/faith  nowait  root  faithd  telnetd
ftp     stream  tcp6/faith  nowait  root  faithd  ftpd -l
ssh     stream  tcp6/faith  nowait  root  faithd  /usr/sbin/sshd -i

inetd(8) は、listen するソケットをオープンし、カーネルの TCP リレーサポー トを有効化します。コネクションが到着すると、 faithdinetd(8) から起動 されます。コネクションの終点が、予約した IPv6 アドレスプレフィックスの範 囲内の場合、 faithd はコネクションをリレーします。それ以外の場合、 faithd ユーティリティはサービスに対応する telnetd(8) のようなデーモンを起動しま す。

アクセス制御の例

以下に単純な faithd.conf 設定を示します。

# 3ffe:501:ffff::/48 からのすべてに変換器の使用を許し、
# 次の IPv4 の終点へ接続させます:
# - 10.0.0.0/8 と 127.0.0.0/8 以外のすべて
# 他の接続は許しません。
#
3ffe:501:ffff::/48 deny 10.0.0.0/8
3ffe:501:ffff::/48 deny 127.0.0.0/8
3ffe:501:ffff::/48 permit 0.0.0.0/0

関連項目

faith(4), route(8), sysctl(8)

       Jun-ichiro itojun Hagino and                                      Kazu Yamamoto, "                                                        An IPv6-to-IPv4transport relay translator",                                    RFC3142,                                               June 2001,     ftp://ftp.isi.edu/in-notes/rfc3142.txt.

歴史

faithd ユーティリティは WIDE Hydrangea IPv6 プロトコルスタックキットで初 めて登場しました。

KAME プロジェクト (http://www.kame.net/) スタックに基づく IPv6, IPsec サ ポートは、 FreeBSD 4.0 で初めて統合されました。

セキュリティの考察

faithd および他の TCP リレーサービスでリレーされたコネクションに対し、 IP アドレスベースの認証を用いるのは大変危険です。

faithd.conf もしくは IPv6 パケットフィルタを使用し、 faithd へのアクセス 制限を行うことを、管理者へお勧めします。これは faithd を悪意ある者達から 防御することであり、サービス/バンド幅を盗まれないようにすることを意味しま す。 IPv6 の終点アドレスについては、 route(8) を用いて、 faith(4) を指す 経路エントリを注意深く設定することで、制限可能です。 IPv6 の始点アドレス については、パケットフィルタでフィルタする必要があります。 関連項目に列挙 した文書に、本件に関する更なる議論が記述されています。

FreeBSD 10.0 May 17, 1998 FreeBSD 10.0

スポンサーリンク