純規の暇人趣味ブログ

首を突っ込んで足を洗う

IPv6の半固定IPとサーバーのための対策

      2017/05/25    HimaJyun

珍しく完全な解決とは言えないパターンの記事

プロバイダからIPv6アドレスが降ってきたのでおうちサーバをv6接続に対応しようとしたら、IPoEは半固定とかいう謎仕様だったのでそれの対策を考えました。

ちなみにこの記事の内容は「2017/04/19」の情報です、未来の人達の世界ではこの通りではないかも知れないので確認しながらどうぞ。

IPv6(IPoE)のアドレス変動

「アドレス」と書いてるが、厳密にいえばプレフィックス。

このページに来る人は既に該当の問題にぶち当たった人だと思うが、一応説明しておく。

NTTでIPoEのIPv6接続を行うと、そのIPアドレスは「固定」となる。(これはNTT側の制限に起因する感じ?なのでプロバイダがどこであれ関係ない)

AU光のIPv4と似たような感じで、殆ど固定だが稀にアドレスの変動が起こるという代物。

そうなると困るのはサーバで、IPが変わってしまうので接続できなくなってしまう。

「固定だと個人が特定出来てしまうだろ!!」という固定IPの弱点と、「動的だとサーバが建てられないだろ!!」という動的IPの弱点、その両方を足し合わせたような素晴らしくアレな仕組み

AAAAレコードの書き換え

当然ながらに発生する難点の1つめがこれ

アドレスが変動した場合に、それに合わせてDNSに登録されているAAAAレコードを書き換える必要がある。

この辺りはv4時代に培われた動的IPでサーバを公開するノウハウが応用できるかと思う。

浸透に少し時間が掛かるが、これはどう頑張っても仕方のない事なので少しの浸透待ちは目をつぶるとする。

パケットフィルタ設定の書き換え

v6特有の「クソ面倒ポイント」がこれ

IPv6では「そこら辺の石ころに割り当ててもまだ余る」くらい広大なアドレス空間が使えるため、各デバイスにグローバルIPが付く

そしてそれらのパケットを「通す/通さない」の設定はルータのパケットフィルタ設定で行うことが多い。

なので、変動が発生した場合はルータに設定されてあるパケットフィルタの設定を書き換える必要があり、それが自動で出来ないと色々と詰む

ネットワークがサーバ専用になっているなら、ルータ側で全てのパケットを通してから各サーバのiptablesでフィルタすれば良いと思うが、私用のPCなんかもある場合はセキュリティの観点からフィルタなしはよろしくない。

v4でいうNAT的な事がv6でも出来れば楽ではあると思うんだけど、そんな事可能なのかな?

IPv6/IPv4フォールバックの遅延

DNSにAAAAとAを両方指定して解決する(AAAAがダメな時にAにフォールバックされる)ならば苦労しないの。

確かに可能ではあるんだけど、現実的ではない。

AAAAとAが両方返された場合、クライアントは優先的にAAAA(v6)で接続しようとする。

そして繋がらないので接続待ちとなり、タイムアウトしたらA(v4)に切り替わる。

何が問題かというと、この「タイムアウト」がとてつもなく長い事。

手元のFirefoxで試してみた所、タイムアウト待ちが50秒、つまり、50秒待たされた後にページが表示される。

タイムアウトの秒数はクライアント依存、再接続するかどうかもクライアント依存

これは実質繋がらないと言っても良い、なので使えない手法となる。

NTTのIPv6で最初の方に起こっていたのとほぼ同じ問題を自発的に作ったような物。

対策

寿司屋にココナッツが置いてあると積極的に購入するタイプの人間として「v6対応」はやってみたくて仕方がない物の一つ(ちなみにココナッツは植物系の繊維的な苦みが少しあるけど甘くておいしいです)

色々な対策を考えてみたので参考までにどうぞ。

プロバイダを変える

札束ビンタは世界一ィイ!!

