SEIL/x86 で DS-Lite

IIJ は本日 IIJmio FiberAccess/NF サービス にて「Dual-Stack Lite」(以下 DS-Lite と略します)プロトコルを利用した IPv4 接続機能の提供を開始しました。これに合わせ、SEIL も DS-Lite プロトコルに対応した新ファームウェアを リリースしましたので、今回はその使い方を紹介します。

記事一覧

対応ファームウェア

SEIL の DS-Lite 機能を利用するためには、SEIL/x86 の最新ファームウェア 3.21 が必要です。 SEIL/x86 をご利用中の方はこちら から最新版の 3.21 を取得してファームウェアを更新してください。 SEIL/x86 をまだお持ちでない方は 「SEIL/x86でNGN IPv6接続を試す」 を参考にファームウェアを取得し、インストールしてください。 軽く試す範囲であれば無料でご利用いただけます。

なお DS-Lite 機能は現時点(2014/10/1)では SEIL/x86 のみのサポートとなっていますが、 他機種版も順次リリース予定ですのでご期待ください。

注:

(2015/02/20 追記) 昨年末にリリースされたファームウェア 4.70 版で SEIL/X1, SEIL/X2, SEIL/B1 の 3機種でも DS-Lite が利用できるようになりました。

また上り方向の性能が出ない場合があることがわかったため、"option ipv6 avoid-path-mtu-discovery off" コマンドを追加しました。

(2015/03/19 追記) 設定例にtunnelインタフェースのIPアドレス設定が不足していたため、"interface tunnel0 unnumbered" コマンドを追加しました。

IPv6 接続設定の確認

DS-Lite プロトコルは、IPv6 ネットワーク上に仮想的なトンネルを作り、その中に IPv4 パケットを通すことで IPv4 インターネットに接続するトンネリングプロトコルの一種です。 そのため DS-Lite を利用するためには IPv6 インターネット接続が必要です。 IPv6 インターネットに接続していない方は、まずこちらの記事 「SEILで NGN IPv6ネイティブ(IPoE)接続を試す」 を参考に IPv6 接続設定を行ってください。

DS-Lite プロトコルを利用する場合、IPv6 の接続設定では以下の点に気をつけてください:

  1. resolver コマンドを有効にし、DNS サーバには "dhcp6" を指定する
  2. filter6 コマンドで "protocol 4" を空けておく

resolver コマンドは SEIL 自身が名前解決をする際に利用する DNS サーバを指定するコマンドです。 単にインターネットに接続するだけであれば必須ではないため設定せずに放っておかれがちなコマンドですが、 DS-Lite では原則としてサーバ(AFTR)を DNS 名で指定するため、 設定が必要となります。 また IIJmio FA/NF の DS-Lite を利用する場合に特有の事情として、 resolver は DHCP6 クライアント機能で得た DNS サーバを使って名前を引くように設定しておく必要があります。 それ以外の DNS サーバ、例えば IPv4 PPPoE 接続で提供される DNS サーバでは gw.transix.jp の名前を解決することができません(NXDOMAIN が返るはずです)。

dhcp6 client enable
dhcp6 client interface lan1
resolver enable
resolver address add dhcp6

なお、 DS-Lite AFTR は DNS 名ではなく IPv6 アドレスで指定することもできますので、 構成上の理由等で DHCP6 で提供される DNS サーバを利用できない場合は、 PC 等を利用して IPv6 アドレスを調べ、得られたアドレスを設定してください。

また、 filter6 コマンドを利用して IPv6 のパケットフィルタリングを行っている場合、 DS-Lite プロトコルのパケットがフィルタで落とされないようにしてください。 DS-Lite プロトコルは IPv4 パケットを IPv6 のペイロードに直接入れる IP-in-IP と呼ばれるカプセル化を行います。 この場合 IPv6 の Next Header フィールドには IPv4 パケットを表す 4 が入りますから、filter6 コマンドで protocol 4 にマッチするパケットを通してください。

filter6 add DSLite interface lan1 direction in/out action pass protocol 4 state disable logging off

DS-Lite の設定

さて、準備が整ったところで DS-Lite の設定をします。 と言っても一行だけです。

interface <tunnel> tunnel dslite <aftr>

SEIL の DS-Lite 機能は tunnel インタフェースを使って動作しますので、 "<tunnel>" には tunnel インタフェースのいずれかを指定してください。 そして "<aftr>" には DS-Lite のサーバ(AFTR)を指定します。 IIJmio FA/NF サービスの場合は、IIJmio FA/NF サービスのサービス詳細情報に 記載されている "gw.transix.jp" を設定してください。 設定例は以下のようになります:

interface tunnel0 tunnel dslite gw.transix.jp

"interface <tunnel> tunnel dslite" コマンドの詳細については コマンドリファレンス をご覧ください。

設定が完了したら、show status interface コマンドで DS-Lite トンネルの状況を確認できます。 DS-Lite トンネルが確立されていれば、Tunnel address に始点と終点の IPv6 アドレスが表示されているはずです。

