読者です 読者をやめる 読者になる 読者になる

AS2500の最果てで

AS2500のどっかのNOCのまとまらないまとめ

さくらのVPSでIPv6を使う (v6ip.tsukuba編)

VPS(仮想専用サーバ)のさくらインターネット

さくらのVPSでv6?

さくらのVPSは結構前からv6やるって言ってたと思うんだけどなかなか(native)対応してくれない。ならユーザで対応させよう。

一応6rdでの接続は提供しているらしい。まだやってるのかは知らないけど。
さくらの6rd(トライアル) « さくらインターネット研究所

Tokyo6to4を使ってv6対応するのをやってる人もいました。
さくらVPSのFreeBSDサーバでv6対応

さて、我々つくばWIDEはどうするか。PacketiX VPNしかない。

ソフトイーサ (株) - 業界標準の広域イーサネットと インターネットVPN を目指して


PacketiX VPN 3.0 Web サイト

PacketiX VPN

PacketiX VPN(パケティックス ブイピーエヌ)とはソフトイーサ株式会社で開発されているvpnソフトウェアです。
HTTPSのセッションの上にVPNを作るのでHTTPSを蹴られない限りvpnが構築できます。

現在次期ベータ版が公開されててこっちだと他のvpnと接続できます。(e.g. L2TPv3 over IPsec)

IPsec / L2TP / EtherIP / L2TPv3 対応ベータ版 - PacketiX VPN 3.0 Web サイト

素晴らしいことに製品版でもクライアントは無料で利用できる。ベータ版に至ってはサーバも手に入ります。
今回はこのBeta2を使ってさくらのvpsにv6を引いてみたいと思います。

しかしv6の接続性...?

v4の接続性はさくらインターネットが提供してくれるし、6rdもさくらインターネットだし、Tokyo6to4はTokyo6to4がv6の接続性を提供してくれるけどPacktiX VPNは一体誰がv6配ってくれるんだ?しかもどこの鯖に繋げば?

非営利目的であれば無料でv6配ってるところがあります。

グローバル・固定 IPv6 アドレス割当型トンネル接続実験サービス トップページ

はい。我々です。左のメニューからユーザー登録することで誰でも利用できます。

ユーザー登録すると
f:id:Flast:20120623134502j:plain
このようなpwが書かれたメールが送られて来ます。
このユーザー名とpwが接続時に使うユーザー情報なので覚えておいて下さい。

しかもこのサービスはユーザー毎に /64 のv6を配ります。RAが降ってくるのでvpnの設定さえすれば直ぐにv6環境を手に入れることができます。

実際にさくらのVPSで設定

今回さくらのVPSで使うOSはデフォルトのCentOS 6.2 x86_64としました。PacketiX VPNはWin,Mac OS,Linuxの他に様々なプラットフォーム、アーキテクチャに対応しているのでぜひ確認してみて下さい。
Linux以外で実験した(さくらのVPSに限らず)という人がいれば是非フィードバックしてください。

DLからビルド

まぁともかくまずはダウンロード。
download.softether.co.jp - /folder/vpn3_ipsec_beta/v3.04-7844-beta2-2012.03.18/
download.softether.co.jp - /folder/vpn3_ipsec_beta/v3.04-7844-beta2-2012.03.18/Japanese/Linux/PacketiX VPN Client 3.0/64bit - Intel x64 or AMD64/

以後VPS上のrootのシェルと考えて下さい。

ダウンロードして解凍します。

# cd /usr/local
# curl http://download.softether.co.jp/folder/vpn3_ipsec_beta/v3.04-7844-beta2-2012.03.18/Japanese/Linux/PacketiX%20VPN%20Client%203.0/64bit%20-%20Intel%20x64%20or%20AMD64/vpnclient-v3.04-7844-beta2-2012.03.18-ja-linux-x64-64bit.tar.gz | tar zx

