FAITHD(8) | FreeBSD System Manager's Manual | FAITHD(8) |
名称
faithd — FAITH 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.keepfaith を 1 に設定しておくべきです。
ルータは、予約された 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 モード
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) は、カーネル TCP リレーサポートが有効にされている状態で listen (接続を受け付け) しているソケットをオープンします。コネクションが到着すると、 faithd が inetd(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 |