以前は、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 30nat 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で指定した端末では以下の表示となり、成功しました。
速度測定
従来のPPPoEのIPv4とIPoEのIPv4の速度測定をしました。測定サイトは、以下を使用しています。
http://www.speed-visualizer.jp/
RTX810には、PPPoEとIPoEの両方の設定が入っている状態で、デフォルトルートを変更して切り替えています。
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 |
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ルートでの振り分けが良さそうです。
後継機のRTX830であれば、MAP-Eに正式対応しているため、いい結果が出ると思われます。
謎現象 ←判明
以下は、よく分からない現象です。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/#restrictionIPIPトンネリングおよび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を自宅用ルータとして購入しました。設定した内容の紹介とRTX810との速度比較もしています。