本記事では、IPv6仮想アクセスの高度な使い方として、Linuxサーバをルータとして使う方法を紹介しています。「もっと簡単な」方法として、WindowsパソコンのみでIPv6に対応する方法を別記事で紹介していますので、こちらも併せてご覧ください。(2/14追記)

そろそろおうちもIPv6にしたいですよね

IPv4アドレス枯渇!……か?」という話が世間を賑わす今日この頃、皆さんいかがお過ごしでしょうか。今日もIANAのからのIPv4アドレスの割り振りがついに最終局面に入ったという話題で持ちきりですね。ご存じの通り、「IPv4枯渇」というのはある種の象徴的な出来事で、ある日枯渇がやってきたとしても、その瞬間からインターネットが使えなくなるわけではありません。
とはいえ、この状況においてなお、IPv4にだけ依存した生活を続けるのは、我々インターネット人としてはよい選択肢とはいえません。オフィスで、公開セグメントで、家庭で、モバイルで、「ふつーv6使えるよね」なんて涼しい顔をしておくのがエンジニアとしては求められているのです。

オフィスや公開セグメント(サーバ)でIPv6に対応するのは、v6対応の接続サービスという点ではそんなに難しくありません。専用線やデータセンター内接続サービスで「v6ひとつ!」と言えば「あらよっ」ってな具合にv6アドレスが降ってきます。
しかし、残念ながら家庭でのv6についてはむしろ難しいというのが現状です。個人向けブロードバンドサービスで大きなシェアを持つNTT東西のフレッツシリーズでも、IPv6に対応したサービスが開始される予定ですが、まだ、もうちょっと先、という印象です。

そんなのを待ってられない、今すぐIPv6を家で使いたいという向きには、いくつかの会社からトンネリングを利用したIPv6サービスが提供されています。IIJではIPv6トンネリングサービスとIPv6仮想アクセス(IIJmio)(IIJ4U)を提供しています。
似たようなサービスでちょっとややこしいですね。

IPv6トンネリングサービス IPv6仮想アクセス
費用 無料オプション
申し込み必要
無料オプション
申し込み不要
対象サービス IIJmio FiberAccess/SF
IIJmio DSL/SF
(固定IPv4アドレスのサービスのみ)
IIJ4U,IIJmioの全接続サービス
(動的IPv4アドレスサービス、モバイル含む)
IPv6アドレスの割り当て 固定 (/48) 動的 (/64)
対象 家庭内LAN全体 各端末

まとめても違いが分かりにくいですが、正直に言って「対象サービス」のところが重要です。IPv6トンネリングサービスは固定IPアドレスのサービスに限定して提供しているのですが、mioの固定IPアドレスのサービスは少々お高い……1ということで、今回は手軽なIPv6仮想アクセスを使ってみることにします。

なお、この方法はあくまで「てくろぐ」のネタとして紹介するもので、IIJが動作を保証するものではありません。本件についてサポート窓口へのお問い合わせはご遠慮ください。

IPv6仮想アクセスで家庭内LANごとv6化する

自宅LANの環境
自宅LANの環境

さて、公式な説明ではIPv6仮想アクセスを使う場合、Windows Vista/7のVPN接続を使うことになっていますが、これだと特定の端末でしかIPv6環境を利用できません。折角ですから家庭内LAN全体をv6化したいですよね?ということで、今回はLinuxを使ってIPv6仮想アクセスに接続し、ついでにそのLinuxサーバでv6をルーティングしてLAN全体をv6化するという実験をやってみることにします。

今回は右図のようなネットワークで実験します。ごく普通の家庭内LANですね?(つまり、私の自宅です)ご覧の通り、Linuxサーバ自身がグローバルアドレスを持っている必要はありません。すでに家庭内LANに内にLinuxサーバがあればそれを使ってもかまいません。ちなみに私は家にあるVMWareサーバ上に、新しく実験用のVMを作って試しました。Linuxのディストリビューションも大抵のもので利用できると想いますが、私はCentOS5.5(x86)を使っています。他のディストリビューションの場合は、パッケージのインストール方法が異なる事がありますが、適宜読み替えてください。

