EdgeRouterでインターリンクのIPv6接続サービス（PPPoE方式）を設定する

# はじめに
インターリンクの[フレッツ接続 ZOOT NEXT](https://www.interlink.or.jp/service/flets/b/)の無料オプションサービス[IPv6接続サービス（PPPoE方式）](https://faq.interlink.or.jp/faq2/View/wcDisplayContent.aspx?id=556)をEdgeRouter4に設定したときのメモです。
EdgeRoute Xでも同手順で設定可能です。

今更pppoeでのIPv6ですが、現状接続速度に不満もなくIPoEよりも若干安いので。。。

# 前提条件
* ファームウェア Ver 2系
* eth0 IPv4(PPPOE)でwanと接続
* eth1 IPv6(PPPOE)でwanと接続
* eth2 IPv4/IPv6でLANと接続
* eth3 未使用

ポートの使用状況が異なる場合や、スイッチやブリッジを作成している場合は以下ポートの読み替えやスイッチ・ブリッジの設定を変更してください。

# IPv6接続サービス（PPPoE方式）の申込
インターリンクのマイメニューからIPv6接続サービスの申込を行ってください。
IPv6用の接続IDが払い出されます。

# ONUとEdgeRoute間にスイッチを追加
通常はONUとEdgeRouteを直接LANケーブルで接続していると思います。
ONUとEdgeRouter間にスイッチを入れてONU、EdgeRouterのeth0、EdgeRouterのeth1を接続します。
ONUとEdgeRouterを1:1で接続しても良いのですが、IPv6設定中にIPv4に影響を及ぼすことやEdgeRouterのポートも開いていることからIPv4とIPv6でWAN側のポートを分けました。
スイッチのLEDでIPv4とIPv6の通信状況が視覚的に分かるってのも良いです。

# firewallの設定
IPv4では通常lan内はプライベートアドレスになるためwan⇒lanの通信については直接通信できず、必要な分だけport-forwardを設定していきますが、IPv6ではLAN内もグローバルアドレスになるのでfirewallが無いとIPv6では外部からアクセスし放題になります。
IPv6はデフォルトではfirewallで全通信を拒否し、必要な分だけ穴開けします。

* wan⇒router
お約束＆デフォルトは全てdrop＆dchpとicmpを許可
```
set firewall ipv6-name WANv6_LOCAL description 'WAN inbound traffic to the router'
set firewall ipv6-name WANv6_LOCAL enable-default-log
set firewall ipv6-name WANv6_LOCAL default-action drop
set firewall ipv6-name WANv6_LOCAL rule 10 action accept
set firewall ipv6-name WANv6_LOCAL rule 10 description 'Allow established/related sessions'
set firewall ipv6-name WANv6_LOCAL rule 10 state established enable
set firewall ipv6-name WANv6_LOCAL rule 10 state related enable
set firewall ipv6-name WANv6_LOCAL rule 20 action drop
set firewall ipv6-name WANv6_LOCAL rule 20 description 'Drop invalid state'
set firewall ipv6-name WANv6_LOCAL rule 20 state invalid enable
set firewall ipv6-name WANv6_LOCAL rule 30 action accept
set firewall ipv6-name WANv6_LOCAL rule 30 description 'Allow IPv6 icmp'
set firewall ipv6-name WANv6_LOCAL rule 30 protocol ipv6-icmp
set firewall ipv6-name WANv6_LOCAL rule 40 action accept
set firewall ipv6-name WANv6_LOCAL rule 40 description 'allow dhcpv6'
set firewall ipv6-name WANv6_LOCAL rule 40 destination port 546
set firewall ipv6-name WANv6_LOCAL rule 40 protocol udp
set firewall ipv6-name WANv6_LOCAL rule 40 source port 547
```
* wan⇒lan
お約束＆デフォルトは全てdrop＆icmpを許可
```
set firewall ipv6-name WANv6_IN default-action drop
set firewall ipv6-name WANv6_IN description 'WAN inbound traffic forwarded to LAN'
set firewall ipv6-name WANv6_IN enable-default-log
set firewall ipv6-name WANv6_IN rule 10 action accept
set firewall ipv6-name WANv6_IN rule 10 description 'Allow established/related sessions'
set firewall ipv6-name WANv6_IN rule 10 state established enable
set firewall ipv6-name WANv6_IN rule 10 state related enable
set firewall ipv6-name WANv6_IN rule 20 action drop
set firewall ipv6-name WANv6_IN rule 20 description 'Drop invalid state'
set firewall ipv6-name WANv6_IN rule 20 state invalid enable
set firewall ipv6-name WANv6_IN rule 30 action accept
set firewall ipv6-name WANv6_IN rule 30 description 'Allow IPv6 ICMP'
set firewall ipv6-name WANv6_IN rule 30 protocol icmpv6
```
* 必要なポートを穴開け
以下の例だとdns/http/httpsの例
IPアドレスは"xxxx:xxxx:xxxx:xxxx::/64"のような指定も可能
```
set firewall ipv6-name WANv6_IN rule 100 action accept
set firewall ipv6-name WANv6_IN rule 100 description dns
set firewall ipv6-name WANv6_IN rule 110 destination address 'xxxx:xxxx:xxxx::xxxx'
set firewall ipv6-name WANv6_IN rule 100 destination port 53
set firewall ipv6-name WANv6_IN rule 100 protocol tcp_udp
set firewall ipv6-name WANv6_IN rule 110 action accept
set firewall ipv6-name WANv6_IN rule 110 description http
set firewall ipv6-name WANv6_IN rule 110 destination address 'xxxx:xxxx:xxxx::xxxx'
set firewall ipv6-name WANv6_IN rule 110 destination port 80
set firewall ipv6-name WANv6_IN rule 110 protocol tcp
set firewall ipv6-name WANv6_IN rule 110 action accept
set firewall ipv6-name WANv6_IN rule 110 description https
set firewall ipv6-name WANv6_IN rule 110 destination address 'xxxx:xxxx:xxxx::xxxx'
set firewall ipv6-name WANv6_IN rule 110 destination port 443
set firewall ipv6-name WANv6_IN rule 110 protocol tcp
```
* MSSクランプの設定
ちょっと自信がないのですが、色々調査＆自分で試した結果インターリンクのIPv6(pppoe)使用時は1394で良いようです。
```
set firewall options mss-clamp6 interface-type pppoe
set firewall options mss-clamp6 mss 1394
```

# eth1(IPv6 PPPOE)の設定
まずはeth1の設定をリセット
```
interfaces ethernet eth1
```
pppoeのID/PASSは良い感じに書き換えてください。
set interfaces ethernet eth1 pppoe 1 dhcpv6-pd pd 1 interface eth2 service slaac
↑このeth2はLANに設定されるポートを指定してください。
この行でeth2にIPv6アドレスを設定しています。
```
set interfaces ethernet eth1 description 'Internet (PPPoE) IPv6'
set interfaces ethernet eth1 duplex auto
set interfaces ethernet eth1 pppoe 1 default-route auto
set interfaces ethernet eth1 pppoe 1 dhcpv6-pd pd 1 interface eth2 service slaac
set interfaces ethernet eth1 pppoe 1 dhcpv6-pd rapid-commit enable
set interfaces ethernet eth1 pppoe 1 firewall in ipv6-name WANv6_IN
set interfaces ethernet eth1 pppoe 1 firewall in name WAN_IN
set interfaces ethernet eth1 pppoe 1 firewall local ipv6-name WANv6_LOCAL
set interfaces ethernet eth1 pppoe 1 firewall local name WAN_LOCAL
set interfaces ethernet eth1 pppoe 1 ipv6 address autoconf
set interfaces ethernet eth1 pppoe 1 ipv6 dup-addr-detect-transmits 1
set interfaces ethernet eth1 pppoe 1 ipv6 enable
set interfaces ethernet eth1 pppoe 1 mtu 1454
set interfaces ethernet eth1 pppoe 1 name-server auto
set interfaces ethernet eth1 pppoe 1 password xxxxxxxxxx
set interfaces ethernet eth1 pppoe 1 user-id xxxxxxxxxx@xx.il24.net
set interfaces ethernet eth1 speed auto
```

# eth2(LAN)の設定
IPv6設定前は以下の設定だけしていました。
```
set interfaces ethernet eth2 address 192.168.1.1/24
set interfaces ethernet eth2 description Lan
set interfaces ethernet eth2 duplex auto
set interfaces ethernet eth2 speed auto
```
IPv6では以下の設定を追加しています
殆どRouter Advertisement(RA、ルーター広告)の設定になりますが、詳細は各自調べてください。
IPv6ではクライアントはdhcpを使用せず、RAを使用してIPv6アドレスを自動設定します。(dhcpも使用できます)
```
set interfaces ethernet eth2 ipv6 address autoconf
set interfaces ethernet eth2 ipv6 dup-addr-detect-transmits 1
set interfaces ethernet eth2 ipv6 router-advert cur-hop-limit 64
set interfaces ethernet eth2 ipv6 router-advert default-lifetime 1800
set interfaces ethernet eth2 ipv6 router-advert default-preference high
set interfaces ethernet eth2 ipv6 router-advert link-mtu 0
set interfaces ethernet eth2 ipv6 router-advert managed-flag false
set interfaces ethernet eth2 ipv6 router-advert max-interval 200
set interfaces ethernet eth2 ipv6 router-advert min-interval 10
set interfaces ethernet eth2 ipv6 router-advert other-config-flag false
set interfaces ethernet eth2 ipv6 router-advert prefix '::/56' autonomous-flag true
set interfaces ethernet eth2 ipv6 router-advert prefix '::/56' on-link-flag true
set interfaces ethernet eth2 ipv6 router-advert prefix '::/56' preferred-lifetime 604800
set interfaces ethernet eth2 ipv6 router-advert prefix '::/56' valid-lifetime 2592000
set interfaces ethernet eth2 ipv6 router-advert reachable-time 0
set interfaces ethernet eth2 ipv6 router-advert retrans-timer 0
set interfaces ethernet eth2 ipv6 router-advert send-advert true
```
ウチでは別途内部用のネームサーバが有るのでそのサーバを指定していますが、EdgeRouterのdns forwardingを使うなら後述する方法でルーターのIPv6アドレスを調査してからname-serverを追加します。
```
set interfaces ethernet eth2 ipv6 router-advert name-server '2001:xxxx:xxxx:xxxx::x'
```
IPv6のルーティング設定
pppoe1の部分は通常ipv4がpppoe0、ipv6がpppoe1になるかと思いますが、正しくはip aやshow interfacesで調査してください。
```
set protocols static interface-route6 '::/0' next-hop-interface pppoe1
```
# 接続確認
ここまで設定すればipv6での接続が出来ていると思います。
EdgeRouter上でIPアドレスが割り振られているか確認してみます。
``` command
admin@EdgeRouter-4:~$ show interfaces
Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down
Interface    IP Address                        S/L  Description
---------    ----------                        ---  -----------
eth0         -                                 u/u  Internet (PPPoE) IPv4
eth1         -                                 u/u  Internet (PPPoE) IPv6
eth2         192.168.1.1/24                    u/u  Lan
             2001:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:3334/56
eth3         -                                 u/D
lo           127.0.0.1/8                       u/u
             ::1/128
pppoe0       61.206.120.198                    u/u
pppoe1       -                                 u/u
```
eth2にIPv6のアドレスが割り振られていればOKです。
うまく言っていないときはログが /var/log/vyatta/ppp_pppoe1.log に有ります。
割り振られたIPアドレスはメモっておいてください。
2001:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:3334/56
この場合56bitのアドレスが割り当てられているので、
2001:xxxx:xxxx:xx00::～2001:xxxx:xxxx:xxFF::まで使用することが出来ます。

ping ipv6.google.com を実行して問題なければルーターからはIPv6でWANと通信できています。
```
admin@EdgeRouter-4:~$ ping ipv6.google.com
PING ipv6.google.com(2404:6800:4004:825::200e (2404:6800:4004:825::200e)) 56 data bytes
64 bytes from 2404:6800:4004:825::200e (2404:6800:4004:825::200e): icmp_seq=1 ttl=117 time=11.1 ms
64 bytes from 2404:6800:4004:825::200e (2404:6800:4004:825::200e): icmp_seq=2 ttl=117 time=10.5 ms
```
# ルーターに固定のIPv6アドレスを割り振る
ルーターには自動で設定されたIPアドレスが設定されていますが、このままだと不便なので別途指定のアドレスに変更します。
今回ルーターには 2001:xxxx:xxxx:xx00::1/56 のアドレスを割り振ります。
```
set interfaces ethernet eth2 address '2001:xxxx:xxxx:xx00::1/56'
```
また、eth2へ自動でのIPv6アドレス設定を削除します
```
delete interfaces ethernet eth1 pppoe 1 dhcpv6-pd pd 1 interface eth2
```
これでルーターのIPアドレスが固定になったので、dns等の各種サービスに設定出来ます。

# クライアントからのアクセス
RAを受け入れるクライアントはこの時点でIPv6が設定されてIPv6で通信が出来るようになっているはずです。
ipv6のテストが行えるサイトで確認してください。

https://test-ipv6.com/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2606046/50676fea-0165-1189-02bb-032bbce543fd.png)