自前ルータで直収しながら HGW でひかり電話を収容するために

# はじめに (2024/06/24 更新)

最近の HGW だと正しく動作しない模様です．また，この方法では HGW の FW 自動更新ができなかったりと不都合があります．

別途 DHCPv6 サーバを立ててやると最新 FW でも動作するようなので，リンクを貼っておきます．(記事の引用ありがとうございました！)

https://qiita.com/takonasu/items/7a6cc05e4037dfb4d1a1

以下古い情報となりますが，参考までにご覧ください．

# 動機と目的
- IPv6 も自前のルータで収容したい ( HGW 配下だと HGW の性能に引っぱられる)
- なるべく機器を増やさないために，ひかり電話は HGWで収容したい．( NVR 510 を買って小型 ONU を使えば一番よいのですが‥‥)
- 既存の手法では，NVR500 が必要だったり，HGW の起動に時間がかかっていたりしていたから，これらを何とかしたい．

# 概要
GE0 で ONU と直結させました．
GE2 はポート VLAN を設定し，VLAN10, 20, 30 を用意しました．
VLAN 10 はひかり電話ルータの WAN を繋げるためで，IPv4だけ GE0 とブリッジさせ，IPv6 は上流の DNS サーバ・SNTP サーバ情報を含めて /60 を DHCPv6-PD で配布しました．
VLAN 20 はひかり電話ルータの LAN にアクセスするためで，IPv4 のみの構成です．アドレスは 192.168.20.0/24
VLAN 30 は PC や無線 LAN AP など，それ以外を収容する VLAN で， IPv4 アドレスは 192.168.30.0/24，IPv6 は /64 を RA で広告しました．

ひかり電話を契約している場合，DHCPv4 で /30 の IPv4 アドレスが付与され，そのアドレスを用いて通話を行います．ひかり電話自体は IPv4 のみで使用可能ですが，ひかり電話ルータの FW 更新などで IPv6 通信が必要なこと・起動時に DHCPv6-PD のレスポンスを待ち続けて電話が使えるようになるまで数分かかる，などいくつかの問題があるので，DHCPv6-PD にてプレフィクス移譲を行っています．移譲するプレフィクスはもっと大きくても問題ないと思われます．

また，ひかり電話ルータが DHCPv6-PD を受ける際に DNS サーバと SNTP サーバのアドレスを要求してくるので，これも渡せるように準備します． IX2215 ではこの二つを通知するオプションがあるので簡単に実装可能です．

# ネットワーク図
下のようになりました．GE2:1 と HGW のひかり電話ルータ部の WAN を接続しています．
![自宅ネットワーク図.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350994/0ae88777-23fd-6d2d-0eaa-1b56a86cea23.png)