解凍が終わるとvpnclientというディレクトリができているはずです(Permissionがアレですが...)。vpnclientに入るとMakefileがあると思います。

# cd vpnclient
# ls
code         Makefile                        ReadMeFirst_License_SJIS.txt
hamcore.se2  ReadMeFirst_License_EUC.txt     ReadMeFirst_License_UTF8.txt
lib          ReadMeFirst_License_GB2312.txt

makeをすればいいのですが、その前に利用許諾の確認があります。確認して同意できる場合のみ進んで下さい。

# make
... 省略 ...
# ls
code         ReadMeFirst_License_EUC.txt     vpnclient
hamcore.se2  ReadMeFirst_License_GB2312.txt  vpncmd
lib          ReadMeFirst_License_SJIS.txt
Makefile     ReadMeFirst_License_UTF8.txt

ここで新たにできたvpnclientがクライアントソフトウェアです。vpncmdはクライアントソフトウェアに限らずサーバー等の操作も可能なシェルです。設定等はすべてvpncmd経由で行います。
見逃しがちですが、hamcore.se2というファイルはvpnclientとvpncmdの動作に必要なファイルです。同じところにある必要があるので注意して下さい。

vpnclient

vpnclientはデーモンですが、勝手にforkするタイプのデーモンです。
コマンドラインから

# ./vpnclient start
# ./vpnclient stop

で起動と停止ができます。

init.dあたりにこれを叩くスクリプトをおいてchkconfigすれば勝手に上がってくるようになります。
例えばこんなの

# cat /usr/init.d/vpnclient
#!/bin/bash
# Default-Start:  3 4 5
# Default-Stop: 0 1 6
# chkconfig: - 15 85

prog=/usr/local/vpnclient/vpnclient

start() {
	$prog start
}

stop() {
	$prog stop
}

case "$1" in
	start)
		start
		;;
	stop)
		stop
		;;
	*)
		echo $"Usage: $0 {start|stop}"
		exit 2
esac
# chmod +x vpnclient
# chkconfig --add vpnclient
# chkconfig vpnclient on

こうすれば起動時に勝手に上がってくれます。

vpncmdでv6ipへの接続を設定

vpnclientを起動しただけではvpnが張られるわけではないです。適切にvpncmdで設定を流す必要があります。

とりあえずvpncmdを起動します。

# ./vpncmd
vpncmd コマンド - PacketiX VPN コマンドライン管理ユーティリティ
PacketiX VPN コマンドライン管理ユーティリティ (vpncmd コマンド)
Version 3.04 Build 7844 Beta 1 (Japanese)
Compiled 2012/03/18 22:38:30 by yagi at pc25
Copyright (C) 2004-2010 SoftEther Corporation. All Rights Reserved.

vpncmd プログラムを使って以下のことができます。

1. VPN Server または VPN Bridge の管理
2. VPN Client の管理
3. VPN Tools コマンドの使用 (証明書作成や通信速度測定)

1 - 3 を選択: 2

接続先の VPN Client が動作しているコンピュータの IP アドレスまたはホスト名を指定してください。
何も入力せずに Enter を押すと、localhost (このコンピュータ) に接続します。
接続先のホスト名または IP アドレス: 

VPN Client "localhost" に接続しました。

VPN Client>

今回はローカルで動いてるVPN Clientの設定を行うので2を選択してそのままEnter。

プロンプトが出てきたらここに設定を流し込みます。使えるコマンドは多いので省略しますがhelpと打つと出てきます。

所謂トンネルインターフェースが必要になるのでまず作ります。インターフェース名は v6ip としました。ifconfigで見られるインターフェース名はここで設定したインターフェース名の前に vpn_ が付きます。

VPN Client>niccreate
NicCreate コマンド - 新規仮想 LAN カードの作成
仮想 LAN カードの名前: v6ip

コマンドは正常に終了しました。

