コンテンツへスキップ

1

引っ越し先でのネットワーク環境整備: MAP-E という記事で、DTI光に契約したことを書きましたが、MAP-E接続にハマりMikroTik RB4011iGS+RMを有効活用できないまま半年が経過してしまいました。

RouterOSでMAP-E接続の試み

MAP-E(OCNバーチャルコネクト)で通信できるように、例の計算機の力を借りながら、下のようなスクリプトでマッピングルールに従ったNAPTを設定してIPIP6トンネルへ流し込むなどあれこれ試してみたのですが、どうにもうまくいかず…。

:global addNatRules do={
  # Args: $PSID $v4Addr $outInterface
  :for i from=1 to=63 do={
    :local portStart ((i << 10) | ([:tonum $PSID] << 4))
    :local portEnd   ($portStart + 15)
    :local portRange "$portStart-$portEnd"

    /ip firewall nat add chain="srcnat" action=masquerade protocol=tcp nth="$(64 - $i),1" \
      to-address=$v4Addr to-ports=$portRange out-interface=$outInterface
    /ip firewall nat add chain="srcnat" action=masquerade protocol=udp nth="$(64 - $i),1" \
      to-address=$v4Addr to-ports=$portRange out-interface=$outInterface
  }
}

$addNatRules PSID=XX v4Addr=xxx.xxx.xxx.xxx outInterface=ipipv6-ocnvc

結局諦めて、BUFFALO WSR-2533DHP2をルータにして運用していました。

しばらくはこれで使っていたのですが、5〜6月にOCNバーチャルコネクトでの通信速度の低下が目立つようになり、在宅勤務に若干支障が出始めていました。DTI光の「IPv6(IPoE)接続サービス」は、契約時期によってVNE(OCNバーチャルコネクト or v6プラス)が異なるのですが、各所での報告を見るとOCNバーチャルコネクトのみ速度低下が顕著に現れているようでした。PPPoEは言わずもがななので、もう人権がありません。

IIJmioひかりへ

DTI光のキャッシュバックも振り込まれたし、他のISPに移るには良い時期だと思いまして、RouterOSで動作実績のあるDS-Lite(transix)採用のIIJmioひかりに事業者変更することにしました。

コラボ光での事業者変更は初めてのことでしたし、VNEの切り替えも伴うため、少し手間取ってしまいました。

申し込みから時系列に整理すると以下の通り。

2020/07/06 DTI光 事業者変更承諾番号発行
2020/07/07 IIJmioひかり 事業者変更申し込み
2020/07/11 ひかりプロビジョニングセンターから電話
2020/07/14 IIJmioひかり 回線開通日
2020/07/15 「回線開通のお知らせ」メール受信
2020/07/16 IIJmioひかり IPoEオプション申し込み
DTI「退会手続き受け付けのお知らせ」メール受信
2020/07/17 DTIサポートへ「IPv6(IPoE)接続サービス」の即時廃止を依頼
2020/07/20 昼過ぎ頃にOCNバーチャルコネクトから切断されたことを確認
IIJサポートへその旨を連絡
2020/07/21 「IPv6 IPoEオプションご利用開始日確定のお知らせ」メール受信
2020/07/22 transix接続確立確認

DTI光が月末解約扱いということに7/16のメールで気づき、「IPv6(IPoE)接続サービス」をすぐに廃止してほしい旨を連絡したのですが、もっと早く連絡していればIIJ側でより早くVNE切り替え・transix開通できたと思います。このあたりの仕組みをよく理解していなかったのが反省点です。

RouterOSでDS-Lite

ひかり電話なしの環境なので、RAで/64のプレフィックスが払い出されることを理解していれば、設定自体は難しくありませんでした。

以下のブログ記事の内容そのままです。

ねころくぶろぐ: RouterBoardでDS-LITE

PPPoEとの併用

DS-LiteはISP側のルータ(AFTR; Address Family Transition Router)でNAPTされるため、自由にポート開放ができません。MAP-Eではマッピングされたポートについては自由に扱えるため、自宅サーバへのアクセスを実現できていたのですが、今回は別の方法を考えなければいけません。
(もちろんグローバルIPv6アドレスで公開することはできるが、出先ではIPv4のみの環境も多いため、IPv4アドレスでのアクセス手段を考える)

どこかのVPSを踏み台にして自宅とVPNを張っておく、という手段もありますが、IIJmioひかりはIPv4 PPPoE接続も併用できるので、こちらを使うことに。DTI光では「IPv6(IPoE)接続サービス」が開通すると、IPv4 PPPoE接続は自動的に廃止され併用できない仕様だったので……。

PPPoEとの併用にあたって、以下のような設定を行いました。(PPPoE接続のセットアップ自体は特に悩むところはないので割愛)

PPPoE経由のpolicy-based routing