# sh status int tunnel0
interface tunnel0:
Description=""
Status=administratively up
MTU=1280
LastChange=2014/09/25 16:00:39
Ipkts=11808, Ierrs=0, Opkts=9429, Oerrs=6, Colls=0
InOctets=12293401, OutOctets=1768354, InDrops=0, OutDiscards=0
InUnknownProtos=0
Tunnel address=2409:10:540:300:2e0:4dff:fe10:5 --> 2404:8e00::feed:101
IPv6 address=fe80::2e0:4dff:fe10:4%tunnel0 --> :: prefixlen=64

以下、IPv4 ルータとしての動かすための設定を入れてゆきます。

tunnel インタフェースの MTU は LAN 側に揃えて 1500 にしておくのがお勧めです。

tunnelインタフェースのIPアドレスは、ここでは固有のアドレスを設定する代わりにunnumberedを設定します。

interface tunnel0 mtu 1500
interface tunnel0 unnumbered

上流側の光ネクスト回線では、DS-Lite サーバ(AFTR) までの IPv6 Path MTU は物理インタフェース(LAN1)の MTU と同じ 1500 になります。したがって経路MTU探索の抑止機能はoff にしておいた方が良いパフォーマンスが出ます。

option ipv6 avoid-path-mtu-discovery off

IIJmio FA/NF サービスではサーバ(AFTR)側で TCP MSS の調整が行われるため、SEIL 側で tcp-mss を設定する必要はありません。

IPv4 ルーティングはデフォルトを pppoe0 から tunnel0 インタフェースに向け変えます。

route delete default
route add default tunnel0

DNS プロキシの転送先も同様にデフォルトの ipcp から dhcp6 に変更します。

dhcp enable

IPv4 のパケットフィルタリングは tunnel インタフェースに設定してください。 以下の例は、外向きの通信とその応答だけ通し、内向きの通信はすべて落とします。

filter add OUTGOING interface tunnel0 direction out action pass state enable logging off
filter add INCOMING interface tunnel0 direction in action block logging on 

DS-Lite プロトコルではサーバ(AFTR)で NAT が行われるため多くの攻撃はそこで防がれますが、 IPv6 でカプセル化している区間で詐称パケットを放り込まれるとそれを排除できないため、 SEIL でもフィルタリングをしておくことをお勧めします。

同様の理由のため、IPv6 も全てブロックしておきます。

filter6 add BLOCK_DSLITE_V6 interface tunnel0 direction in/out action block logging on
あとは DHCP サーバを動かして完了です。
dhcp enable

その他、LAN 側の以下の設定はデフォルト設定のままで良いでしょう。

interface lan0 add 192.168.0.1/24
dhcp mode server
dhcp interface lan0 enable
dhcp interface lan0 expire 24
dhcp interface lan0 pool 192.168.0.2 253
dhcp interface lan0 dns add 192.168.0.1

動作確認

設定が完了したら PC から IPv4 インターネットにアクセスしてみてください。 以下は www.iij.ad.jp に ping を打った時のパケットキャプチャです。 IPv4 ICMP Echo パケットが IPv6 にくるまれて運ばれている様子が見てとれます。

# tcpdump interface lan1 verbose-level 3 expression 'ip6'
################################################################
tcpdump: when you want to exit this program, please type Ctrl-C.
################################################################
13:23:53.512223 2409:10:540:300:2e0:4dff:fe10:5 > 2404:8e00::feed:100: IP (tos 0x0, ttl 63, id 21048, offset 0, flags [none], length: 84) 192.168.0.2 > 202.232.2.164: icmp 64: echo request seq 0 (len 84, hlim 64)
13:23:53.515610 2404:8e00::feed:100 > 2409:10:540:300:2e0:4dff:fe10:5: IP (tos 0x0, ttl 59, id 31734, offset 0, flags [none], length: 84) 202.232.2.164 > 192.168.0.2: icmp 64: echo reply seq 0 (len 84, hlim 59)
^C

まとめ

SEIL で DS-Lite による IPv6 over IPv4 接続を利用するための設定をまとめると 以下のようになります。

option ipv6 avoid-path-mtu-discovery off
interface lan0 add 192.168.0.1/24
interface lan1 add router-advertisement
interface tunnel0 tunnel dslite gw.transix.jp
interface tunnel0 unnumbered
interface tunnel0 mtu 1500
route add default tunnel0
route6 add default router-advertisement interface lan1
filter add OUTGOING interface tunnel0 direction out action pass state enable logging off
filter add INCOMING interface tunnel0 direction in action block logging on
filter6 add DSLite interface lan1 direction in/out action pass protocol 4 state disable logging off
dhcp enable
dhcp mode server
dhcp interface lan0 enable
dhcp interface lan0 expire 24
dhcp interface lan0 pool 192.168.0.2 253
dhcp interface lan0 dns add 192.168.0.1
dhcp6 client enable
dhcp6 client interface lan1
dns forwarder enable
dns forwarder add dhcp6
resolver enable
resolver address add dhcp6

利用者がまださほど多くないためか、 現在の NTT 光ネクスト IPv6 IPoE 接続は低遅延/高帯域でかつ安定している高品質の回線となっています。 IPv4 PPPoE 接続で安定したスループットが出ない地域では、 DS-Lite プロトコルを利用し IPv6 IPoE 網を介して IPv4 インターネットに接続した方が快適にアクセスできるケースがあります。 ぜひ一度お試しください。