固定IPv6アドレスを発行してくれるプロバイダに変更(もしくは追加契約)する手法。

この場合のデメリットは当然ながらに「お金が掛かる事」「契約周りの作業が必要な事」

それから、フレッツ光+固定IPv6は現状PPPoEとなるので、「PPPoEセッションを消費する事」の3つ

当然ながらIPoEのメリット(速度とか)はない、理論的にはNAT変換がない分v4よりか早くなりそうだが、その辺りは分からない。

なお、PPPoEでも半固定のプロバイダがあるので要注意

どのプロバイダがどう対応しているかは最後の方でまとめている。

DDNSを使う

IPv4の時と同じ戦法で、DDNSを利用してAAAAレコードを書き換える。

IPv6のDDNSは「OPEN IPv6 ダイナミック DNS for フレッツ・光ネクスト」が定番っぽい?

既存のドメインと合わせるにはCNAMEレコードを使う必要があり、それをするとCNAMEの「他のレコードを同時に使用できない」という制約が効いてくる(参考:CNAME を巡る 2/3 のジレンマ - 鷲ノ巣)

DDNS発行のドメインで構わないなら、もしくはメール鯖なんかを建てないなら、悪くない方法かと思う。

個人的にCNAMEは1回の名前解決でCNAMEそのもの->CNAME先と2回のクエリを飛ばさないといけないので好きではない。

ルータのパケットフィルタ設定を書き換える必要があるのはお忘れなく♡

Route53を使う(書き換え)

小銭投げ!!

Amazon Route53の機能を駆使してどうにかする戦法、1つめ。

Route53の提供しているAPIを利用して、変動を検知した際にAAAAレコードの中身を書き換える、という訳だ。

要はRoute53でDDNSを作ったような感じかな?

ルータのパケットフィルタ設定を書き換える必要があるのはお忘れなく♡(2回目)

Route53を使う(切り離し)

ルータのパケットフィルタ設定が書き換えられそうにないので考えたもう一つの方法。

Route53のヘルスチェックやAPIを利用して、変動が起こった際にAAAAレコードを返さないようにする(切り離す)

こうすることで、クライアントにはAレコードだけを返し、最初からv4で接続させるようにする。

これでIPv6/IPv4フォールバックの遅延問題をクリア出来る、その後管理者が確認してv6アドレスを再度有効にする。

完全自動化とはいかないが、悪くない方法だと思う。

ダチョウアルゴリズム

そもそもこの「変動」はあまり頻繁に発生するものではない。(数ヶ月に一回程度?)

数ヶ月の内の数時間(最悪でも自分が寝て起きるまでの半日)くらいのダウンは仕方ないとして諦めるのがこの手法。

ご飯を食べて、トイレに行って、ゲームを一通り楽しんだうえで、変動に合わせて設定を変更する作業を行う。(手動で、ね。)

諦めた際に影響があるのはv6で接続しているユーザ、v4接続のユーザには問題がない。

ノーコスト、これが最大のメリット、DNSにAとAAAAを両方登録しておけば完了。

あまり可用性を重要としていないサーバ、もしくはクライアントにIPv6/IPv4フォールバックでの遅延がないならば、ふざけているように見えて意外と有力候補

ただしv6の普及が進むにつれてダウン中に接続できないユーザが増えていく、という問題は当然ながらにある。(その頃にはとっくに完全固定になっているかも知れないが)

まとめ

まとめるとこう

  • プロバイダを変更/追加契約しても良い->固定プレフィックスを出してくれる所に移行
  • DNSを変えても良い->Route53で書き換え/切り離しを実現させる
  • メールサーバとかなくても良い->DDNS+CNAME
  • なにもしたくない->ダチョウアルゴリズム
  • 寝てたい->v6対応は行わず、NTTが固定になるのを寝て待つ

この事を分かりやすく説明すると「IPv6に対応すると却って可用性が落ちる」ということになる。