PPPoEから入ってきた接続にmangleでrouting-markを付け、デフォルトのtransix向けIPIP6トンネルではなく、PPPoEへルーティングするように設定します。

以下は、PPPoEから入ってきたtcp/10022ポート宛を自宅鯖192.168.88.100のtcp/22へdst-natする想定での例です。

/ip firewall mangle
add action=mark-connection chain=prerouting connection-mark=no-mark connection-state=new in-interface=pppoe-iijmio new-connection-mark=pppoe-iijmio passthrough=yes
add action=mark-routing chain=prerouting connection-mark=pppoe-iijmio dst-address-type=!local in-interface-list=LAN new-routing-mark=ppoe-iijmio passthrough=no
/ip firewall nat
add action=masquerade chain=srcnat out-interface=pppoe-iijmio
add action=dst-nat chain=dstnat dst-port=10022 in-interface=pppoe-iijmio protocol=tcp to-addresses=192.168.88.100 to-ports=22
/ip route
add comment="PPPoE-IIJmio connection" distance=1 gateway=pppoe-iijmio routing-mark=ppoe-iijmio
add comment=transix distance=2 gateway=ipipv6-transix

これでイケる!と思って、試しに外からSSH接続してみると、接続は確立するものの、ブラジルのサーバと通信しているのかってくらいパケロスの大きい回線を使っているような状態でした。

あれこれ原因調査をしていると、redditで以下の質問を見つけました。これを読むと、どうやらpolicy-based routingしようとしているパケットをfasttrackしてしまうとマズイっぽい。

reddit: My routing mangle rules dont work.

デフォルトではfilterルールに以下のようなルールが入っているけど、

/ip firewall filter
add chain=forward action=fasttrack-connection connection-state=established,related

connection-mark=no-markに限定して適用するように修正すればOK

/ip firewall filter
add action=fasttrack-connection chain=forward connection-mark=no-mark connection-state=established,related

このルールがどの程度パフォーマンス的に影響があるか評価してないですが、上限100MbpsのVDSLである我が家で問題になることはないでしょう。

DDNSのIPアドレス

RouterOSにはCloudサービスとしてDDNS機能が提供されています。*.sn.mynetname.netというホスト名が与えられて参照解決できるようになるのですが、複数のPublic IPアドレスを持つことを想定していません。

とりあえずDDNSの更新サーバへ通信する時のIPアドレスが登録されるっぽいので、そのままだとデフォルトゲートウェイのtransix側のIPアドレスが登録されてしまいます。外部から自宅へアクセスする目的なので、PPPoEのIPアドレスが登録されるようにします。

MikroTIkのDDNS更新用サーバはcloud2.mikrotik.comと書いてあるので、こいつへのアクセスはPPPoE経由になるようスタティックルートを設定してあげます。
(今後、更新用サーバのIPアドレスが変わるかもしれない点は要注意)

/ip route
add comment=DDNS distance=1 dst-address=159.148.147.201/32 gateway=pppoe-iijmio
add comment=DDNS distance=1 dst-address=159.148.172.251/32 gateway=pppoe-iijmio

IPv6 IPoEのブリッジ設定

そして最後は、ひかり電話なしの環境でLAN側にIPv6をどう流してやるか。RouterOSはいわゆるND Proxyは実装されていないので、もうブリッジしてやるくらいしか無いですね??

Routerboardユーザグループさんのブログに以下のような記事がありましたので、ほぼ同じような構成にしました。

Routerboard User Group JP Portal Site: IPoE(IPv6)環境でのRouterOSの設定方法について

とりあえずbridge filterでNGNとはPPPoEとIPv6しか通れないようにします。

記事ではether1(WAN)・ether2(LAN)の想定ですが、RB4011で全インタフェースブリッジしてether1がONUに接続されているという想定だと、以下のようなルールになります。
(完全に雰囲気で書いているので、これで良いのか自信は無い)

/interface bridge filter
add action=jump chain=input comment="INPUT from WAN" in-interface=ether1 jump-target=input-wan
add action=accept chain=input-wan comment="accept input IPv6" mac-protocol=ipv6
add action=accept chain=input-wan comment="accept input PPPoE" mac-protocol=pppoe-discovery
add action=accept chain=input-wan mac-protocol=pppoe
add action=drop chain=input-wan
add action=jump chain=output comment="OUTPUT to WAN" jump-target=output-wan out-interface=ether1
add action=accept chain=output-wan comment="accept output IPv6" mac-protocol=ipv6
add action=accept chain=output-wan comment="accept output PPPoE" mac-protocol=pppoe-discovery
add action=accept chain=output-wan mac-protocol=pppoe
add action=drop chain=output-wan

このbridge filterによってbrigdeのhardware offloadingは無効になってしまうので、NASなどは別のスイッチを接続してその下にぶら下げたほうが良いと思います。