# コンフィグ
パスワードなど一部隠しているものもありますが，ほぼ完全なコンフィグです．
```conf
! NEC Portable Internetwork Core Operating System Software
! IX Series IX2215 (magellan-sec) Software, Version 10.7.18, RELEASE SOFTWARE
! Compiled Oct 25-Tue-2022 12:37:13 JST #2
! Current time Mar 28-Tue-2023 23:26:46 JST
!
hostname ix2215
timezone +09 00
!
logging buffered 131072
logging subsystem all warn
logging timestamp datetime
!
no syslog ip enable
!
username admin password hash xxxxxxxxxxxxxxxxxxxxxx administrator
!
!
ip ufs-cache max-entries 20000
ip ufs-cache enable
ip route default Tunnel0.0
ip dhcp enable
ip access-list ipv4_udp_range permit udp src any sport range 1024 65535 dest any dport range 1024 65535
ip access-list web-http-acl permit ip src any dest 192.168.30.1/32
!
!
ipv6 ufs-cache max-entries 10000
ipv6 ufs-cache enable
ipv6 dhcp enable
ipv6 access-list deny-any deny ip src any dest any
ipv6 access-list ipv6_udp_range permit udp src any sport range 1024 65535 dest any dport range 1024 65535
ipv6 access-list permit-any permit ip src any dest any
ipv6 access-list permit-dhcpv6 permit udp src any sport any dest any dport eq 546
ipv6 access-list permit-dhcpv6 permit udp src any sport any dest any dport eq 547
ipv6 access-list permit-icmpv6 permit icmp src any dest any
ipv6 access-list permit-ipinip permit 4 src any dest any
ipv6 access-list dynamic cache 65535
ipv6 access-list dynamic dyn-filter access permit-any
!
!
!
!
bridge irb enable
no bridge 1 bridge ipv6
!
!
!
!
!
dns cache enable
dns cache max-records 256
!
proxy-dns ip enable
proxy-dns ip request both
proxy-dns interface GigaEthernet0.0 priority 200
proxy-dns ipv6 enable
proxy-dns ipv6 request both
!
telnet-server ip enable
!
ssh-server ip enable
!
http-server authentication-method digest
http-server username admin secret-password xxxxxxxxxxxxx
http-server ip access-list web-http-acl
http-server ip enable
!
nm ip enable
nm account mygroup password secret xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
!
!
!
ip dhcp profile dhcpv4-sv
  dns-server 192.168.30.1
!
ip dhcp profile web-dhcp-gigaethernet2:3.0
  dns-server 192.168.30.1
!
ipv6 dhcp client-profile dhcpv6-cl
  option-request dns-servers
  option-request ntp-servers
  ia-pd redistribute pool hgw 0:0:0:40::/60 nla-length 2
  ia-pd subscriber GigaEthernet2:3.0 ::/64 eui-64
  shutdown-delay 100
!
ipv6 dhcp server-profile dhcpv6-sv
  dns-server dhcp
  ntp-server dhcp
!
ipv6 dhcp server-profile dhcpv6-sv-hgw
  dns-server dhcp
  ntp-server dhcp
  ia-pd redistribute-prefix pool hgw
  shutdown-delay 100
!
device GigaEthernet0
!
device GigaEthernet1
!
device GigaEthernet2
  vlan-group 1 port 1
  vlan-group 2 port 2
  vlan-group 3 port 3 4 5 6 7 8
!
device BRI0
  isdn switch-type hsd128k
!
device USB0
  shutdown
!
interface GigaEthernet0.0
  no ip address
  ipv6 enable
  ipv6 dhcp client dhcpv6-cl
  ipv6 filter permit-ipinip 10 in
  ipv6 filter permit-icmpv6 20 in
  ipv6 filter permit-dhcpv6 30 in
  ipv6 filter deny-any 99 in
  ipv6 filter permit-ipinip 10 out
  ipv6 filter permit-icmpv6 20 out
  ipv6 filter permit-dhcpv6 30 out
  ipv6 filter dyn-filter 99 out
  ipv6 ufs-cache timeout others 300
  ipv6 ufs-cache timeout tcp 60
  ipv6 ufs-cache timeout udp 60
  bridge-group 1
  no shutdown
!
interface GigaEthernet1.0
  no ip address
  shutdown
!
interface GigaEthernet2.0
  no ip address
  shutdown
!
interface BRI0.0
  encapsulation ppp
  no auto-connect
  no ip address
  shutdown
!
interface USB-Serial0.0
  encapsulation ppp
  no auto-connect
  no ip address
  shutdown
!
interface GigaEthernet2:1.0
  no ip address
  ipv6 enable
  ipv6 dhcp server dhcpv6-sv-hgw
  bridge-group 1
  no shutdown
!
interface GigaEthernet2:2.0
  ip address 192.168.20.254/24
  no shutdown
!
interface GigaEthernet2:3.0
  ip address 192.168.30.254/24
  ip dhcp binding dhcpv4-sv
  ipv6 enable
  ipv6 dhcp server dhcpv6-sv
  ipv6 nd ra enable
  ipv6 nd ra other-config-flag
  no shutdown
!
interface Loopback0.0
  no ip address
!
interface Null0.0
  no ip address
!
interface Tunnel0.0
  tunnel mode map-e ocn
  ip address map-e
  ip tcp adjust-mss auto
  ip napt enable
  ip napt eim-mode udp-only
  ip napt translation tcp-timeout 3600
  ip ufs-cache timeout tcp 60
  ip ufs-cache timeout udp 60
  no shutdown
!
!
web-console system information
  o password-changed admin
```

コンフィグは以上になります．ここからは説明が必要だと思われる箇所について解説していきます．

## IPv4 だけブリッジする
```
bridge irb enable
no bridge 1 bridge ipv6
```
なんとこれで IPv4 だけブリッジする設定になります．1 はブリッジグループ名です．


## DHCPv6 サーバ・クライアントの定義
```
ipv6 dhcp client-profile dhcpv6-cl
  option-request dns-servers
  option-request ntp-servers
  ia-pd redistribute pool hgw 0:0:0:40::/60 nla-length 2
  ia-pd subscriber GigaEthernet2:3.0 ::/64 eui-64
  shutdown-delay 100
!
ipv6 dhcp server-profile dhcpv6-sv
  dns-server dhcp
  ntp-server dhcp
!
ipv6 dhcp server-profile dhcpv6-sv-hgw
  dns-server dhcp
  ntp-server dhcp
  ia-pd redistribute-prefix pool hgw
  shutdown-delay 100
```

ここでは DHCPv6 サーバ・クライアントの設定をしています．
`option-request` ではオプションの内容を上位 DHCPv6 サーバへ要求しています．
`dns-server dhcp` などでは上位 DHCPv6 サーバから得た情報をそのまま下位へ渡すことを示しています．

## ポート VLAN の定義
```
device GigaEthernet2
  vlan-group 1 port 1
  vlan-group 2 port 2
  vlan-group 3 port 3 4 5 6 7 8
```

ここではポート VLAN の定義をしています．最低でも HGW の WAN 側と LAN 側は別の VLAN に設定する必要があります．


## ひかり電話ルータにアクセスできない！

VLAN 30 からひかり電話ルータへアクセスするため，HGW の静的ルーティングテーブルに 192.168.30.0/24 → 192.168.20.254 の経路情報を追加しておく必要があります．

# 参考文献

https://diary.sorah.jp/2017/02/19/flets-ngn-hikaridenwa-kill-dhcpv6pd

IPv4 だけブリッジさせる方法はこちらを参考にしました．

https://notoken.hatenadiary.com/entry/2020/07/29/004329

今回の発想はこちらの記事の発展です．