やりたいこと
IPoEで払い出されたIPv6 Prefixを、Fortigateを使って下位ネットワークに委譲してみる。
更新版(7.2)の記事はこちら→ https://qiita.com/gaichi/items/7843c7879b0eb195c9a1
環境・材料
- NTT西日本フレッツ光ネクスト(ひかり電話付き)
- ISP契約(ぷらら+IPoEオプション)
- Fortigate60D(ver6.0)
- うまく動かなくてもくじけない心
説明
ひかり電話ありのフレッツ契約の場合、HGWの下部にDHCPv6-PDクライアントに対応するルータを突っ込むとサブネットの分割ができます(IPv6ではサブネットといわないかもしれないけれども)。ルータには、/60が割り振られるようです。この機能を活用して、Fortigateにプレフィックスを委譲し、FortigateのLAN側を/64で分割するよう試してみます。
なお、IPv4の設定とかDS-liteだとかMAP-Eとか、とにかくIPv4関係は今回は全く触れません。
注意事項
FortigateのIPv6の設定や動作はなんとなくすっきりしなかったり不安定だったりすることがあります。設定しただけだとうまく動かないこともありましたが、再起動すると動作するようになることがあります。
設計
- 物理構成
HGW--(WAN2)Fortigate(Intenal)--下部LAN
設定
- WAN2インタフェースの設定
WAN2にはHGWを接続します。HGWからDHCPv6-PDによってIPv6アドレスの割り当てと移譲の権限を取得する設定です。
config system interface
edit "wan2"
set allowaccess ping
config ipv6
set ip6-allowaccess ping
set dhcp6-prefix-delegation enable
set autoconf enable
end
end
https://docs.fortinet.com/document/fortigate/6.0.0/handbook/800956/dhcpv6 の「DHCPv6-PD configuration」には「set autoconf enable」の記載がない。すでにIPv6アドレスを上位(今回はHGW)から払い出されている前提で書かれているのだろうけど、不親切だと思いました。
なお、Pingに応答するようにしておきます。切り分けが楽になります。
- Internalインタフェースの設定
config system interface
edit "internal"
config ipv6
set ip6-mode delegated
set ip6-allowaccess ping
set ip6-send-adv enable …①
set ip6-upstream-interface "wan2" …②
set ip6-subnet ::1:0:0:0:1/64 …③
config ip6-delegated-prefix-list
edit 1
set upstream-interface "wan2" …②
set autonomous-flag enable
set onlink-flag enable
set subnet 0:0:0:1::/64 …④
next
end
end
① インタフェースからRA(Router Advertisement)を送出する設定です。
② 上位のネットワークが存在するインタフェースの指定です。今回はWAN2が上位(HGW経由フレッツ経由ISP)なので、WAN2を設定します。
③ 下部のネットワーク側に設定するIPv6アドレスです。例えばHGWが2400:XXXX:YYYY:19D0::/60をFortigateに割り当てた場合、このインタフェースのプレフィックスはこの設定値である::1:0:0:0:1との論理和、つまり2400:XXXX:YYYY:19D1::1/64がInternalのIPv6アドレスになります。
④ サブネットのプレフィックスを設定します。③に合わせて、0:0:0:1::/64としておきます。(論理和の考え方も③と同じ)
- DHCPv6サーバの設定
RAに加えて、DHCPv6サーバの設定をします。DNSサーバのアドレスはこの設定が通知されます。(この設定はたぶんステートレス)
config system dhcp6 server
edit 1
set dns-service delegated
set subnet 0:0:0:1::/64
set interface "Inaternal"
set upstream-interface "wan2"
set ip-mode delegated
next
end
確認方法
- IPv6アドレスの確認
FGT60D4614****** # diag ipv6 address list
dev=18 devname=Internal flag= scope=0 prefix=64 addr=2400:XXXX:YYYY:19d1::1 preferred=12826 valid=12826 cstamp=0 tstamp=0
dev=6 devname=wan2 flag=P scope=253 prefix=10 addr=fe80::QQQQ:ZZZZ:XXXX:e857
dev=18 devname=Internal flag=P scope=253 prefix=10 addr=fe80::WWWW:VVVV:ZZZZ:e854
dev=6 devname=wan2 flag= scope=0 prefix=64 addr=2400:XXXX:YYYY:1900:aaa:bbb:ccc:e857 preferred=12031 valid=13831 cstamp=0 tstamp=0
(一部省略)
表示されたIPv6アドレスに、HGWの管理画面からPingで試験すると吉。
- ネイバーキャッシュの確認方法
# diag ipv6 neighbor-cache list
- ルーティングテーブルの確認方法
# diag ipv6 route list
- HGWの「DHCPv6サーバ払い出し状況」
おまけ
LAN側に他のインタフェースがあれば,さらにPrefixの委譲ができます。
別のインタフェースで,③と④を次のように変更します。
理屈的には0:0:0:1::~0:0:0:F::まで使えるはずなので,15個委譲できるはずです(多分)。
…
set ip6-subnet ::2:0:0:0:1/64 …③
…
set subnet 0:0:0:2::/64 …④
…
備考
- HGWの「DHCPv6サーバ払い出し状況」で見えるIPv6アドレスと「diag ipv6 address list」コマンドで出力されるアドレスが微妙に異なる。Forti自身は「diag ipv6 address list」で表示されるアドレスを認識しているので、Pingなどで試験するときはこのアドレスに当てるとよい。
- HGWがDHCPv6-PDで払い出したプレフィックスあてのルーティングは、HGW内にルーティングテーブルとして持つようだ(でも確認する方法がない…)。
- DHCPv6-PDクライアントになる他のルータがHGW下部にいる場合、HGWから割り当てられるPrexfixが変わってしまうことがあります(というより、固定できないと思っておいたほうが良い)。その場合に、ホストがIPv6アドレスを複数(古いPrefixと新しいprefix)の二つを持ってしまい、不安定になることがあります。
- HGWのIPv6セキュリティ設定で、ICMPv6を「双方向」(IPoE→LAN、LAN→IPoE)で許可しておくと切り分けに便利。ICMPv6だけなら、侵入されてもそんなに悪いことはできないでしょう、きっと。気になるようなら、動作確認後に切っておけばよいです。
独り言
- HGWのネイバーキャッシュを確認する方法がなくて不便。
- HGWのルーティングテーブルを確認する方法がなくて不便。
- HGW内の状態をもう少し見せてほしい…。
参考