梅本肇 / ume@mahoroba.org
今回は、お約束通り、筆者の環境についてお話したい
と思います。
また、IPv6→IPv4トランスレータの話を少ししてみた
いと思います。
図1 自宅の接続環境 ![]()
PPPoEで使用するインタフェースは若干変則的な初期 化をおこなっています。
リスト1 /etc/ppp/ppp.conf default: set log Phase Chat LCP IPCP CCP tun command set server /var/run/pppctl%d "パスワード" 0117 provider: set authname "ユーザ@プロバイダ" set authkey "パスワード" set device PPPoE:dc0 set mru 1454 set mtu 1454 add default HISADDR enable lqr
リスト2 /etc/start_if.dc0 ifconfig dc0 up -arp ifconfig dc0 inet6 fe80::240:c7ff:fe99:81eb -alias
リスト3 /etc/rc.conf firewall_enable="YES" firewall_type="/etc/ipfw.conf" firewall_quiet="YES" firewall_logging="YES" firewall_flags="-p m4" network_interfaces="lo0 dc0 dc1 gif0" ifconfig_dc1="inet 202.227.26.36 netmask 255.255.255.240" ifconfig_gif0="create" ppp_enable="YES" ppp_mode="ddial" ppp_nat="YES" ppp_profile="provider" gateway_enable="YES" ipv6_enable="YES" ipv6_gateway_enable="YES" ipv6_static_routes="snla2 pnla2" ipv6_route_snla2="2001:200:301:: -prefixlen 48 ::1 -reject" ipv6_route_pnla2="3ffe:505:2:: -prefixlen 48 ::1 -reject" ipv6_network_interfaces="dc1" ipv6_prefix_dc1="2001:200:301:0 3ffe:505:2:0" rtadvd_enable="YES" ipv6_faith_prefix="3ffe:505:2:ffff::" ipv6_ipv4mapping="NO" ipv6_firewall_enable="YES" ipv6_firewall_type="/etc/ip6fw.conf" ipv6_firewall_quiet="YES" ipv6_firewall_logging="YES" ipv6_firewall_flags="-p m4"
次に、/usr/local/etc/dtcpc.authにパスワードを設 定します。dtcpc.authの各行は、ホスト名:ユーザ名:パ スワードの組からなります(リスト5)。
リスト4 dtcpc起動部分 dtcpc -t tunnelroute -u mahoroba -i gif0 -c -D -l dtcp.imasy.or.jp サーバ: dtcp.imasy.or.jp ユーザ: mahoroba (-u) tunnelroute モード (-t) GIFインタフェース: gif0 (-i) gif cloningは使わない (-c) デーモンとして起動 (-D) 接続が切れた場合に再接続する (-l)
リスト5 /usr/local/etc/dtcpc.auth dtcp.imasy.or.jp:mahoroba:パスワード
リスト6 /etc/ipfw.confでのgifの許可部分 (抜粋) define(OIP, `me') define(IMASYv6, `202.227.24.9') ・ ・ ・ # Allow IPv6 over IPv4 tunnel add allow 41 from OIP to IMASYv6 add allow 41 from IMASYv6 to OIP
リスト7 MXの設定例 mahoroba.orgのゾーンファイル: mahoroba.org. IN MX 10 mx.mahoroba.org. IN MX 20 casper.imasy.or.jp. mx.mahoroba.org. IN AAAA 2001:200:301:0:240:c7ff:fe97:6f89 imasy.or.jpのゾーンファイル: casper.imasy.or.jp. IN AAAA 2001:200:300:1:220:edff:fe88:788c IN A 202.227.24.9
FAITHでは,faithdというIPv6→IPv4トランスレータ・
デーモンをIPv6/IPv4のdual stackであるホストで動作
させておくと、IPv6のみのネットワークからIPv4世界に
アクセスできるようにできます。
あるいは、IPv4のみのサーバをIPv6世界に公開する目
的でも使用できます。
FAITHではIPv4アドレスを特定のIPv6アドレスにマッ ピングさせます。そして、このアドレスプレフィックス をfaithdが動作しているホストに到達できるように経路 を設定します。クライアントからはこのマップされたア ドレスを使ってIPv6で通信します。
faithdを動作させるホストでは、/etc/rc.confで
ipv6_faith_prefix="3ffe:505:2:ffff::"という感じで、割り当てられているプレフィックスの内 で実際に使用していないアドレス空間を指定します。デ フォルトではプレフィクス長を96で設定します。これは、 IPv4空間全てを変換対象とすることを意味します。これに より、net.inet6.ip6.keepfaith=1が設定され、 3ffe:505:2:ffff::/96への経路がfaith0に向けられます。
プレフィックス長を96より大きくしたい場合は、
ipv6_faith_prefix="3ffe:505:2:ffff::cae3:1a00/120"という感じで指定できます。この例では、 202.227.26.0/24を変換対象とします。IPv6のみのネッ トワークからIPv4世界にアクセスする場合には、プレ フィックス長を96から変えることはあまりないと思いま すが、IPv4のみのサーバをIPv6世界に公開する場合には、 公開するサーバのアドレス範囲に絞る目的で使用すると 効果的でしょう。
cloned_interfaces="faith0"を指定して、faith0を生成するようにしておく必要があ ります。
faithdを動作させるホストではkernelに
pseudo-device faith 1が組み込まれている必要があります*5)。GENERICには 最初から組み込まれています。
実際の変換はfaithdがおこないますので、変換をおこ
ないたいプロトコル毎にfaithdを起動しておきます。
faithdの起動方法には、スタンドアロンでデーモンと
して起動するモードと、inetdから起動するモードの2種
類があります。
デーモンモードでは、
faithd sshあるいは、
faithd ssh /usr/sbin/sshd sshd -iという感じで起動します。前者の例では FAITHのみを扱 います。それに対し、後者の例では、自ホストへの接続 の場合にはsshdを起動します。
inetd起動モードで使用する場合は、 /etc/hosts.allowでfaithdを許可しておく必要がありま す(リスト9)。また、faithdから起動されるプログラム はtcp_wrappersで保護されません。つまり、faithdを併 用したサービスでは/etc/hosts.allowによる細かいアク セス制御はできません。
リスト8 /etc/inetd.conf でのfaithdの指定例 ftp stream faith/tcp6 nowait root /usr/sbin/faithd ftpd -l ssh stream faith/tcp46 nowait root /usr/sbin/faithd /usr/sbin/sshd -i https stream faith/tcp6 nowait root /usr/sbin/faithd /sbin/nologin
基本的にfaithdを動作させるホストでは他のサービス を動かさない方が良いでしょう。しかし、Apacheなどが スタンドアロンでデーモンとして動作しているホストで もfaithdを動かせなくはないです。この場合、faithdは wildcard bindを使用しますので、ポートが競合するデー モンはwildcard bindを使用できません。
リスト9 /etc/hosts.allowの例 faithd : ALL@ALL : allow
リスト10 httpd.confの例 Listen ::1 80 Listen 3ffe:505:2:0:240:96ff:fe48:4ea8 80 Listen 0.0.0.0 80
なお、アプリケーションプロトコルでIPアドレスをや りとりするものは、FTPについてはサポートされていま すが、それ以外については基本的にfaithdで扱えません。
リスト11 /etc/ssh/sshd_configの例 ListenAddress 0.0.0.0 ListenAddress ::1 ListenAddress 3ffe:505:2:0:240:96ff:fe48:4ea8
FAITHを不用意にどこからでも利用できるようになっ ていると、IPv6世界からの不正利用ができてしまいます。 /etc/faithd.confでアクセス制御ができるようになって おり、これを防止することができます(リスト12)。
IPv4アドレスをIPv6アドレスにマッピングさせるため にはtotdというDNSプロキシを使用します.totdは、ク エリ対象のホストがAAAAレコードを持たない場合に、 FAITHで使用するように設定されたプレフィックスを補っ て返します(図2)。
リスト12 /etc/faithd.confの例 ::/0 deny 224.0.0.0/4 ::/0 deny 0.0.0.0/8 ::/0 deny 255.0.0.0/8 ::/0 deny 127.0.0.0/8 2001:200:301::/48 permit 0.0.0.0/0 3ffe:505:2::/48 permit 0.0.0.0/0
totdはports/packagesになっています。ただし、シグ ナルのハンドリングに若干問題があり、boot時に自動的 に起動できません。リスト13にパッチを用意しました。
図2 totdへのクエリ結果 ume@mille:202> nslookup -sil -type=aaaa tasogare.imasy.or.jp. Server: 2001:200:301:0:200:f8ff:fe05:3eae Address: 2001:200:301:0:200:f8ff:fe05:3eae#53 Non-authoritative answer: tasogare.imasy.or.jp has AAAA address 3ffe:505:2:ffff::cae3:1805 Authoritative answers can be found from: imasy.or.jp nameserver = tasogare.imasy.or.jp. imasy.or.jp nameserver = ns2.cyber-fleet.net. imasy.or.jp nameserver = light.imasy.or.jp.
totdの設定は/usr/local/etc/totd.confでおこないま す。forwarderに本当のDNSサーバのアドレスを指定しま す。forwarderは複数行指定できます。prefixにFAITHで 使用するプレフィックスを指定します。prefix行がない と、単なるDNSプロキシとして動作します。また、retry にリトライ秒数を指定できます(リスト14)。
リスト13 totd-1.2に対するパッチ Index: ev_signal.c diff -u ev_signal.c.orig ev_signal.c --- ev_signal.c.orig Thu Sep 7 05:28:36 2000 +++ ev_signal.c Sun Nov 18 08:58:10 2001 @@ -94,7 +94,7 @@ SIGINT, ev_signal_initiator_generic, ev_handler_cleanup }, { - SIGHUP, ev_signal_initiator_generic, ev_handler_cleanup + SIGHUP, SIG_IGN, NULL }, { SIGTERM, ev_signal_initiator_generic, ev_handler_cleanup
totdの起動は/etc/rc.confでおこなうと良いでしょう (リスト15)。
リスト14 /usr/local/etc/totd.confの例 forwarder 2001:200:301:0:240:c7ff:fe97:6f89 port 53 forwarder 202.227.26.36 port 53 prefix 3ffe:505:2:ffff:: retry 30
リスト15 /etc/rc.confの例 named_program="/usr/local/sbin/totd" named_flags=""
| トンネルを張るわけではないため、ここではgif_interfacesは使用できません。 | |
| 最近、DTCPのドキュメントが発掘されました。 http://jazz-1.trumpet.com.au/ipv6-draft/dtcp-draft-prt-13-may-1999.htm そして、これにあるnetworkはtunnelrouteとまさに同じものであることが判りました。 というわけで、 http://www.imasy.or.jp/~ume/ipv6/dtcp/はnetwork でも受け付けるように修正をおこないました。 | |
| DTCPサーバはクライアントのIPv4アドレスが変化したり接続が切れた場合、 該当トンネル関係のリソースを開放します。 DDNS環境でメールを受けるよりもはるかに安全だと思われますが、 やはり少しばかりリスクは伴います。 | |
| RFC3142 - An IPv6-to-IPv4 transport relay translator | |
| 5-CURRENTではローダブルモジュール化されています。 | |
| IPv4射影IPv6アドレスの使用はお奨めしません。 |