せっかくのIPoE化もDS-liteの制限で台無しだったので、代替策を考えた
久しぶりに書いていくスタイル。人生鳴かず飛ばず、しょっさんです。
生活リズムがどうしても一定せず、わけあってお仕事もプライベートも盛り沢山で、精神的にモノを書こうという気力が一切わかず、この間に書いた原稿も今まで以上の悲惨なもので、たくさんのツッコミをいただいています。編集長、ホントごめんなさい。
さて、そんな殺伐とした生活もやっと安寧の時期がやってきそうです。光明が見えてきました。
1ヶ月以上前でしょうか、自宅作業民増加による帯域不足に悩まされていました。プロバイダが悪いと言うよりも、PPPoE 経由によるどんづまりでの遅延の様子。ついに我が家もIPoE化か...と IPv6 プロバイダに申し込んだのが運の尽き。何重もの罠に苦しめられることになり、今に至ります。根本的な解決には至ってはいませんが、ようやく使い物になる状況にはなったので、ここに記録しておきます。技術的な設定方法や回避策などは、別途 qiita に記述しますが、ここは精神的なものや経緯などを残しておきます。
ルータ設定情報が世に少ない
わたしが使っているルータは Edgerouter-X という、国内ではドマイナーの部類にはいるルータです。それでも、vyos ベースで GUI でも操作できるお手軽、かつどこまでもカスタマイズできるモデルです。
これも IPoE 対応しているのですが、CLI での設定でしか実装できないので、めんどくて先延ばしにしていたツケが今です。
久しぶりに CLI で操作をするという流れと、Linux の Kernel の気持ちを思い出すという難局に、数年間ネットワークの設定から離れていた元ネットワークスペシャリストが、さまざまな障壁にぶつかります。
DS-lite されない
IPv6 アドレスをゲットすることはカンタンですし、DS-lite の設定をするとこまではうまくいきます。しかしまぁ、なぜか動かない。IPv6 はうまいこと動いてウホウホするんですが、クライアントからは IPv4 だろうが、IPv6だろうが PPPoE 側を経由する始末。なにが行けなかったのか。
動かしたまま移行しようとする、その根性がいけなかった。ちゃんと位置からきれいにソレ専用に設定すればうまく行っただろうに、移動がめんどくさいという理由でオンザフライに構成してしまったのが仇に。
理由はPPPoEを切ることのできない小心者のわたしでした。Edgerouter というか Linux Kernel の諸事情な気はしますが、PPPoE のルーティングが優先される始末でした。結局、これだけで数日溶かしました。ほんと返せ。
DS-lite の鬼制限に引っかかる
IPv4 はうまくいきました。しかし、上位の internet multifeed 内の transix で NAT されて出ていくタイプなので、ここでも若干の足かせがあります。足かせどころじゃないです。どのプロバイダを使っても、この transix 内の IPv4接続装置 - AFTR(Address Family Transition Router) には、
NAT 変換用のポート最大1024まで (ポートアドレス変換)
という鬼制限があります。一人で使ってる分にはなかなか到達しませんが、我が家は10人以上の世帯で、ゲームやボイチャで浪費するやつが少なくありません。そうです、あっという間に枯渇です。しかもこれ、複数のプロバイダを引っ越したあとに知りました。プロバイダから教えてもらったんですが、プロバイダの制限ではなく、この上位に位置する Internet multifeed が DS-lite で制限をかけているようです(追記 FibreAccess/F だと DS-lite ポート制限 12800 とあるので、この高額なお布施(¥14,000/月)をすれば緩和されるかも)。
(※)DS-Liteを利用する際、IPv4通信は1回線あたり12800ポートまでの制限があります。
我が家の場合の使い方で、大体 2日で枯渇し始めるのでConntrack テーブルの保持期間がそれ前後ではないかと類推してます。しかしこれが厄介。一度あふれると、transix から ICMP host unreachable が帰ってきて強制切断。瞬時に。しばらく待ってると復帰するんですが待ってられん。全然関係ないけど、プロバイダにこの症状を説明するときに、「ICMP host unreachable のつづりを教えて下さい」って言われたの悲しすぎて泣けてくる。
IPv6化への道
さて、ここでわたしは複数の解決策を考えます。まずひとつ目は、「IPv6 化による IPv4 接続の削減」です。IPv4 自体への接続が削減されれば、この制限にも引っかかりにくくなるだろうとの予測です。
結果から先に申し上げると、枯渇の期間が延びただけで、根本的な解決にはなりませんでした。ツライ。2日で切れるのが 3日目辺りから枯渇し始める程度。回復には、しばらく待つか、feed への宛先を別のものへ変える(transix 内にAFTRは 2つ存在)という程度。
さて、IPv6 化ですが、これはこれでネットワーク屋さんとしては通らないわけには行かない所業ですから、とっととやってしまおうと茨の道に入り込みます。
「ひかり電話なし」という茨の轍
NTT東日本NGN から付与されるIPv6 アドレスですが、ひかり電話を契約していないと、IPv6 は ::/64 でアドレッシングされます。要するに 1 IPアドレスのみです。ひかり電話があるとめでたいことに、ルータ自体には ::/60 prefix で大量の IPが付与されます。なのでこれを元に、自宅内に DHCPv6 で配布すればよいという楽なもの。しかし、我が家はひかり電話は契約していません。邪魔くさいし、金もかかる。ただ、この時は金で解決できるなら、ひかり電話契約してやろうかとも考えましたが、ONU をホームゲートウェイへ変更する必要があり、2週間以上先の工事になる予測だったので、すっぱり諦めました。ひかり電話がある事自体も面倒なことありそうだったし。
さて、WAN側にしか IPが一つしか振られない場合にどうするか。方法は2つあります。
1. WAN/LAN をブリッジ(IPv6パススルー)する
2. NATv6 を使う
3. ND proxy を利用する
WAN/LAN をブリッジするのはセキュリティ的にはNGです。なぜなら、LANもそのまま外部にフルオープンすることになります。ブリッジ化することによって、個々人に自分の身は自分で守ることになります。ダイレクトにインターネットから接続されてしまう可能性があります。まぁ回避策はあったんだけど、それを考えるのも面倒だったのと、ブリッジ機能がHW オフロードできなかったり、稼働したまま設定するのが厄介そうだったり、ついでにいうとIPv4もパススルーされちゃったりで、それを Edgerouter で制御するには、標準機能を利用せず sysctl 使わないとだったりで面倒だったので。
2つ目のNATv6は、IPv6なのにいわゆる IP Masquerade を使うというアホらしい作戦。ただし、Edgerouter で実装した場合、IPv6 がちゃんと利用されないアホさ加減も相まって、これを考慮することは諦めました。
では3つ目、ND Proxy のが一点集中しながら管理しながら実装できるだろうとも考えたんですが、これはこれで厄介。Edgerouter は ND Proxy 機能を提供していない。ただ、MIPS 用にクロスコンパイルすれば動作する ND Proxy(ndppd) も存在している。
ちょっと設定の手をわずらわせてブリッジするか、ND Proxy をコンパイルして利用するか。結局わたしは、コンパイルしてしまいます。
この解決策が良かったかどうかはおいといて、それでもちゃんとIPv6化されたので良しです。ここまで 1週間以上。
そして、実際に解決されないという不遇。
わたしは、さらなる混沌の闇に進んでいくのです。そうです自前の AFTR を作ればいいという悪い方向へ進んでいくのです。ところで、どうでもいいけど、"RA(Router Advertisement)" を ”ルータ広告" って訳したの誰だ。
自分で AFTR を作ってみるまで
残念ながら AFTR いわゆる ipv4 over ipv6 tunneling を実装している日本人はこの上なく少ないようです。なんと出てきたのは某ともちゃが大昔に作った AFTR ネタ。
設定の心得やポイントも一切書いていないので、こっから読み解くのは難しい。他にも探してみたけど、qiita で2つほど、海外にはほとんど存在せず。しかも、最近のトレンドや MTU Path Discovery 問題まで考慮して設定されてる御仁はほぼほぼいない。
ここで 2週間程度を費やすことになる。そして今に至る。
結果的につまづいたことと言えば。
1. 速度の出る VPS は存在しない。そしてクラウドはパケ死(設備投資死)する
2. ipip6 したあとの MTU の最良の定義が見つからない
3. VPN / トンネル扱いされて利用できないサービスが有る
4. 米国IPアドレスが付与されて、国内限定サービスが受けられない
最終的に行き着いた構成は、「普段はVPS経由のIPv4アクセスで、国内限定サービスを提供するIPv4サイトに向けては transix AFTR を経由する」という、アホらしい構成。もっとスマートな方法はないのか。しかし、これである程度安定した。300Mbps on IPv4 などは必要ない。定常的に 100Mbps 近く出れば御の字である。これであれば、最良の選択肢となった気がするが、管理する対象が爆発的に増えた。ついでに、何かあったとき用に常にパケットキャプチャしているというルータに負荷だけをかけ続ける日々。
さて、すでに長いが、さらに書き続けてみる。
速度の出る VPS は存在しない。そしてクラウドはパケ死(設備投資死)する
まずはじめに言っておきますが、IPv6 で 700Mbps くらいでているから、それくらいIPv4でも出したいってことになると、それはもう「金次第」です。
AFTR を安価に済ませるなら、圧倒的に VPS です。ネットワーク使用量もサーバ利用料も固定料金です。しかも数百円からあります。わたしは東京(関東)なので、Tokyo Region のある VPS であればどれ使ってもそれほど大差ない気がします。が、気をつけておくとよいのは、海外勢のVPS と国内のVPSです。
国内のVPSは、上限 100Mbps で頭打ちにしているところがほとんどです。WebArena だけが 1,000Mbps となっていて「これだ」みたいになりますが、IPv6 に対応していないので、そもそも論外です。なので「国内高速VPS」というもので合致するものはありません。さくらかConoHaあたりが良い気がします。ServersMan は速度は示されてませんが、速いらしいので試して見る価値はあるかもしれません。ただカスタムインストールできないっぽいので vyos 派閥のワイにはツライ。
あと、国内VPS は転送量無制限を謳っているとこがほとんどですが、あまりにも使っている場合には制限なども辞さない構えなのは心の片隅においておきましょう(明言はしてないが、情報としては出てる)。
海外勢のVPS で、Tokyo にリージョンがあるもので情報がえられるのは、vultr と linode です。ともに月の転送量制限があり、それを超えると課金される仕組みです。この辺柔軟でかつ情報が出てるのは linode 。Private/Public の帯域も出ていますし、転送量制限は、各 VPS の合算値になるので、1台がやたらと使っていても、他で利用していなければ、ある意味上限が上がるように仕組みです。ということで、結局 linode になりました。linode の面倒なのは vyos (というかカスタムインスコ) がめっちゃ面倒なとこです。まぁちょっとがんばればいけます。良かった。
linode は、他の VPS と比較して使いやすかったり、それでいてカスタマイズが結構細かくできたり、デフォルトで DDoS 対策されてたりするのが良さげ。vultr のように Firewall サービスあったらパーフェクト気味だったのが惜しいところ。でも vultr は Tokyo Region だと DDoS 対策なかったりと片手落ちなのよね。
ほんでもって、彼らを選択したところで言うほど高速ではないです。結局 100Mbps 前後にしかならない。ただ、安定的にいつでも 100Mbps 前後出るというのは、それはそれでありがたい。実際に IPv4 向けの Internet サービスで 100Mbps 以上に必要な状況には陥らないから。
さぁでは、満を持してクラウドサービスの出番です。
例えば Amazon Web Services。細かい計算は置いといて、EC2 T3 インスタンスあたりなら、それなりの帯域幅もありますし micro なら、それほどの金額にはなりません。linode のプランと大差なく使えます。
が、中から外への接続転送がかかるため従量課金な通信料金がかかります。しかも、NATゲートウェイでもお金がかかります。試しに 1ヶ月見積もってみるとこれです。年間 ¥1,776 じゃないです。「$」です。月額で $148.04 なので、今だいたい ¥107 ですから、¥15,840(切り捨て) です。意味わからん。
T3.micro 想定なので、ネットワークも最大 5Gbps とはいえベストエフォートです。何が悲しくて、こんなに通信料金取られなきゃあかんねん。なお、月の転送量は 500GB 程度を想定です。もう少しいかない気もするけど、ちょっと安くなったところで 1万円前後のサービスとか意味がわかりません。
くそっ、こうなりゃ Amazon でも Lightsail なら..!! と、これも IPv6 サービスが提供されていない。残念。パケ死するか、ちょっと遅くても安定させるかの二択。いくら経費になるからとはいいつつも、この料金はちょっとアホらしい。
ipip6 したあとの MTU の最良の定義が見つからない
未だに悩まされ続けているのが MTU 。ブラックホールルータ扱いされ得ると、遮断されるサービスがあったり、そもそも通信できなかったりする。それでいてできる限り大きめの MTU はこさえておきたい。しかし、どこにでもちゃんとアクセスできて、ちょーど良いサイズってのが見つからないし、調べきれない。結局、vyos のサイトに有るようにこの MSS サイズをチョイスすることに。eth0 = 1372、tun0 = 1452 に落ち着いた。eth0 = 1400 でもある程度問題なかったので、真面目に計算して見ようかとは考えてる。
あと、vyos の 1.2.5 だと "encaplimit = none" な構成が実装できないので、tun0 側の MSS を 1460 にできないのちょっと残念すぎる。
ここはまだ計算と調整が続く。
VPN / トンネル扱いされて利用できないサービスが有る
さて、なんだかんだで、vultr と linode を試してみたわけだけれども、各々で利用できないサービスがある。まずは、vultr 。
アマゾン周りが結構ダメ。Amazon Prime Video が VPN 認定されているIPアドレス?っぽくて、うまく動きやしない。残念。
あといちばんの謎は、Amazon の Product Review のページへ行くと、高確率で aibo のアスキーアートが表示される。謎すぎる。
パケットとって中身を見てみても、ただの cloudfront だったりするので、ほんとに意味がわからない。なおこれは、linode でも発生する。
米国IPアドレスが付与されて、国内限定サービスが受けられない
Amazon Prime 見られないのはしんどいってことで、今度は linode へ。そうしたら、なぜか一部のサービスで US で払い出されている IPアドレスと判定されてしまい、国内専用サービスを受けることができないという、悲しいことに。
例えば、NHK オンデマンド、NHK プラス、radiko.jp なんかが、そう。一番ビックリしたのは、zabbix.jp アクセスしたら「 (ip address) has been banned」とか出てきた。前にこの IP持ってたやつは、どんな悪いことしたんだ、いいかげんにしろ。
最終的な構成
そんなこんなで 2週間以上が経過し、精神的にもまいりはじめたので、愚策とも思えることに手を染めることにしました。
「国内向けサービスへのルーティングは transix へ向ける」
そう、結局 transix を使わざるを得ないことが判明し、そっちを使わないといけないサービスだけをルーティングするという、まさかのカッコ悪い対処方法を取りました。切ない。アホらしい。でも、安心して接続できる。エラーが出ない、こんな嬉しいことはない。というか、なんで IPv6 用にあtらしいプロバイダつないだら、別の VPS に金払わなきゃならんのや...。transix の制限が 4096 くらいだったら、こんなことにもならなかったのに...。
ということで、ネットワーク構成はこんな感じ。すごく美しくない。ホントどうにかしたい。
ということで、うちはこんなふうにしてるとかいう奇特な人がいたら、是非情報を教えていただきたい。すぐに試す。