v6だとv4+固定IPで当たり前に出来ていたことが出来ないので、可用性が落ちる要因が増える。

加えて、殆どのIPv6クライアントは同時にv4にも接続する仕組みを持つため、サーバとしてはv4だけでも接続出来てしまう。(ちなみにこんな話も:さくらのVPS、標準OSイメージの仕様変更のご連絡 (IPv6設定デフォルト無効化) - さくらのVPSニュース)

「IPv6に対応しない」方がコストも掛からず、難しいことも考えずに済むという本末転倒で皮肉な感じの話

サーバが対応しないと意味がない「インターネット」でこれはどうか、って気がする。

固定IPv6なプロバイダ

固定IPv6のプロバイダ、IPv6自体があまり普及していない事も相まって選択肢が殆どない。

どうやら個人向けで固定IPv6を謳っているのは現状インターリンクだけ?

ただしインターリンクも長期間接続がないと変動する事があるらしい、これは長期間「接続がないと」なのでサーバには無関係な話だね。

インターリンクにもIPoE接続のZOOT Nativeとやらがあるらしいので、申し込み時は間違えないように注意、PPPoEで固定なのはZOOT Nextの方

インターリンクはサーバ向けのオプションが多くて個人的に少し気になっている。

法人契約が可能ならば、IIJやNURO Bizが固定を謳っている。(もちろん両方そこそこいいお値段する)

IIJはIPv6専用で、要らないv4アドレスが付いてこないので既存のIPv4環境に追加で入れるのには良いかも?(逆に言えば、v4も欲しい時には不都合がある)

NUROの方は「移転や局舎の変更があった場合、固定IPv6アドレスは変更されます。」なんて但し書きがある、これは事務所を引っ越ししたら……みたいな意味かな?

法人プランである以上、NTT的な勝手に変わる奴ではないと思う(思いたい)けど、どうなんだろう?(誰か知ってたら教えて)

また、NUROでは帯域保証が付いている。

IIJではWhois情報が契約時の名義で公開されるみたいなので、匿名が良い人にはちょっと不都合かも?NUROでどうなるかは不明。

各プロバイダのサイトは以下の通り。

余談:ルーターのデフォルト設定が危ない?

今回のような「NTT+IPv6(IPoE)」の場合にルータのデフォルト設定が「クソ危ない」事がある。

このような半固定状態でユーザーから「VPN繋がらないんですけど?」とか言われるのが嫌だったのか、NTTから貸し出されるルータはデフォルト設定で「NGNで折り返したパケットを全て素通りさせる設定」になっている。

どういうことかと言うと、NTT西なら西、東なら東の「他の加入者」から飛んできたパケットはルータを素通りする(西と東でのパケットは遮断されるっぽい?)

なので、同じNGNに居る「悪い奴」がポートスキャンして攻撃したり出来るわけだ(相手に悪意がなくても、感染したマルウェアがこっちを狙ってくるとか)

対策としては、ルータの設定画面に入り、「IPv6パケットフィルタ設定」にある「IPv6セキュリティのレベル」を「高度」にすればNGN内からのパケットも遮断できる。

基本的に「高度」にして困る事はないので、明確な理由がない限りは遮断しておいた方が安全だと思う。

(ちなみに、iptablesはIPv6の場合ip6tablesになり、別物扱いなのでこっちはこっちで遮断しておかないとポート露出狂になる)

ゆるぼ

うちはルータや電話の関係で色々と詰んだ、プロバイダかDNSを変えるしかなさそう?

NTT側の仕様なのにそれの対策にこちらがお金を出すというのは気に入らないんだけど……

個人的にはRoute53で変動時にAAAAを切り離すのが最小の変更と出費で済んでベストっぽい、という結果になった

将来的には固定になるんだろうか?未来永劫この半固定とかいういまいちな仕組みのまま提供するとかごめんだ。

これはあれですね、「解決策ゆるぼ」って奴ですね。

 - サーバ運営