VPN Client>niclist
NicList コマンド - 仮想 LAN カード一覧の取得
項目             |値
-----------------+-----------------------------------------
仮想 LAN カード名|v6ip
状態             |有効 (使用可能)
MAC アドレス     |00AC25E850D6
バージョン       |Version 3.04 Build 7844 Beta 1 (Japanese)
コマンドは正常に終了しました。

VPN Client>

一旦 で止めてifconfigを見てみると仮想NICが作られてるのが確認できます。

vpn_v6ip  Link encap:Ethernet  HWaddr 00:AC:25:E8:50:D6  
          inet6 addr: fe80::2ac:25ff:fee8:50d6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

今度はv6ipのサーバへの接続設定を叩き込みます。

VPN Client>accountcreate
AccountCreate コマンド - 新しい接続設定の作成
接続設定の名前: v6ip

接続先 VPN Server のホスト名とポート番号: v6ip.tsukuba.wide.ad.jp:8888

接続先仮想 HUB 名: ACVPN

接続するユーザー名: Flast

使用する仮想 LAN カード名: v6ip

コマンドは正常に終了しました。

VPN Client>accountlist
AccountList コマンド - 接続設定一覧の取得
項目               |値
-------------------+-----------------------------------------------
接続設定名         |v6ip
状態               |オフライン
接続先 VPN サーバー|v6ip.tsukuba.wide.ad.jp:8888 (直接 TCP/IP 接続)
仮想 HUB 名        |ACVPN
仮想 LAN カード名  |v6ip
コマンドは正常に終了しました。

VPN Client>

VPN Serverのホスト名は v6ip.tsukuba.wide.ad.jp で、ポートは 8888 または 443 です。また仮想HUB名v6ipでは ACVPN です。
仮想LANカード名は先程作ったものを指定します。

ユーザー登録した際に送られてきたpwは次のように設定します。

VPN Client>accountpasswordset
AccountPasswordSet コマンド - 接続設定のユーザー認証の種類をパスワード認証に設定
接続設定の名前: v6ip

パスワードを入力してください。キャンセルするには Ctrl+D キーを押してください。

パスワード: ************
確認入力  : ************


standard または radius の指定: standard

コマンドは正常に終了しました。

VPN Client>

pw入力直後の standard または radius の設定 というのはstandardと入力して下さい。

以上で接続に必要な設定は揃いました。

実際に接続する

先ほどの設定でvpnに接続しましょう。

VPN Client>accountconnect
AccountConnect コマンド - 接続設定を使用して VPN Server へ接続を開始
接続設定の名前: v6ip

コマンドは正常に終了しました。

VPN Client>accountstatusget
AccountStatusGet コマンド - 接続設定の現在の状態の取得
接続設定の名前: v6ip

項目                          |値
------------------------------+------------------------------------------------
接続設定名                    |v6ip
セッション接続状態            |接続完了 (セッション確立済み)
VLAN ID                       |1001
サーバー名                    |v6ip.tsukuba.wide.ad.jp
ポート番号                    |TCP ポート 8888
サーバー製品名                |PacketiX VPN Server 3.0 Premium Edition (32 bit)
サーバーバージョン            |3.03
サーバービルド番号            |Build 7400
接続開始時刻                  |2012623() 15445秒
初回セッションの確立時刻      |2012623() 15445秒
現在のセッションの確立時刻    |2012623() 15445秒
セッション確立回数            |1 回
半二重 TCP コネクションモード |いいえ (全二重モード)
VoIP / QoS 対応機能           |有効 (使用中)
TCP コネクション数            |2
TCP コネクション数最大値      |2
暗号化の使用                  |はい (暗号化アルゴリズム: RC4-MD5)
圧縮の使用                    |いいえ (圧縮無し)
セッション名                  |SID-FLAST-2538
コネクション名                |CID-18596
セッションキー (160bit)       |DE1BFBE0110E5A81ADE57C34C3D4A9DC87386774
ブリッジ / ルータモード       |いいえ
モニタリングモード            |いいえ
送信データサイズ              |1,117 バイト
受信データサイズ              |12,732 バイト
送信ユニキャストパケット数    |0 パケット
送信ユニキャスト合計サイズ    |0 バイト
送信ブロードキャストパケット数|7 パケット
送信ブロードキャスト合計サイズ|546 バイト
受信ユニキャストパケット数    |28 パケット
受信ユニキャスト合計サイズ    |12,418 バイト
受信ブロードキャストパケット数|0 パケット
受信ブロードキャスト合計サイズ|0 バイト
コマンドは正常に終了しました。

