Linuxルータでフレッツ光ネクスト(NGN)のIPv6を運用する方法:IPoE(ネイティブ接続)+ひかり電話無し編

昨日に引き続き、Unix系のOSをルータにしている場合に、NTT東日本が提供しているフレッツ光ネクスト(NGN)でIPv6を運用する際のTipsをまとめた。今回はひかり電話契約が無い場合である。


ひかり電話を契約していない場合、IPoEで払い出されるIPv6アドレスはプレフィックスが/64となる。払い出し方もひかり電話有りの場合と異なり、NGN網内のルータから流れてくるRAにより行われる。

RAでIPの設定が行われる場合、NGN網側ルータとクライアントPCはL2で接続されている必要がある。そのため、市販のブロードバンドルータには「IPv6ブリッジ」という機能が搭載されており、この機能を使用するとブローバンドルータがIPv6に関してはハブとして動作するようになる。これにより、クライアントPCとNGN内のルータがL2で接続されるため、RAを正常に受信することが出来る。

Linuxルータでも動揺の動作は簡単に実現可能である。brctlでWAN側とLAN側のインターフェースをブリッジすれば良い。ただし、この方法の欠点はL2レベルで宅内のネットワークが丸見えになってしまう点である。NGNの性質上余り大きな問題とはならないと思われるが、余り気持ちのいい状態ではない。セキュリティを意識するのであればL2用のフィルタであるebtablesを使用してIPv6以外のパケットをDROPする必要がある。ただし、ebtablesでIPv6パケットのみを通過させるように設定するのは若干面倒な作業である。フィルタの設定がip6tablesと分散してしまうため可能であれば避けたい。なお、設定例自体はすでに事例がいくつか公開されているので検索すれば見つけることが可能である。

L3のみで問題を解決する場合、Linuxルータには通常通りルーティングを行わせる。これは単純に、RAの送信元(NGN側ルータ)のIPをWAN側インターフェース経由のデフォルトゲートウェイに設定し、sysctlでforwardingを許可すれば良い。Ubuntuなどでは/etc/sysctl.confの該当行を有効にするだけでいい。編集したファイルの内容はsudo sysctl -pで反映される。

net.ipv6.conf.all.forwarding=1

この状態ではNGN側ルータから流れてきたRAは宅内のLinuxルータを超えることが出来ない。宅内のホストにRAを提供するために、radvdをLinuxルータのLAN側インターフェースで起動し、RAを自ら発信する必要がある。Ubuntuではそのままの名前のパッケージがあるので、インストールは簡単である。/etc/ardad.confを以下のように設定する。eth1はLAN側のインターフェースである。

interface eth1
{
        AdvSendAdvert on;
        prefix 払い出されたプレフィックス/64
        {
                AdvOnLink on;
                AdvAutonomous on;
        };
};

最後の仕上げとしてndppdをインストールする。ndppdはNeighbor Discovery Protocol (NDP)を中継するためのデーモンである。NGN側ルータは宅内にさらなるルータ(Linuxルータ)が存在することを認識していないため、宅内ネットワークのホストに対してダイレクトルーティングでパケットを転送しようとする。このとき、IPアドレスから対象ホストのMACアドレスを取得するために、ICMPv6のNeighbor Solicitationを利用する。一方でLinuxルータはWAN側とLAN側のネットワークを別のネットワークとして認識しているため、NGN側のルータから送信されたNeighbor SolicitationをLAN側に転送することはしない。NGN側ルータはNeighbor Solicicationに対する応答が無いため宅内のホストは存在しないものとして認識し、通信は失敗する。この問題を解決するためにはLinuxルータ上でNDPのパケットを中継(Proxy)する必要がある。手動で設定する場合、以下のコマンドで可能である。IPv4で言うところのProxy ARPに近い動作である。

sudo ip -6 neigh add proxy 宅内ホストのIPアドレス dev eth1

手動で中継の設定を行う場合、宅内ネットワークに存在する全てのホストに対してこのコマンドを実行する必要があるため非常に煩雑である。ndppdを起動しておくと必要に応じて自動的に転送を行ってくれるため、個別設定が不要になる。ndppdはUbuntuのリポジトリには含まれていないため、サイトからダウンロードしてインストールする必要がある。debファイルが配布されているので、Ubuntuならばdpkgで簡単にインストールできる。設定ファイルは/etc/ndppd.confにインストールされるので、転送するプレフィックスを指定する。なお、標準インストールではLinuxルータの起動時にデーモンが自動起動しない可能性が有るのでupdate-rc.dなどを用いてランレベルの設定を行うと良いだろう。

以上で/64のプレフィックスをL2ブリッジなしで使うことが出来るようになる。この場合、パケットフィルタはip6tablesのみで可能である。