祝。インターネットウィーク特集っ!!と、でも言いましょうか;-)。相変わらず 梅さん には査閲して頂いています。有り難うございます。
初期の設定等に付いては、4.0-RELEASE のもう一個の機能。IPv6 してみよう。 に書いて有るのでそっちで確認してください。ここでは、 IPv6 Ready 状態で運用し始めている人向けに書いてみたいと思います。と、言いつつあんまネタ無いんてすけど・・(^^;;
と、言う事で、以下はネットワーク環境です。
+-------+
----| ISP |------------+------- InterNet
+---+---+ |
|IPv4 +----+----+ casper.imasy.or.jp
|+----------| IMASY | IPv4 202.227.24.9
|| IPv6 +---------+
||
|| tun0 IPv4: 203.183.253.52
+---++----+
| FreeBSD | Hostname: nora
+----+----+
| lr0 IPv4:192.168.1.7 / IPv6:3ffe:505:2019:1:200:e8ff:feeb:1ce3
| +---------+
+--+ FreeBSD | IPv4:192.168.1.4/IPv6:3ffe:505:2019:1:2e0:7dff:fe84:18b4
| +---------+
| +---------+
+--+ Win2000 | IPv4:192.168.1.5/IPv6:3ffe:505:2019:1:260:97ff:fe92:cebf
| +---------+
| +----------+
+--+ Solaris8 | IPv4:192.168.1.2/IPv6:3ffe:505:2019:1:260:8ff:feb0:7e58
+----------+
o. ホスト名 nora は PPP して ISP に電話を繋げます。
o. LAN 上には他に、FreeBSD と、Windows2000、更には Solaris8 が居まして、これらは IPv6 Ready 状態になっています。IPv4 はプライベードアドレスが、IPv6 はグローバルアドレスが付いています。他には KondaraMNU/Linux1.2 が居るのですがここでは省略;-)。
o. nora が PPP でダイアルアップした時、IPv4 パケットは ISP へ、IPv6 パケットは IMASY へ IPv6 over IPv4 のトンネルが掘られて流れる事になります。
ま、大体こんな感じですが、4.0-RELEASE のもう一個の機能。IPv6 してみよう。 の所で書いていたのは PPP で接続したマシンだけが IPv4 と IPv6 をおしゃべりするだけでしたが、ここでは LAN の全てのマシンが、IPv6 をおしゃべりする様にしてみましょう。雰囲気的には、
o. LAN の全てのマシンが IPv4 をおしゃべりして、そのパケットは ISP 経由でインターネットへ到達する。
o. と、同時に LAN の全てのマシンが IPv6 をおしゃべりして、そのパケットは IMASY 経由でインターネットへ到達する。
o. この時、IPv6 パケットは IPv4 にカプセル化されて、 IMASY に到達する。
と、言う感じにしたいです。
ここで注意する点ですが、IPv4 はプライベートアドレスを利用していて NAT されるので特には問題はないですが、IPv6 は、グローバルなアドレスが付いているので、はっきり言ってクラッキングのえじきになります。IPv6 対応の守りをする必要があります。
・・。等と口を滑らせると、IPv6 なコミニュティの人々に大々的に怒られます;-)。と、言うかこの手の誤解には厳しいです。NAT 自体はセキュリティ的には無力です。多くの NAT はフィルタリング機能も合わせて持ち合わせていることが多いので、NAT はセキュアだとの誤解を生んでいますが、これは NAT の恩意ではありません。NAT の外側のセグメントで、中のアドレスへの経路をインストールしてみるとわかるでしょう。
IPv4,IPv6 のどっちにしても自分自身を守る事が大切ですね。ただ、重要なのは NAT を誤解しない事です。
まずは、ダイアルアップサーバである、nora が PPP して接続します。ISP より IPv4 の動的グローバルアドレスを取得します。この時、通常であれば、FreeBSD の標準 PPP を利用するかと思います。そして、nat enable オプションを有効にして LAN 内の全てのマシンは nora で NAT されて IP りーちゃぼぉ にるかと思います。あ、 IPv4 のお話ですね;-)。
ただ、FreeBSD 標準の PPP を使い、nat enable にしてしまうと、LAN 内の マシンは IPv6 では外に出ていってくれません。パケットが NAT 変換されて戻って来なくなるんですね。しくしく。
と、言う事で FreeBSD 標準の PPP(IIJ-PPP) では、
o. nat enable を指定すると IPv4 パケットは外に出るけど IPv6 は通らない。
o. nat enable をやめると IPv6 パケットは外に出るけど LAN 上の全てのマシンの IPv4 パケットは通らない。
と、言う様なゆゆしき事態になってしまいます。回避策としては、標準の PPP の利用をやめて PPxP を使う。と OK です。と、言う事は、4.1-RELEASE の頃に書きました。しかし、PPxP も 4.2-RELEASE になったら動かなくなってしまいました。どなたか動いた方いましたか?
と、言う事で打開策を探していたのですが、見つかりましたよぉぉ。ふぅぅ。良かったっ!! と、言う事でつづく;-)。
・VMware の恩恵?
話はガラリと変わって VMware に付いてですが、VMware は ホスト OS 上でゲスト OS を動かしますが、その時、vmnet1 と言うネットワークのデバイスを利用して、外部とやり取りします。ホスト OS 側は vmnet1 からのパケットを NAT して通信する。と、言う事になるわけですね。
その時の設定としては、4.1-RELEASE の インストールの所 で書いています。これと同じ設定にすれば PPP で ipnat できるんでないかい?と、言う事になるのですが、果たしてその通りなのでした。おーーーっ!!パチパチパチ。
・それでは設定してみましょう。
と、言う事で、それでは、話をもとに戻して、PPP の時に、LAN 内の全てのマシンの IPv4 と IPv6 のパケットを流す事が出来る様に設定していきましょう。
ただ、この時点で、以下の条件が付きます。これをクリア出来た人が試してみてください。
1. FreeBSD 標準の PPP の設定が終わっており、IPv4 にて ISP に接続する手段を持っていて接続出来る。
2. IPv6 のグローバルアドレスを持っていて、dtcp(Dynamic Tunnel Configuration Protocol) により、IPv6 over IPv4 トンネルが掘れている。
事が前提になります。この辺りに付いては、4.0-RELEASE の頃に書いた、IPv6 関連の所で、下の方を読んでください。
まず最初にですが、カーネルをリコンフィグします。以下の行を加えて作り直します。
----------------
options IPFILTER #ipfilter support
options IPFILTER_LOG #ipfilter logging
----------------
これが有効になったら次に行きます。ipnat コマンドを利用するのですが、それに必要な設定ファイルを書いて上げます。一応 /etc/ipnat.conf としておきましょう。
----------------
map tun0 192.168.1.0/24 -> 0/32 portmap tcp/udp auto
map tun0 192.168.1.0/24 -> 0/32
----------------
として tun0 に対して 192.168.0./24 のパケットを NAT する様にします。起動時に有効になる様に、/etc/rc/local とか、/usr/local/etc/rc.d/ipnat.sh として、以下のファイルを用意します。以下は、/usr/local/etc/rc.d/ipnat.sh の形式です。
余談ですが、4.2-RELEASE から、/usr/local/etc/rc.d 内の起動スクリプトは start|stop が無いと shutdown 時に「このスクリプトはオールドタイプでっせ。」と怒られる様になりましたね:-|。
----------------
#!/bin/sh
case $1 in
'start' )
if [ -r /etc/ipnat.conf ] ; then
/sbin/ipnat -f /etc/ipnat.conf
fi
;;
'stop' )
/sbin/ipnat -C
;;
* )
echo "usage : ipnat.sh {start|stop}"
;;
esac
----------------
こんな感じですが、これを書かずとも、/etc/rc.conf 内に以下の設定があります。
----------------
ipnat_enable="NO" # Set to YES for ipnat; needs ipfilter, too!
ipnat_program="/sbin/ipnat -CF -f" # program and how to specify rules file
ipnat_rules="/etc/ipnat.rules" # rules definition file for ipnat
ipnat_flags="" # additional flags for ipnat
----------------
これを使っても良いです。が、後にも書いていますが、tun0 に ipnat するのであんまりこの設定は有効ではないかも。VMware には有効ですね;-)。ipnat コマンドは FreeBSD 標準のコマンドなので、jman で日本語のマニュアルが付いてきます。あんま情報無いけど・・(^^;;
これで、設定は完了です。新しいカーネルでマシンをリブートしてみましょう。そして、PPP してみましょう。あ、PPP ですが、"nat enable" のオプションは無しです。PPP 自体での接続は IPv6 が通るので "nat enable" オプション無しで接続します。その後は、ipnat コマンドが有効になり tun0 に対して IPv4 の NAT が有効になる。と、言う事になります。
これでもう一安心ですね。PPxP が使えなくなった時には本当に驚きましたが、今度は FreeBSD の標準で使えます。嬉しいですねぇ。ちなみに同じ NAT 機能を実現するモノとして natd と言うモノがありますが、これを jman natd とすると、
PPP リンク上で NAT を行いたい場合、 ppp(8) の -nat スイッチを使用して ください。
と、書かれています。ipnat と natd は全然別モノである事は解るのですが、この言葉に結構だまされていました;-P。natd がダメなら ipnat もきっと・・。と、言う感じですね。しかし、実際にやってみると、結構簡単に ipnat で PPP の NAT が有効になるんですよね。ふふふ。
と、言う事で、nat enable でない PPP で、ipnat を利用して NAT するので、後は、dtcpc を利用して IPv6 するだけですね。かぁんたん。ふふふ。IPv6 を利用いている皆さん。どうそ、LAN ごとインスターネットに接続してください。そして、IPv6 を存分にお楽しみください;-)。
最後にですが、接続する手順とか注意点などを書いておきます。
1. PPP サーバで ISP にダイアルアップします。この時、nat enable オプションを指定してはダメです。
2. ダイアルアップが成功した後で ipnat コマンドを叩きプライベートアドレスの NAT を開始します。
3. dtcpc コマンドを叩き、IPv6 over IPv4 トンネルを掘ります。
この手順で LAN の全てのマシンが IPv4 と IPv6 の両方での通信が可能になります。CRON に仕込んでおくとよいですね。
注意点そのいちですが、 tun0 に IP アドレスが付いた時点で ipnat コマンドを叩くのがミソです。tun0 が open しないとその効き目が有効にならない為です。
注意点そのにとしては、ipnat で NAT された LAN 内の IPv4 で FTP した時、passive モードでしか動作しません。FTP する時は、FTP のプロンプトで passive と叩くか、もしくは、.tcshrc 等で、setenv FTP_PASSIVE_MODE 等としておけばらくちんでしょう。後は、私が試した所、特に問題なくパケットが飛んで居る様です。
・最後のおまけ。sendmail の IPv6 化。
非常に簡単です。サラリと書きます。 4.2-RELEASE で付いている sendmail-8.11.1 は既に IPv6 化されています。make 時に -DNETINET6 オプション付きで make されている。と、言う事ですね。なので、修正は、/etc/mail/sendmail.cf に以下の行追加してあげるだけで OK です。
----------------
O DaemonPortOptions=Family=inet,Family=inet6
----------------
これで、sendmail を restart すれば OK です。簡単ですよ。皆さんも是非お試しください。
ちなみに私は自分のマシンに IPv6 経由のポートスキャンをかけてみた所、IPv6 でお返事してくれるサービスは、FTP、SSH、TELNET、SMTP、HTTP でした。