KUSONEKOの見る世界

OCN IPoE (IPv4 over IPv6) をRTX810で試してみた

2020年6月11日 OCNから、OCN光 系のプラン全ユーザにIPoE (IPv4 over IPv6)方式の提供が正式に開始されました。
以前は、v6アルファというオプションで使用可能でしたが、今回全ユーザが無料で使用可能となりました。
法人向けでは、OCNバーチャルコネクトサービス(IPoE)というサービス名のようです。

このIPv4 over IPv6は、IPv4グローバルアドレスを複数人で共有するもので、MAP-E方式 (draft-ietf-softwire-map-03) というものが採用されています。

我が家のインターネットルータは、YAMAHA RTX810で正式にMAP-Eには対応していませんが、先人の知恵を元に設定をしてみました。

■環境
RTX810 (Rev.11.01.34)
ONU と RTX810直接続 (OCNひかり電話無し、ホームゲートウェイ無し)

MAP-Eの概略

このMAP-Eは、IPv6上でトンネルの形成し、IPv4の通信を通しますが、IPv4グローバルアドレスを複数人で共有します。
プライベートアドレスとのNAT変換は、ユーザ側のルータで行います。

各ユーザにはグローバルアドレスとそのポート番号が均等に割り振られ、
インターネット側からは、その宛先ポート番号の通信がユーザ側に流れてきます。

逆に、ユーザ側からインターネットへ通信する際は、ユーザ側ルータのNAT変換時に指定されたポート番号の中から、送信元ポートに変換する必要があります。


インターネット側からMAP-EルータにPingをする方法は、以下の記事で書いています。

インターネットから IPoE MAP-E ルータにPingをする | KUSONEKOの見る世界

OCN IPoE(IPv4 over IPv6) 動的IP MAP-EでインターネットからPingが出来るか実験してみました。

RTX810の設定

IPv6基本設定

IPv6 IPoE RA方式の基本設定は、以下の通りです。
これに、OCN IPoE (IPv4 over IPv6)/MAP-E用の設定を追加していきます。
ipv6 prefix 1 ra-prefix@lan2::/64
ipv6 lan1 address ra-prefix@lan2::1/64
ipv6 lan1 rtadv send 1 o_flag=on
ipv6 lan1 dhcp service server
ipv6 lan2 secure filter in 138 139 198
ipv6 lan2 secure filter out 199 dynamic 181 182 183 184 185 186 187 188
ipv6 lan2 dhcp service client ir=on
ipv6 filter 138 pass * * udp * 546
ipv6 filter 139 pass * * icmp6 * *
ipv6 filter 198 reject * * * * *
ipv6 filter 199 pass * * * * *
ipv6 filter dynamic 181 * * www syslog=off
ipv6 filter dynamic 182 * * domain syslog=off
ipv6 filter dynamic 183 * * ftp syslog=off
ipv6 filter dynamic 184 * * smtp syslog=off
ipv6 filter dynamic 185 * * pop3 syslog=off
ipv6 filter dynamic 186 * * submission syslog=off
ipv6 filter dynamic 187 * * tcp syslog=off
ipv6 filter dynamic 188 * * udp syslog=off

必要情報

我が家にあるRTX810はMAP-Eに正式に対応していないので、そのための設定情報を調べる必要があります。
必要になる情報としては下記の通りです。
  • 使用できるIPv4グローバルアドレス
  • 使用できるポート番号の範囲
  • BEのIPv6アドレス(プロバイダ側のトンネルアドレス)
  • CEのIPv6アドレス(ユーザ側のトンネルアドレス)
上記の必要な情報は、先人が調査・作成して下さった計算機が下記サイトにあります。
http://ipv4.web.fc2.com/map-e.html

まず、現在割り振られているIPv6プレフィックスを調べます。
RTX810での調べ方は、以下のように行います。
> show ipv6 address lan1
LAN1 scope-id 1 [up]
 Received:    234590 packets 34205881 octets
 Transmitted: 211640 packets 35341960 octets

 グローバル     2400:****:****:****::1/64 (lifetime: 604521/2591721)
(略)
調べたIPv6 プレフィックスを計算機に入れ、計算ボタンを押すだけで、4つの必要情報がすべて表示されます。
※BEのIPv6アドレスは、計算結果で表示された『option peeraddr 』の箇所です。