ブロードバンドルーターは特に機種の指定はありませんが、PPTP(GREパケット)が通過できる必要があります。「VPNパススルー」という機能名で書かれていることが多いですね。ちなみに筆者はNEC Aterm WR8700N HP(無線LAN対応ブロードバンドルーター)を使用しています。
なお、ルータによっては「IPv6ブリッジ」など、フレッツシリーズで使われるIPv6パケットをLAN側に中継する機能を持っているものがありますが、ルータの設定画面からoffにしておいてください。LAN側で複数のIPv6 RAが告知され、混乱の元になります。

パッケージの導入・設定

PPTPトンネルとIPv6パケットの流れ
PPTPトンネルとIPv6パケットの流れ

それでは実際に設定を始めましょう。
今回目指すのは、右の図のようにLinuxサーバをからIIJのトンネルルータまでPPTPでトンネルを作り、そこを経由してIPv6インターネットへと接続するものです。Linuxサーバでは、PPTPクライアントを動かしIPv6仮想アクセスし接続しながら、LANとのルーティングを行います。また、LAN内の端末にIPv6アドレスを付与するためにRA(Router Advertisement)を行います。

まず、関連するソフトウェアを導入します。必要になるのは、IPv6仮想アクセスに接続するためのPPTPクライアント(PPTPCient+pppd)と、LAN側にRAを告知するためのデーモン(radvd)です。
radvdと、PPPデーモンはCentOS配布物に含まれているため、yumでインストールしましょう。

残念ながら、PPTPクライアントはCentOS5.5の配布物には含まれていないため、http://pptpclient.sourceforge.net/で配布されているPPTPクライアントを利用します。

次に、接続先の設定を行います。

接続先は、/etc/ppp/peers/[設定名]に保存します。ここではvirtualv6という名前を使います。

/etc/ppp/peers/

最後の「ipv6」オプションには、このサーバが使うIPv6アドレスのインターフェースIDを指定します。このサーバのIPv4アドレスの最下位オクテッドが30だったため、それに併せて1e(10進数で30)を指定しました。

また、このアカウントに対するパスワードは、/etc/ppp/chap-secretsに記述します。このファイルにはパスワードをそのまま書くことになるので、root以外が参照できないようにパーミッションに注意してください。

/etc/ppp/chap-secrets

最後に、LAN側にRAを告知するためのradvdの設定を行いますが、実は、この設定に記載すべきIPv6アドレスのprefixは、PPTP接続をした瞬間に動的に決定されるため、あらかじめ指定しておくことができません。ここではとりあえずひな形だけを作っておき、PPTP接続後に修正します。

/etc/radvd.conf

接続してみましょう

設定の準備が整ったところで、実際にIPv6仮想アクセスに接続してみます

実行するとすぐにプロンプトに戻ってきますが、設定に問題がなければこれでIPv6仮想アクセスに接続ができています。
ifconfigコマンドで確認してみましょう。

赤色の部分がIPv6仮想アクセスによって割り当てられた、IPv6 GUAアドレス(いわゆるグローバルアドレス)です。

この状態でサーバからpingをして接続を確認しておきます。

正しくv6アドレスでpingの応答があれば、まずはIPv6仮想アクセスへの接続は成功です。

次に、LAN内のWindows端末からもv6を使えるようにするために、Linuxサーバ上でのパケットの転送(ルーティング)とRAの告知を行います。
まず、先ほど用意したradvd.confのひな形を書き換えます。

/etc/radvd.conf
※該当箇所のみ

radvdの起動のためには、先にLinux kernel上でルーティングが有効になっている必要があるので、sysctlを使ってkernel変数を書き換えてから、radvdを起動します。

これでLANに繋がったWindows端末でもIPv6アドレスが割り当てられているはずです。
ipconfigコマンドで確認してみましょう。

しかし、この状態ではLinuxサーバ上のルーティングテーブルが正しく設定されていないため、Windows端末からのIPv6パケットを正しくルーティングできません。次のようにして経路を設定します。

現在の経路はroute –inet6を実行すると確認できます。

IIJのトップページでIPv6でアクセスできているか確認
IIJのトップページでIPv6でアクセスできているか確認

