前提
フレッツ光ネクスト ファミリータイプ とオプションのひかり電話を契約している.ひかり電話契約によってアドレス取得方法が SLAAC ではなく DHCPv6-PD になっている.送られてきたひかり電話ルータ (HGW) を利用せずに, ONU から直接収容している.そのため DHCPv6-PD で委譲されるプレフィクスの長さは /56 となっている.
WAN 側は ONU に直接接続し, LAN 側はスイッチに接続する. SLAAC によるアドレス取得を行うときは RA / RS を疎通させるために WAN - LAN 間をブリッジする必要があったが,今回は必要ない (L3 のルーティングで解決できる) .すなわちファイアウォールが設定可能である.
今回は LAN を 1 つ作成し, /64 のプレフィクスを RA によって広告して SLAAC によるアドレス自動構成を行わせる. LAN 内での DHCPv6 利用はしない.
インターフェースの割り当て
今回は以下のようにインターフェースを割り当てる:
- GigabitEthernet0/0: LAN 側 (Vlan1 スイッチの 1 ポートとして機能)
- GigabitEthernet0/4: WAN 側 (IPv6 のみ)
- Vlan1: LAN 側 (スイッチとして機能, デュアルスタック)
- Tunnel0: DS-Lite 用トンネル (IPv4 のみ)
GigabitEthernet0/0 ~ 0/3 は Vlan1 の配下にあるスイッチとして機能する (switchport) .
設定
時刻の設定 (オプション)
特に必要ではないが,各種時刻のタイムゾーンが JST にそろっていたほうがうれしいので設定しておく.
clock timezone JST 9 0
ntp server asia.pool.ntp.org
SSH 関連の設定 (オプション)
私は継続的なメンテナンスに SSH を用いることにしたため,よりセキュアに使える設定を探した.
# 4096 ビットの RSA 鍵を使う
crypto key generate rsa label SSH-KEY modulus 4096
ip ssh rsa keypair-name SSH-KEY
# SSH v2 を使う
ip ssh version 2
# DH 鍵交換時の最小鍵長を 4096 ビットにする
ip ssh dh min size 4096
# SSH に関するログを有効化する
ip ssh logging events
# Telnet を無効化する
line vty 0 4
transport input ssh
exit
これらの設定については以下の記事を参考にしている:
また, Cisco 841M の IOS は鍵交換アルゴリズムとして diffie-hellman-group-exchange-sha1
と diffie-hellman-group14-sha1
の二つにしか対応しておらず,またホスト鍵のアルゴリズムについて ssh-rsa
のみをオファーするため,クライアントの SSH クライアントによっては接続時にエラーとなる.そのときは以下の設定を ~/.ssh/config
に追加すればよい.
Host <LAN_IP_ADDR>
KexAlgorithms +diffie-hellman-group14-sha1
HostKeyAlgorithms ssh-dss,ssh-rsa
ここで <LAN_IP_ADDR>
はルータの LAN 側 IP アドレスで置き換えられる.
DHCPv6-PD の受信
Gig0/4 で DHCPv6 クライアントを有効にし, PD を受ける:
interface GigabitEthernet0/4
ipv6 enable
ipv6 dhcp client pd PD_PREFIX
ipv6 address PD_PREFIX ::DEAD:BEEF/64
exit
ここで ::DEAD:BEEF
は範囲内であれば任意のアドレスを利用できる.これは IPv6 パケットを送出するときに必要となる.
LAN 側にプレフィクスを広告
次は /64 プレフィクスを切り出して LAN 側に広告する:
interface Vlan1
ipv6 enable
ipv6 address PD_PREFIX ::1/64
ipv6 nd other-config-flag
exit
ここで ::1
の代わりに任意のアドレスを指定できる.先ほど設定した Gig0/0 のものとは別のアドレスにすること.
ND の転送を無効化
DHCPv6-PD を使った構成では ND (Neighbor Discovery) を転送する必要がないため,無効化する:
no ip forward-protocol nd
IPv6 のルーティングを有効化
上位ルータのアドレスを確認する:
$ show ipv6 dhcp interface Gig0/4
GigabitEthernet0/4 is in client mode
Prefix State is OPEN
Renew will be sent in 01:42:48
Address State is IDLE
List of known servers:
+ Reachable via address: FE80::10FF:FE02:2062
DUID: [REDACTED]
Preference: 0
Configuration parameters:
IA PD: IA ID 0x00070001, T1 7200, T2 10800
Prefix: 2409:[REDACTED]::/56
preferred lifetime 12600, valid lifetime 14400
expires at Dec 06 2022 04:38 AM (13368 seconds)
DNS server: 2404:1A8:7F01:A::3
DNS server: 2404:1A8:7F01:B::3
Domain name: flets-east.jp
Domain name: iptvf.jp
Information refresh time: 0
Prefix name: PD_PREFIX
Prefix Rapid-Commit: disabled
Address Rapid-Commit: disabled
ハイライトさせた部分がルータのアドレスである.これを使って以下のようにルーティングを設定する:
ipv6 unicast-routing
ipv6 cef
ipv6 route ::/0 GigabitEthernet0/4 FE80::10FF:FE02:2062
このアドレスは環境によって変わる可能性が高いので,自身の環境のものを使うこと.
動作確認
$ ping 2606:4700:4700::1111
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2606:4700:4700::1111, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 4/6/12 ms
DS-Lite の設定 (オプション)
IPv4 通信を利用するために,今回は Transix 網の DS-Lite を設定してみる:
interface Tunnel0
ip address 192.0.0.2 255.255.255.252
tunnel source Vlan1
tunnel mode ipv6
tunnel destination <AFTR_ADDRESS>
exit
<AFTR_ADDRESS>
については,以下から環境に合うものを選んで使う:
NTT 東日本 | NTT 西日本 |
---|---|
2404:8e00::feed:100 |
2404:8e01::feed:100 |
2404:8e00::feed:101 |
2404:8e01::feed:101 |
トンネルが UP になっていることを確認する:
$ show interface Tunnel0
Tunnel0 is up, line protocol is up
Hardware is Tunnel
Internet address is 192.0.0.2/30
MTU 1460 bytes, BW 100 Kbit/sec, DLY 50000 usec,
reliability 255/255, txload 73/255, rxload 81/255
Encapsulation TUNNEL, loopback not set
Keepalive not set
Tunnel linestate evaluation up
Tunnel source 2409:[REDACTED]::1 (Vlan1), destination 2404:8E00::FEED:101
Tunnel Subblocks:
src-track:
Tunnel0 source tracking subblock associated with Vlan1
Set of tunnels with source Vlan1, 1 member (includes iterators), on interface <OK>
Tunnel protocol/transport IPv6
Tunnel TTL 255
Tunnel transport MTU 1460 bytes
Tunnel transmit bandwidth 8000 (kbps)
Tunnel receive bandwidth 8000 (kbps)
(以下略)
あとは IPv4 のデフォルトルートを Tunnel0 に向ければ完了:
ip route 0.0.0.0 0.0.0.0 Tunnel0
動作確認
$ ping 1.1.1.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 1.1.1.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 4/4/8 ms
ファイアウォール (オプション)
このまま運用するのは危険なので,一般的なファイアウォールを設定しておく:
# 戻りパケットを良い感じにする CBAC (Context-Based Access Control)
ip inspect name firewall tcp
ip inspect name firewall udp
ip inspect name firewall ftp
ip inspect name firewall icmp
# こちらは IPv6 版
ipv6 inspect name firewallv6 tcp
ipv6 inspect name firewallv6 udp
ipv6 inspect name firewallv6 icmp
ipv6 inspect name firewallv6 ftp
# ip inspect によって許可されたパケットを除いて外からの入力パケットは全部弾く
access-list 100 remark WANv4_IN
access-list 100 deny ip any any
# IPv6 は ND プロトコルの通信と DS-Lite の ATFR は許可しておく
ipv6 access-list WANv6_IN
permit icmp any any nd-na
permit icmp any any nd-ns
permit ipv6 host 2404:8E00::FEED:100 any
permit ipv6 host 2404:8E00::FEED:101 any
deny ipv6 any any
exit
# IPv4 の ACL を Tunnel0 に設定
interface Tunnel0
ip inspect firewall out
ip access-group 100 in
exit
# IPv6 の ACL を Gig0/4 に設定
interface GigabitEthernet0/4
ipv6 inspect firewallv6 out
ip access-group WANv6_IN in
exit
以上で,ひかり電話ルータを捨ててもインターネットに接続できるようになった.
参考文献
文中で提示したものは除いています.