石橋を叩いて壊すページ

IPoEで自宅サーバを公開してスマホからアクセスする方法

以前から、自宅に自分専用サーバを立てて出先からスマホでアクセスしていたのだが、IPoEに切り替えたところ(当然ながら)アクセスできなくなった。
PPPoE時代とはだいぶ考え方が違うようで設定しなおしで詰まったので備忘録がてら書いておく。
なお、Webサーバ自体は既に稼働していて、LAN内では支障なくアクセスできている状態とする。
また、自宅から外部へは既にIPv6でアクセスできているものとする。
IPv6でアクセスできているかはtest-ipv6.comとか見るとわかる。

外部からLAN内にアクセスできるようにするのは、いうなればわざわざ自分でセキュリティホールを開けるようなものなので、十分に注意しなければならない。

スマホをIPv6接続させる

IPv6での通信はアクセス元とアクセス先が双方ともIPv6である必要がある。スマホから自宅サーバへIPv6アクセスしたいなら、スマホもIPv6でなければならない。
NTTドコモの場合、2017年以降発売の機種で、かつXi(LTE、4G)または5G契約の場合はIPv6に対応しているらしい。
スマホがIPv6かどうかを調べるには、LTE以上のアンテナピクトが立った状態で、上記したtest-ipv6.comにアクセスしてみよう。
ただし、スマホをWiFiに接続したままテストしてもWiFiがIPv6かどうかの確認にしかならないので、いつでもどこからでも自宅サーバにアクセスできるようにするには、WiFiを切ってパケット網から接続確認をしないと意味がない点に注意。

もしIPv6に対応しているはずのスマホで、IPv4通信をしてしまっている場合は、設定の変更が必要かもしれない。
(要注意!設定の仕方を間違えると通信自体不可能になるので、失敗したとき元に戻せるよう現在の設定をよく把握しておき、不安を感じたら速やかに元に戻すこと。)

スマホの設定画面を開き、データ通信→モバイルネットワーク→アクセスポイント→(アクセスポイントを選択)→プロトコルの順に画面を進んで現在の設定を確認する。
現在の設定がIPv4固定になっているなら、IPv4/IPv6両方可に変更してみよう。
設定の変更後、変更を有効にするためスマホを再起動するか一度機内モードにしてから解除することで、パケット網との接続をやり直すことができる。
LTE以上のアンテナピクトが立ったら同上の方法でスマホがIPv6になったかを調べよう。

2022/1/8追記:
2021年11月発売のAQUOS sense6(SIMフリー版)を買ったのだが、これほど新しい機種においてもなお、プリインストールされているアクセスポイント設定が軒並みIPv4のみの設定になっていた。
このためIPv6が必要なのであれば、最近のスマホだから放っておいてもIPv6だろうと油断せず一度上記の確認をしてみることをお勧めする。
本機種の場合、設定画面は設定→ネットワークとインターネット→モバイルネットワーク→詳細設定→アクセスポイント名→(アクセスポイントを選択)→APNプロトコル、であった。
また、プロトコル変更後に画面右上の「…」から「保存」を選ばないと保存されない(保存するか聞かれもしない)落とし穴があったので注意したい。
なおiijmioの場合、APN設定でIPv4/IPv6が使用可能かについてはIPv6に関する案内ページの「サービス詳細情報」のリンク先の契約者専用画面で確認できる。
端末に割り振られたIPアドレスは設定→デバイス情報の画面で確認できる。

自宅サーバのIPを調べる

サーバがWindowsの場合、「ipconfig」コマンドを叩くと「IPv6アドレス」を知ることが出来る。
「一時IPv6~」や「リンクローカルIPv6~」のように飾り言葉のついていないほうの「IPv6アドレス」を見る。
(先ほどのtest-ipv6.comで「あなたのIPアドレスは~です」などと表示されるのは一時IPv6のほうである。これは時間で変動するので、サーバへのアクセス用途には向かない。)
Linuxの場合は「ifconfig」コマンドで同様の情報が得られる。
調べたIPv6アドレスは後で使うので控えておく。

IPv4時代には、ルータの外と中でIPアドレスの範囲が違っていてルータで変換が行われていたが、IPv6ではこれが基本的にはないため、サーバに割り当てられているIPv6アドレスはそのまま外部からの接続先アドレスである。ポート変換もないので、サーバが待ち受けているポート番号に向かって直接外部から接続することになる。

もし自宅にWiFiがあるなら、スマホをWiFiに繋いでLAN内でIPv6できちんとつながるか見ておこう。
先ほど調べたIPv6アドレスを角括弧 [ ] で囲み、「http://[2001:db8::1]/」のようなURLの形にして、ブラウザでアクセスしてみよう。ポート番号も指定したい場合は「http://[2001:db8::1]:8080/」のように角括弧の外側につける。
もし繋がったなら、とりあえずLAN内でのIPv6通信はテスト成功である。成功したURLはブックマークしておこう。
上記した通り、IPv6ではそのアドレスがそのまま外部からも使えるので、あとはルータに穴を開ければそのブックマークはWiFiの外からでも有効である。
この段階でWebサーバにアクセスできない場合は、WiFiをONにし忘れているか、httpサーバがIPv6ポートを待ち受けていないなど何か設定を間違えていると思われるので確認しよう。

ルータに穴をあける

家庭用のルータは普通、外部からのアクセスは遮断するようになっている。そこで、特定のIPへの通信だけは許可されるよう設定を変更しよう。
ルータの設定画面の呼び出し方は機種によるので、説明書を読むか、ルータの型番+「設定画面」などでGoogleで検索すれば見つけられるはずである。

設定画面が開いたら、IPv6のパケットフィルタ設定を開き、「追加」ボタンを押し、通過させたいパケットの情報の設定を追加する。
セキュリティの都合上、穴は出来る限り狭くしておくに限る。
WebサーバならプロトコルはTCPが通ればいいだろう。ポート番号も絞り込んでおきたい。


我が家の場合はこうなった(IPとポートはモザイク。)ポート80ではhttp使ってます感が丸出しなので、5桁の数字を適当に使用し用途を気持ちだけ隠匿。

サーバ自体がファイアウォール機能を持つ場合は、そちらの穴あけも必要である。

外部から接続する

設定が済んだら実際にスマホから接続してみよう。
まずはスマホが自宅WiFiが繋がっているならこれを切る。(しつこいが、WiFi経由でLAN内で通信が完結するのと、パケット網からルータを越えて自宅サーバに通信できるのとは話が別である。)
上記でブックマークしておいたURLにアクセスし、接続できるか確認する。なおGoogle Chromeの場合、接続できなかった場合は前回接続時のキャッシュを表示して間に合わせてしまうことがある(?)ため、アクセス出来たかのように勘違いしてしまうことがある。
このためアクセスできたと思っても、念のため再読み込みボタンを押してみたり、適当なリンクを踏んで別のページも表示できるか確かめよう。

自分が詰まったのは、主には「スマホをIPv6にする」ことだった。
後から考えればおかしな話なのだが、スマホにもIPアドレスがあるという実感がなかったせいか完全に盲点になっていて、IPv4から必死にアクセスしようとした挙句、ルータの穴開けがミスってるんだろうとそちらばかり見直していた。思い込みって怖いね。

この記事を評価

この記事にコメント

  1. ...

【この記事にコメント】
お名前:
コメント:

Menu