2021年9月5日日曜日

IPv6への移行(2):「自宅サーバをどうするか」問題

IPv6 での接続環境への移行.その2.

前回,とりあえず IPv4 over IPv6 での接続はできるようになった.本当の問題はここからである.

これまで自宅 LAN 内にサーバがあって外からつないでいろいろなことをやっていた.それは DynDNS とルータのポートフォワーディングによって成立していたわけである.IPv6 になるとこのポートが問題で,ユーザは割り当てられた IPv6 アドレスから機械的に決定される番号をもつ 240 個のポートしか使えない.問題は使える個数ではなくポート番号が機械的に決まるというところで (当然デフォルトで多用されるようなポート番号のある範囲からはかけ離れている),http 用の 80 番を LAN の内側のサーバへフォワードするというのができなくなる.つまり,外から見たときの 80 番ポートを自分用に使えない.理由は省略.なお,使えるポート番号自体は IPv6 アドレスから計算してくれるサイトもあるし,後述する現用ルータでは接続に成功すると使えるポート番号を表示してくれる.

ということで,おうちサーバの自由度が下がってしまうので,今後もおうちサーバでやるべきことなどを少し考え直してみた.

まずメールサーバ.

これはもう止めよう.ここで運用していてまだ活きている ML は,去年までには google group に移行済みなのでとくに困らない.つまり POP とか SMTP とかのポートのフォワーディングはしない.ML 以外に会員制サイトのアカウント登録用の個人アドレスとして使ってたのもないわけじゃないけど,そういうのはアカウントごと使えなくても困らないのばかりだし,必要ならそのときに再登録すればいいだろう.

次に SSH.

これはいる.ただし,管理用と外からおうち NAS をマウントするために sshfs を使うためなので,ポート番号は自分さえわかっていればいい.つまりフォワーディングさえできれば外から見た番号は 22 とかである必然性はない.

そしてWeb サーバ .

これはもう止めてもいいような気もしている.のだが,なかなかそうもいかない事情もある.なので,外から見て 80 でつながるようにする方法があるなら考えたい.


ということで,まずポートフォワーディングができるかどうか.暫定的に使っているアイオーのルータでは IPv4 over IPv6 だとポートフォワードのメニューが出なくなる.IPv4 PPPoE にするとメニューは出て設定も書き込めるので先にそっちで設定しておいても IPv6 で接続されるときは無効になってしまうようで,このルータを使い続けるのは難しいようだ.

ということで,ググってみると,Buffalo のルータは条件付きながら IPv6 でもフォワーディングできるっぽいので,買ってみることに.無線はいらないというか,すぐにいろいろと規格が変わるので,無線関係と有線関係は分けておきたい.しかし,今や有線ルータは安価な新しいのは出ていないので,IPv6 に対応した無線ルータの安いのを買って無線を殺して使うことに.

買ったのは WSR-1166DHPL2/N.3,000 円をちょっとだけオーバ.まず IPv6 による外との接続だが,ルータによる自動検出・接続では何度やっても途中で失敗するので,そこまででわかった情報をもとに手動で接続方法を選んでやることで成功 (「OCNバーチャルコネクト」で接続).これで自宅から外を見に行くのは安定して高速な回線状態ということになった.ここまでは大変めでたい.

次はこのルータでポートフォワーディングが可能かどうかの確認.なんせ,IPv6 対応といってもいろいろと接続方式があるようで,うちのがどうつながっているのか,どこを見てもさっぱり要領を得ない.ルータの説明も,できるばあいもできない場合もあるっぽい感じで,とにかくやってみないとわからない感じ.ということで設定画面を見てみると,使えるポートのリストが表示され,フォワーディングの設定メニューも出ている.これはいけるのかもしれないということで,使えるポートとして出ているうちの一つをおうちサーバの 80 番にフォワーディングするように設定.この状態で LTE 回線に接続した状態のスマホ を使って外から IP:port の形式で接続できることを確認したところ,ちゃんと表示できた.さらに IP アドレスを DynDNS で取っている FQDN にしても接続できる (最初に IPv6 で接続したとき,dyn.com で手動で新アドレスに更新しておいたが,IPv6 まで含めた ddclient による自動更新については調査中).もちろんポート番号を指定しなければ接続できないのはいうまでもない.

