割り当てられないのであれば、自分で割り当てよう!ということで、L2TPで繋いだVPNでIPv6を流してみる。
今回は、IPv6アドレスを割り当てられているLinux(CloudCoreのCentOS 5.8)に対してOSX(Mountain Lion)からVPN接続し、踊る亀を見られるようにする。
まずはLinux側。すでに何らかの形で固定のIPv6アドレスを、/64よりも大きなブロックで割り当てていることが前提。6to4で割り当てられるのは/48なので、それでもOK。
最初は普通にL2TPのサーバにする。さくらのVPSでiPhone用の野良WiFi通信傍受対策のL2TP/IPsec(VPN)を設定したメモ(CentOS5) - nori_no のメモなどを参考に。openswanもxl2tpdもrpmがあったので、それでインストール。とりあえずはIPv4のアドレスを割り当てるようにする。
次に、Mountain Lion側。システム環境設定→ネットワーク で、新しいサービスを追加する。
- インターフェイス:VPN
- VPN タイプ:L2TP over IPSec
- サービス名:適当に
- サーバアドレス:Linuxのホスト名またはIPv4アドレス
- アカウント名:Linuxの/etc/ppp/chap-secrets に書いたclientの名前
- コンピュータ認証:/etc/ipsec.secret に書いたパスワード
- パスワード:/etc/ppp/chap-secrets に書いたパスワード
適用ボタンを押して設定を保存したら、接続ボタンを押して、繋がるかどうか確認。詳細...ボタンを押して、TCP/IPの欄でIPv4 アドレスやサブネットマスクなどが割り当てられていることを確認する。
- Linux側では、UDPの1701, 500, 4500が通信できるようにiptablesが設定されていること。
- 設定に問題ないようであれば、ipsecを再起動してみる(sudo /sbin/service ipsec restart)
- Mountain Lion側では、パスワードを正しく設定していること。
ここまでできたら、IPv6用の設定に移る。
Linux側の /etc/ppp/options.xl2tpd の最後に、
+ipv6
ipv6cp-accept-local
を追加。
/etc/sysconfig/network-scripts にifcfg-ppp0 というファイル(ppp1やppp2かもしれないが、通常は0でOK)を新たに作る。中身は
IPV6INIT=yes
IPV6ADDR=受け側のIPv6アドレス/64
とする。次。/etc/ppp/ipv6-up がバグっているような気がしてならない。ので、ちょっと手を入れる。
47行目前後にある
CONFIG=$REALDEVICE
を
CONFIG=$LOGDEVICE
にする。そして、/etc/ppp にipv6-up.local というファイルを作る。中身は
#!/bin/bash
PREFIX="割り振るIPv6のネットワーク"
/sbin/ip6tables -P FORWARD ACCEPT
/sbin/ip6tables -A FORWARD -i $1 -j ACCEPT
/sbin/ip6tables -A INPUT -i $1 -j ACCEPT
とする。ifcfg-ppp0で/64としているので、PREFIXは::/64 で終わるアドレスとなる。このファイルに実行権限をつけることを忘れないこと。これは、IPv6アドレスが割り当てられた時に実行される。Mountain Lion側は、システム環境設定→ネットワーク でさっき作ったサービスを選択し、詳細... のTCP/IP タブを選択。IPv4 の構成を「切」にする。
また、/etc/ppp/ipv6-up というファイルを作り、実行権限を付けておく。中身は
#!/bin/sh
/sbin/ifconfig $1 inet6 add 割り当てるIPv6アドレス/64
/sbin/route add -inet6 default $4%$1
/sbin/route change -inet6 default $4%$1
とする。Linux側で最後を::1として、Mountain Lion側では::2とするとわかりやすいかも。
これで設定はOK。作った「サービス」に繋いだ後、踊る亀にアクセスして、亀の絵がアニメーションしていればIPv6で接続できている。
本来であれば、Linux側でradvdを動かしていればMountain Lion側のIPv6アドレスは自動で割り当てられるのだが、 IPv6 Address on L2TP VPN: Apple Support Communitiesで指摘されているように、アドレスの割当が行われない。そのため、/etc/ppp/ipv6-up を用意して手動で割当を行っている。