マスカレード設定

ユーザに割り当てられているポート番号は、1ブロックあたり16個で、63ブロックありますので、
合計1008個になります。

RTX810の仕様では、インターフェースに割り当てられるnat descriptorの数は16個、
nat descriptor自体には2ブロックまでの設定が可能なので、
合計512個まで使用することができます。

以下はnat descriptor自体の設定です。
ポートが枯渇をしないようtimerを設定し、開放が早くなるようにしています。
IPv4グローバルアドレスは先述のリンク先で分かったものを使用し、port rangeは割り当てられているポート番号の範囲の中から二つ書きます。
nat descriptor type 1 masquerade
nat descriptor address outer 1 IPv4グローバルアドレス
nat descriptor address inner 1 auto
nat descriptor masquerade port range 1 ****-**** ****-****
nat descriptor timer 1 tcpfin 15
nat descriptor timer 1 300
nat descriptor timer 1 protocol=icmp 30 
nat descriptor idとポート番号を変えた設定をあと15個作成します。
Excelで作成すると楽です。

後述のtunnel設定も入れると、nat descriptorがこのよう表示されます。
> show nat descriptor masquerade port summary
Interface            Desc Num    Outer Address                Used / All
-------------------  ----------  ---------------------------  -----------
PP[01](1)                  1000  ipcp/***.***.***.***            74/10000
TUNNEL[1](1)                  1  ***.***.***.***                  0/   32
TUNNEL[1](2)                  2  ***.***.***.***                  0/   32
TUNNEL[1](3)                  3  ***.***.***.***                  0/   32
TUNNEL[1](4)                  4  ***.***.***.***                  0/   32
TUNNEL[1](5)                  5  ***.***.***.***                  0/   32
TUNNEL[1](6)                  6  ***.***.***.***                  0/   32
TUNNEL[1](7)                  7  ***.***.***.***                  0/   32
TUNNEL[1](8)                  8  ***.***.***.***                  0/   32
TUNNEL[1](9)                  9  ***.***.***.***                  0/   32
TUNNEL[1](10)                10  ***.***.***.***                  0/   32
TUNNEL[1](11)                11  ***.***.***.***                  0/   32
TUNNEL[1](12)                12  ***.***.***.***                  0/   32
TUNNEL[1](13)                13  ***.***.***.***                  0/   32
TUNNEL[1](14)                14  ***.***.***.***                  0/   32
TUNNEL[1](15)                15  ***.***.***.***                  0/   32
TUNNEL[1](16)                16  ***.***.***.***                  0/   32
-------------------  ----------  ---------------------------  -----------

フィルタ設定

IPv6用フィルタ

先述の設定に追加を行います。
1行目は、BEからCEに来るIPv4 over IPv6(ipipトンネル)の通信を許可しています。
ipv6 filter 131 pass BEのIPv6アドレス CEのIPv6アドレス 4
ipv6 lan2 secure filter in 131 138 139 198

IPv4用フィルタ例

こちらはよくあるIPv4フィルタではないかと思います。
すでにPPPoEで使っているフィルタがあれば、そちらを使用すれば良いでしょう。
ip filter 11 reject 10.0.0.0/8 * * * *
ip filter 12 reject 172.16.0.0/12 * * * *
ip filter 13 reject 192.168.0.0/16 * * * *
ip filter 21 reject * * udp,tcp 135 *
ip filter 22 reject * * udp,tcp * 135
ip filter 23 reject * * udp,tcp netbios_ns-netbios_ssn *
ip filter 24 reject * * udp,tcp * netbios_ns-netbios_ssn
ip filter 25 reject * * udp,tcp 445 *
ip filter 26 reject * * udp,tcp * 445
ip filter 39 pass * 192.168.0.0/24 icmp * *
ip filter 51 reject * 10.0.0.0/8 * * *
ip filter 52 reject * 172.16.0.0/12 * * *
ip filter 53 reject * 192.168.0.0/16 * * *
ip filter 98 reject * *
ip filter 99 pass * *
ip filter dynamic 81 * * www syslog=off
ip filter dynamic 82 * * domain syslog=off
ip filter dynamic 83 * * ftp syslog=off
ip filter dynamic 84 * * smtp syslog=off
ip filter dynamic 85 * * pop3 syslog=off
ip filter dynamic 86 * * submission syslog=off
ip filter dynamic 87 * * tcp syslog=off
ip filter dynamic 88 * * udp syslog=off

IPv6トンネル設定

CEのIPv6アドレスは、lan2ではなく、lan1側に設定します。
こうしないと、セグメントが重複してIPv6ルーティングができなくなりました。
ipv6 lan1 address CEのIPv6アドレス/64

nat descriptorを16個指定しています。
tunnel select 1
 tunnel encapsulation ipip
 tunnel endpoint address CEのIPv6アドレス BEのIPv6アドレス
 ip tunnel mtu 1460
 ip tunnel secure filter in 11 12 13 21 22 23 24 25 26 39 98
 ip tunnel secure filter out 51 52 53 21 22 23 24 25 26 99 dynamic 81 82 83 84 85 86 87 88
 ip tunnel nat descriptor 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
 tunnel enable 1

デフォルトルートの設定(PBR)

IPv4 PPPoEとIPv4 over IPv6を併用するため、PBR(フィルタ型ルーティング)を設定します。
今回は特定のIPアドレスを持つ端末のみ、IPv4 over IPv6の使用させることにします。
ip filter 2 pass 192.168.0.2 * * * *
ip route default gateway pp 1 gateway tunnel 1 filter 2

接続確認

IPoE接続ができているかは以下のサイトで確認ができます。
https://v6test.ocn.ne.jp/

PBRで指定した端末では以下の表示となり、成功しました。
IPoE接続環境確認サイト結果

速度測定

従来のPPPoEのIPv4とIPoEのIPv4の速度測定をしました。
測定サイトは、以下を使用しています。
http://www.speed-visualizer.jp/

RTX810には、PPPoEとIPoEの両方の設定が入っている状態で、デフォルトルートを変更して切り替えています。
2020/06/14(日)16:00測定 (単位:Mbps)

PPPoE IPoE
DL UL DL UL
1回目 117.6 211.6 100.7 148
2回目 89 215.5 105.2 120.4
3回目 109 157.5 95.9 155.6
4回目 82.1 126.5 96.9 116.6
5回目 61.8 202.4 119.9 126.3
平均 91.9 182.7 103.72 133.38

2020/06/14(日)20:00測定 (単位:Mbps)

PPPoE IPoE
DL UL DL UL
1回目 147.2 282.4 113.8 138.1
2回目 143.2 298.7 109.7 186.4
3回目 194.3 229.4 107.2 142.7
4回目 188.6 290.5 115.7 132.3
5回目 165.2 168.1 104.6 167.4
平均 167.7 253.82 110.2 153.38

結果から、RTX810の限界なのかは分かりませんが、IPoEのダウンロード速度が100Mbps程度しか出ないようです。
PPPoEの方が速く、安定していますが、混雑する時間帯であれば、IPoEの方が有利かもしれません。
MAP-Eに正式対応しているルータでれば、結果は変わってくるでしょう。

上記表には入れていませんが、IPv6のIPoEが一番速かったです。
(最大DL:200Mbps, 最大UL:450Mbps)

問題点

IPoEの通信ができるようになりましたが、問題が無いわけではありません。
  • 通信が安定しない
    NATテーブルが空の時は、通信が安定していますが、段々と繋がらなくなってきます。
    PCでキャプチャをするとTCP SYNを再送しており、応答が返ってきていません。
    RTX810のCPU使用率は一桁なので、負荷ではなくてバグ?
    WAN側に出ているかキャプチャしてみたいですが、設備が無いためできません。

    →どうもnat descriptorを複数使っていると駄目なようです。二つ目のnat descriptorにセッションがある状態でも、一つ目が空くとそこを使ってしまい、通信できない模様。
    あとPBR(フィルタ型ルーティング)を使っていると安定しません。
    Staticルートでの振り分けが良さそうです。
結局のところ、RTX810では実用に耐えません。
後継機のRTX830であれば、MAP-Eに正式対応しているため、いい結果が出ると思われます。 ただ、工夫をすれば、RTX810でもある程度使えます。(後述の活用方法を参照)

謎現象 ←判明

以下は、よく分からない現象です。
WAN側のキャプチャが出来れば解決できるかもしれません。
  • IPv4 over IPv6トンネルの許可filterが、lan2に無くても通信できているっぽい(時々rejectされているログは出る。)
    先述のフィルタ設定には、許可filterを入れています。
    ■2020/06/25追記
    5chで同様の事象が発生していた方がサポートセンターに問い合わせ、バグであることが判明しました。
    http://mevius.5ch.net/test/read.cgi/hard/1585145285/634
    ■2020/06/27追記
    この現象はファストパスの制限事項に追記されました。
    http://www.rtpro.yamaha.co.jp/RT/docs/fastpath/#restriction
    IPIPトンネリングおよびmap-eトンネル環境下において、カプセル化された受信パケットはフィルタリングの処理対象外です。

活用方法 2020/12/19追記

RTX810でMAP-Eの活用方法が分かりましたので、記載しておきます。

やはり、接続先が多くなりNATテーブルが消費されると、通信ができなくなってしまう現象はどうしようもありません。
ですが夜間帯は、PPPoEよりも通信速度や応答速度の面ではメリットがあります。

逆に言えば、特定の接続先だけにIPoEを使い、多数セッションを消費しない通信であれば、問題なく使用することができます。

その条件に合う通信が、VPN通信です。
VPN通信は一つのトンネルの中に、多数のセッションを張ります。
RTX810から見るとセッションは一つのため、問題には引っ掛かりません。

仕事で、自宅から会社のVPNサーバに接続する人には丁度いいです。
設定としては、VPNサーバのIPアドレス向けのルートをTunnelに向ければ良いです。
セッションも一つか二つしか使わないので、nat descriptorも一つで足ります。
ip route default gateway pp 1
ip route VPNサーバのIPアドレス gateway tunnel 1
tunnel select 1
 tunnel encapsulation ipip
 tunnel endpoint address CEのIPv6アドレス BEのIPv6アドレス
 ip tunnel mtu 1460
 ip tunnel secure filter in 11 12 13 21 22 23 24 25 26 35 39 98
 ip tunnel secure filter out 51 52 53 21 22 23 24 25 26 99 dynamic 81 82 83 84 85 86 87 88
 ip tunnel nat descriptor 1
 tunnel enable 1
nat descriptor type 1 masquerade
nat descriptor address outer 1 IPv4グローバルアドレス
nat descriptor address inner 1 auto
nat descriptor masquerade port range 1 ****-**** ****-****
nat descriptor timer 1 tcpfin 15
nat descriptor timer 1 300
nat descriptor timer 1 protocol=icmp 30
私はこれにより、PPPoEでDL1Mbps、遅延50msが、IPoEでDL100Mbps、遅延15msまで改善し、デスクトップ作業も快適になりました。


他にも、ゲームサーバへのルートを向けることで、低遅延でゲームがプレイできる可能性があります。

例として、ロマンシング サガ リ・ユニバース(ロマサガRS)では、高速周回が必要なソシャゲなのですが、低遅延であればプレイが捗るようになります。
体感でも戦闘時のサーバレスポンスが速く快適でした。
『production-api.rs.aktsk.jp』の名前解決したIPアドレス全てをtunnel 1に向けましょう。
IPアドレスが変わることがあるようなので、時々チェックした方がいいです。


まだまだ活用方法があると思いますので、色々と考えてみるといいでしょう。

参考

必要情報の計算機
http://ipv4.web.fc2.com/map-e.html

YAMAHA RT107eでSo-netのMAP-EのIPv6(下の方に書かれています)
https://qiita.com/wakisuke/items/99d3589214e402e309ed

アドレスやポートの計算が分かりやすく書かれています。
https://www.janog.gr.jp/meeting/janog31/doc/janog31-MAP-asama-01.pdf

仕様
https://tools.ietf.org/html/draft-ietf-softwire-map-03

ルータの買い替え 2021/11/14追記

IPoEの低遅延を活用したく、MAP-Eに対応しているルータに買い換えました。
多機能でコスパが良かったです。

NEC IX2215 を自宅用ルータとして使ってみた

NEC IX2215を自宅用ルータとして購入しました。設定した内容の紹介とRTX810との速度比較もしています。