以上をまとめる.

  1. ルータで使える外からつなげるポートを一つ選び (接続に依存.以下,67890 を使うものとして例を示す),LAN 上のおうちサーバの http ポート (今回は 80) にフォワーディングされるようルータを設定する.
  2. (例なので実在しないアドレスだが) yjo.domain.net を DynDNS で用意し,自宅の IP アドレス (ルータにプロバイダが振ったアドレス) と紐付ける.
  3. yjo.domain.net:67890 で「外部から」接続できること,yjo.domain.net ではだめなことを確認する.

FQDN による接続は内部 LAN に接続したクライアントからはうまくいかないが,これは当面諦めてローカル IP アドレスで接続することにして先に進む.

ということで,ここからが問題.目標としては,yjo.domain.net だけで外からつなげるようにしたい.なお,domain.net というのは DynDNS で実際に使用可能な名前ではなく,記事上の仮の名前である.

これをおうち LAN 側からの設定だけで何とかしようとしても難しいようだ.ググるといろいろと実例は見つかるが,高機能ルータが必要だったりとなかなかハードルが高い.

少し考えた結果,次のような方法を思いついた.DynDNS には WebHop という機能がある.これは DynDNS 側で指定した FQDN にアクセスすると,別のサーバへのアクセスに転送してくれる機能.これでデフォルトポート宛に来た接続要求をポート番号まで込みにした別 URL に飛ばしてやればよさそうである.ところが,同じ FQDN に対して WebHop 設定はできないので (考えてみれば当たり前) もう一捻り必要で,標準ポート用の FQDN と,実ポート用の FQDN を別に用意すればよいのではないか.

ということで DynDNS だが,現在の契約では 30 個の FQDN を設定できる.現状は一つしか使っていないので,次のようにしてみた.

  1. DynDNS で,実際に動作するサーバ用に yjo2.domain.net を Host として設定.
  2. ddclient も yjo2 の方を自宅向けの FQDN として維持するよう設定を修正.
  3. 同じく DynDNS で,yjo.domain.net に対して WebHop を設定し,飛ばし先を yjo2.domain.net:67890 に設定.

外から yjo.domain.net につなごうとすると,以下のようになるはず.

  • yjo.domain.net にアクセスしようとする
  • DNS は yjo2.domain.net:67890 への転送を指示する (WebHop)
  • yjo2.domain.net は DNS によってルータの外部 IP に展開される
  • ルータでポートフォワーディングされて,内部サーバの 80 番ポートに渡される


図にしてみたが,わかってもらえるだろうか.

これで http://yjo.domain.net/ への接続で内部のサーバとのやりとりが可能になるはず.以下,その確認.

まず 1 の段階で外部ネットワークにつながったクライアント (つまり LTE 接続状態のスマホとか) から yjo2.domain.net:67890 で内側のサーバの httpd にアクセスできることを確認してポートフォワーディングを確認.次に yjo.domain.net でも接続して確認.最初やったときはうまく行かなかったのだが,15分くらい経ったらつながるようになったので,DNS 情報の伝播にある程度の時間がかかる場合があるようだ.

以上でとりあえず web サーバ問題は解決.おうち LAN からは FQDN ではなくローカル IP アドレスでないと見られないのはちょっと不便だが,これ以上手間をかける気力はない.


ssh も同様にルータでフォワーディングを設定してポートまで指定すれば外から接続できることを確認できたので,とりあえずこちらの設定は終了.外から sshfs でつなぎたいので,それは後日具合を見る予定.


(追記)

なぜか職場のネットワークからはアクセスできない.謎.

0 件のコメント:

コメントを投稿