とおあすの技術雑記帳

トラブったところとか色々まとめ

eo光のIPv6接続をCiscoルータでやってみる(シングルセッションPPPoE)

はじめに

1~2年ほど個人的にIPv6にハマった時期がありました。IPv6を学び始めた時のIPv4と異なった仕様は難解ではありましたがとても新鮮で面白く、自分の家でもIPv6のグローバルプレフィックスが欲しいと思ったわけです。
私の家にはeo光の回線が引かれています。eo光IPv6には対応しています。しかし、ネットで出てくる大半の接続設定は困ったことにNTT回線向けのものしか大体出てこない。出てきてもCiscoルータでのやり方は書いていない。なので書いておこうかと思ったわけです。

IPv6接続形態:NTTとeo光の違い

まずNTTとeo光IPv6方式の違いについて解説しておこうかと思います。
簡単に言えば
・接続形態の違い(IPv6でPPPoEを使う・使わない)
・PPPoEを使う場合の方式の違い(IPv6のためのセッションを別で張るか、IPv4IPv6を1つのセッションで通信できるようにするか)
この2点に尽きます。
WAN回線においてIPv6通信を行う方法の一つとして、IPoE接続方式があります。IPoE接続方式では、PPPoEの設定が不要で単にDHCPv6-PDクライアントをWANインターフェースで動かすだけでプレフィックスが振られ通信できるようになります。LANとほとんど変わらないような方式です。
しかしIPoE接続方式は主にNTT回線を利用するISPだけが対応していることがほとんどで、eo光では対応していません(回線認証を行う仕組みがないのでしょうか)。そのためeo光ではIPv6で通信する場合でも昔ながらのPPPoEを利用する必要があるのです。
またPPPoEでIPv6通信を行う際、IPv6通信のためのPPPoEセッションを別で張るマルチセッション方式と、IPv4IPv6を1つのPPPoEセッションで通信できるようにするシングルセッション方式があります*。
OCNなど一部の対応するISPでは前者の方式を、eo光では後者の方式を採用しており、eo光公式サイトではこの方式を「PPPoEによるデュアルスタック方式」と呼んでいます。
残念ながら今回用いるこのシングルセッション方式に市販のルータはほとんど対応していないため、専用のルータを使えというのが公式の言い分です。
しかし、CiscoのルータやNEC UNIVERGE、Yamaha RTXといった逸般的なルータならこの方式でも対応していますので、専用のルータなんか使わなくてもできちゃうわけです。

*PPPのプロトコルに注目して話をすれば、マルチセッション方式ではNCPのIPCPとIPv6CPはそれぞれ個別のPPPoEセッションにおいて動かされますが、シングルセッション方式ではこの2つを同じセッションで動かすということになります。

シナリオ

自宅からPPPoE経由のIPv6インターネット接続を提供するISP回線を利用し、IPv6通信を行えるように設定する。 ISPはシングルセッションのPPPoE接続においてIPv4IPv6の接続性を提供する。PPPoE接続完了後、DHCPv6-PDクライアントを動作させ、グローバルIPv6プレフィックスを要求する。
プレフィックス取得後、Vlan10インターフェースにグローバルIPv6アドレスを設定し、Vlan10内のノードに対しグローバルIPv6プレフィックスをRAにより広告する。VLAN10内のノードはRAを受け取ることにより、SLAACによりグローバルIPv6アドレス、デフォルトゲートウェイを設定する。
IPv6 DNSサーバの設定はRDNSSにより行うものとする。

設定パラメータ

項目
WAN側インターフェース GigabitEthernet8
PPPoEユーザ名 pppoe-user
PPPoEパスワード pppoe-pass
PPPoE認証方式 CHAP
DHCPv6-PD取得プレフィックス wan-prefix
Vlan10 グローバルIPv6アドレス (wan-prefix)::1/64
Vlan10 RA lifetime 3600秒(1時間)
Vlan10 RAインターバル 180秒
(RDNSS)IPv6 DNSサーバ 2606:4700:4700::1111(Cloudflare)

wan-prefixにDHCPv6-PDで取得したプレフィックスが結びつきます。eo光では/64のプレフィックスが降ってきます。
例:取得したプレフィックスが2001:db8:1111:2222::/64なら、Vlan10のグローバルIPv6アドレスは2001:db8:1111:2222::1/64となります。

Config例

注意:
ファイアウォール設定は省いています。ACLやCBAC、ZBFWを利用して別途ファイアウォール設定を行ってください。eo光ではプロバイダ側でのIPv6フィルタは一切行われていません。
・RDNSSはソフトウェアバージョンが古いと対応していません(15.4(1)T, 15.3(2)Sで対応とのこと)。
・当たり前かもしれませんが、HGW(eo光では多機能ルータ)のルータ機能は使わないでください。

ip cef
ipv6 unicast-routing
ipv6 cef
!
interface GigabitEthernet8
 no ip address
 duplex auto
 speed auto
 no cdp enable
 ipv6 enable
 pppoe enable group global
 pppoe-client dial-pool-number 1
 no lldp transmit
 no lldp receive
!
interface Dialer1
 mtu 1454
 ip address negotiated
 no ip unreachables
 ip nat outside
 ip virtual-reassembly in
 encapsulation ppp
 dialer pool 1
 dialer-group 1
 no cdp enable
 ipv6 enable
 ipv6 mtu 1454
 no ipv6 unreachables
 ipv6 dhcp client pd wan-prefix rapid-commit
 ppp authentication chap callin
 ppp chap hostname pppoe-user
 ppp chap password 0 pppoe-pass
 ppp ipcp dns request accept
 ppp ipcp route default
!
interface Vlan10
 ip address 192.168.10.1 255.255.255.0
 ip nat inside
 ipv6 address wan-prefix ::1/64
 ipv6 enable
 ipv6 nd ra lifetime 3600
 ipv6 nd ra interval 180
 ipv6 nd ra dns server 2606:4700:4700::1111
 ipv6 tcp adjust-mss 1394
!
access-list 1 permit 192.168.10.0 0.0.0.255 !NAT対象の通信のACL
ip nat inside source list 1 interface Dialer1 overload
dialer-list 1 protocol ip permit
dialer-list 1 protocol ipv6 permit
(ip route 0.0.0.0 0.0.0.0 Dialer1) ! ppp ipcp route defaultを利用しているので要らないはず
ipv6 route ::/0 Dialer1

設定が完了したら保存して一旦reloadすることをお勧めします。

解説と補足

PPPのNCPにはIPCPとIPv6CPがありますが、IPCPにはIPアドレスを割り振る機能やDNSサーバのIPアドレスを通知する機能があるのに対し、IPv6CPにはその機能がありませんのでDHCPv6-PDクライアントを用います。
接続状況は、DialerインターフェースやVirtual-Accessインターフェースの状態、show ppp all、show pppoe session、ログ、891FJを利用していればPPPランプで確認して下さい。
ちなみに現在はIX2215を使ってますが891FJより相性が良いような感じがします。891FJでは若干PPPoE接続に時間がかかったり、原因はよくわかりませんが接続してから数分後に一旦PPPoEが切れることがありました。(ちなみにプロバイダ側のBASはJuniperです)
(4/30追記)UNIVERGEはPPPoEのセッションが不完全な状態で切れていることを検出すると、PADTを送ってその不完全な状態のセッションを落とすという機能があるようです。相性がよいと感じたのはそのためでした。とてもいい機能だと思います。