あと記事の最後の方に「別途IPv6 firewallの設定が必要でしょう。」って書いてありますが、RouterOSでのIPv6 Firewallのことを言っているならば、レイヤが違うので設定しても効かないよね…。個々の端末でしっかり対策しないとね。

ipv6-test.com result

ということで、以上。せっかく買ったRB4011を有効活用できる環境がひとまず整ったのでヨシ!

2

お久しぶりです。実は先月引っ越しをしまして、その直後にコミケがあり、正月でやっと一息つけたところです。

さて、引越し先はフレッツ光のVDSL方式しか選択肢のないマンションでして、色々と苦しんでおります。これまでauひかりを10年以上使っていたので、自宅でフレッツ回線をまともに触るのは2000年前半にADSLを引いたとき以来になります。

auひかりでは上下5Gbpsの高速サービスを契約しており、実測値も悪くなかったので、かなり富豪的にインターネットを使えておりました。

が、今は上下最大100MbpsのVDSLです。(光ネクスト マンションタイプ プラン1B)

また、噂には聴いていましたがPPPoEの網終端装置での輻輳がここまでひどいとは思いませんでした。夜間のピーク時にはダウンロードが2,3Mbpsほどになり、動画配信サービスはまともに使えたものではありません。(網内では90Mbpsは出ています)

PPPoE終端での輻輳を回避するため、NGNのIPv6 IPoE接続を使ってIPv4 over IPv6トンネリングしてやるサービスが乱立しているんですね。あちこちで「IPoE」と呼ばれているものが、実際はNGNにおけるIPv4 over IPv6 over Ethernetを指していると認識しました。それから「IPv6だから速くなる」的な誤った推論も溢れていて、まぁ、カオス状態で驚きました。

しかし、NGNに関して完全に浦島太郎状態だったので、NGN独特の仕様に疲弊しております。ひかり電話の契約によって、IPv6プレフィックスが降ってくる方法が変わるとか……どうして……

この前買ったMikrotik RB4011iGS+RMで遊ぼうと考えていたのですが、泣きそうです。


愚痴はさておき、上記のような様々な罠を知らずに契約したのがDTI光(ひかり電話なし)です。

PPPoE接続はいいとして、問題はIPIP6(IPv4 over IPv6)の方式です。DTI光では、MAP-E方式のOCNバーチャルコネクトというサービスを導入しているようです(なお、契約時期によってはv6プラスだった模様)。それにしても、わざわざ 4466.jp なんてドメイン取ってまで宣伝してるのですね。

RouterOSを用いた接続ですが、DS-Lite方式については動作報告を見つけることができましたが、MAP-Eは見当たりませんでした。

ねころくぶろぐ: RouterBoardでDS-LITE

MAP-Eそのものというよりは、提供事業者によるマッピングルールやBorder Relay(BR)が明らかにされていないことが問題でしょうか。

JPNEが提供するv6プラスやBIGLOBEのv6オプションについては、先人たちの調査によって判明しているようです。

風柳メモ: v6プラス関連の覚え書き

ネトゲー回想録: v6プラスのIPアドレス&ポートの計算方法

issue: biglobeのIPv4 over IPv6でハマった話 (RTX830)

OCNバーチャルコネクトコネクトは情報がありません……

仕方がないので、調査用にOCNバーチャルコネクト対応ルータWSR-2533DHP2を買ってきました。それで挙動を解析しました。

とりあえず、分かったことを書いておきます。

  • rule.map.ocn.ad.jp というホスト名を名前解決してた
    • ググるとCiscoの以下のドキュメントがヒットする
      IP Addressing: NAT Configuration Guide, Cisco IOS XE 17
    • どうやら↓みたいなAPIを叩いて、マッピングルールを取得しているっぽい?
      https://rule.map.ocn.ad.jp/?ipv6Prefix=<address>&ipv6PrefixLength=<prefixLength>&code=<API Key>
  • ルータ管理画面の出力を見る限りでは、CEアドレス、IPv4アドレス、ポート番号が以下の計算機の計算結果と一致することを確認。なんと、この計算機はOCNのIPレンジも対応済みだったんですね…。
    http://ipv4.web.fc2.com/map-e.html
  • BRアドレスは、自分の環境(東日本)では 2001:380:a120::9

はぁ、意地を張らず最初からIX2105あたりを入手しておけば良かったと後悔しかけています。

今日はここまで。

[追記]

あれこれ格闘しましたがうまくいかず、結局DS-Lite対応のIIJmioひかりへ移りました 。
=> IIJmioひかりへ事業者変更 RouterOSでDS-Lite

そういえば、いつの間にか例の計算機でOCNバーチャルコネクトのBRアドレス(peeraddr)対応されていましたね…。一体何者なんだ…。