EN JA
FAITHD(8)
FAITHD(8) FreeBSD System Manager's Manual FAITHD(8)

名称

faithdFAITH IPv6/v4 変換デーモン

書式

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

解説

faithd ユーティリティは、IPv6 から IPv4 への TCP リレー機能を提供します。それは、IPv4/v6 デュアルスタックルータでそれを使用できるだけです。

faithd が TCPv6 トラフィックを受信するとき、 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.keepfaith1 に設定しておくべきです。

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

faithd ユーティリティは、名前からアドレスへの特別な変換機構を必要とし、ホスト名から特別な IPv6 アドレスプレフィックスへ解決します。小規模なインストールでは、 hosts(5) を使用します。大規模なインストールでは、特別なアドレス変換をサポートする DNS サーバが有用でしょう。 totd と呼ばれる実装が http://www.vermicelli.pasta.cs.uit.no/software/totd.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 モード

faithdinetd(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) は、カーネル TCP リレーサポートが有効にされている状態で listen (接続を受け付け) しているソケットをオープンします。コネクションが到着すると、 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-IPv4 transport relay translator, RFC3142, http://tools.ietf.org/html/rfc3142, June 2001.

歴史

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

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

セキュリティの考察

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

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

August 2, 2011 FreeBSD