VPN Client>

accountstatusgetでセッション接続状態が接続完了になれば接続できたということです。

exitしてifconfigしてみるとRAによって自動設定されてるのがわかります。

# ifconfig vpn_v6ip
vpn_v6ip  Link encap:Ethernet  HWaddr 00:AC:25:E8:50:D6  
          inet6 addr: 2001:200:1c8:3e9:2ac:25ff:fee8:50d6/64 Scope:Global
          inet6 addr: fe80::2ac:25ff:fee8:50d6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:254 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500 
          RX bytes:45417 (44.3 KiB)  TX bytes:546 (546.0 b)

皆さん大好きwww.kame.netにpingを打ってみましょう。

# ping6 -c 4 www.kame.net
PING www.kame.net(2001:200:dff:fff1:216:3eff:feb1:44d7) 56 data bytes
64 bytes from 2001:200:dff:fff1:216:3eff:feb1:44d7: icmp_seq=1 ttl=58 time=32.9 ms
64 bytes from 2001:200:dff:fff1:216:3eff:feb1:44d7: icmp_seq=2 ttl=58 time=34.7 ms
64 bytes from 2001:200:dff:fff1:216:3eff:feb1:44d7: icmp_seq=3 ttl=58 time=32.5 ms
64 bytes from 2001:200:dff:fff1:216:3eff:feb1:44d7: icmp_seq=4 ttl=58 time=36.6 ms

--- www.kame.net ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3041ms
rtt min/avg/max/mdev = 32.531/34.232/36.696/1.637 ms

出れることわかったので逆に外から到達するか確認しましょう。

C:\Users\Flast>ping -6 2001:200:1c8:3e9:2ac:25ff:fee8:50d6

2001:200:1c8:3e9:2ac:25ff:fee8:50d6 に ping を送信しています 32 バイトのデータ:
2001:200:1c8:3e9:2ac:25ff:fee8:50d6 からの応答: 時間 =1074ms
2001:200:1c8:3e9:2ac:25ff:fee8:50d6 からの応答: 時間 =53ms
2001:200:1c8:3e9:2ac:25ff:fee8:50d6 からの応答: 時間 =41ms
2001:200:1c8:3e9:2ac:25ff:fee8:50d6 からの応答: 時間 =29ms

2001:200:1c8:3e9:2ac:25ff:fee8:50d6 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 29ms、最大 = 1074ms、平均 = 299ms

C:\Users\Flast>

ちゃんと到達してますね。偉大偉大。

ところでvpnclientが起動したら自動でつなぎに行って欲しいということもあるかと思います。その場合、vpncmd上で

VPN Client>accountstartupset
AccountStartupSet コマンド - 接続設定をスタートアップ接続に設定
接続設定の名前: v6ip

コマンドは正常に終了しました。

VPN Client>

とすることでvpnclientが起動すると自動で接続されます。

諸注意

今までさくらのVPSはv4だけだったのでファイアウォールもv4だけ考えれば問題ありませんでした。しかし今回v6のglobalアドレスが振られることになり、v6経由での攻撃も可能になってしまいました。iptablesなりでしっかりとセキュリティを確保した上で十分に注意して利用して下さい。

また、このv6ipサービスは研究目的の実験サービスです。急にダウンしたりメンテしたりすることもあるので確実にv6を使える保証はできません。そこら辺を必ず念頭に置いて利用して下さい。