これでWindows端末からもIPv6でインターネットにアクセスできるようになっているはずです。Webブラウザから、http://www.iij.ad.jp/ を開いてみます。画面上部に「connected via IPv6」と表示されていれば、接続成功です。(ブラウザのキャッシュに残っている場合があるので、表示が変わらない場合はreloadしてみてください)

IPv6仮想アクセスを終了するときは、radvdとpppdを終了すればOKです。パケット転送も無効にしておきます。

これからはIPv6が標準ですよねー

ということで、無事に家庭でもIPv6を使える環境が準備できました。
今回は一台のWindows端末だけをつないでいますが、ちゃんとLANとしてIPv6 Readyになっていますので、別のWindows端末をつないでも、Macをつないでも、IPv6対応の家電をつないでも、問題なくv6環境を使うことができます。もちろんここでIPv6対応のサーバを稼働させることもできるのですが、IPv6仮想アクセスはv6アドレスが動的割り当てなので、サーバを設置するには適していないかもしれません。
IPv6対応サーバがご入り用でしたら、IPv6標準対応のIIJ GIOをご検討ください :-)

// FIX ME

今回の設定では以下の点について手抜きがあります。ご注意ください。

セキュリティ対策が施されていません
Linuxサーバ、Windows端末など、LAN内に接続されたIPv6対応端末は、インターネットからも自由にアクセスできてしまいます。Linuxサーバ上のppp0インターフェースに対し、ip6tablesでパケットの制御をかけるなど、適切な対策を施してください。

DNS名前解決がIPv4に依存しています
IPv6でアクセスできるDNS参照サーバを用意していません。このため、DNSの名前解決はIPv4でアクセスしています。

本日の関連コンテンツ

今回の記事はネットワークサービス部 サービス開発課 宮本 外英さんのアイデアを元に、堂前が検証・執筆を行いました。


  1. もちろんそれに見合ったサービスを提供していますよ! []

6 thoughts on “今日からv6生活(家庭内LAN編)

  1. 記憶違いかもしれませんが、 net.ipv6.conf.all.forwarding を 1 にすると RA を受信しなくなったと思います。
    すると一定期間の後にデフォルトゲートウェイを見失って、IPv6で通信できなくなりませんか?
    的外れなコメントでしたら申し訳ありません。

  2. 記憶違いかもしれませんが、 net.ipv6.conf.all.forwarding を 1 にすると RA を受信しなくなったと思います。
    すると一定期間の後にデフォルトゲートウェイを見失って、IPv6で通信できなくなりませんか?
    的外れなコメントでしたら申し訳ありません。

  3. Pingback: reconstructed RobotechBlog » Blog Archive » 2011-02-26 きょうのつぶやき

  4. kさん
    ご指摘ありがとうございます。
    (spamが多いので、コメントは承認後に表示されるように設定しています。すみません)

    net.ipv6.conf.all.forwarding=1にしたときには、ご指摘どおりRAを無視します。
    ですが、default routeについては、接続後にrouteコマンドにより設定し直しているため、timeoutで消えることはありません。
    また、ppp0についているv6アドレスも、PPTPが確立している間は維持されます。

  5. 反映されなかったのでコメント本文以外のフォームを埋めて再度送信してしまいました。申し訳ありません。
    デフォルトルートに関しては勘違いでした。(しかもゲートウェイと書いてしまいました。嗚呼…)

    また質問なのですが、記事中で ppp0 に付与されているリンクローカルではない方の IPv6 アドレスは PPP か PPTP のハンドシェイク過程で設定されるのでしょうか?
    パッケージをインストールが指示されていないのでおそらく DHCPv6 ではないと考えていましたが、PPTP の接続が確立している間維持されるということは有限の preferred-lifetime / valid-lifetime を持つ RA でもないのかな、と思いまして。

  6. すみません、お返事遅れました。
    私も勘違いが一つありました。

    確かに、ppp0のアドレスはRAでprefixを取得していますので、一定時間後に蒸発してしまいます。
    ただ、ppp0と対向のルータの間はlinklocalでやりとりできてしまうので、LANからの通信はできてしまいます。
    でも、Linux箱自体から通信ができないのは気持ち悪いですね。
    RAで降ってきたprefixを使ってeth0等に明示的にifconfigでアドレスをつけてやると、回避できます。

Comments are closed.