• Port Scanner in Vain

筆者は、仕事で使う資料などは、すべてクラウド側に保存し、どこからでも、どのマシンからでもアクセスができるようにしている。しかし、場合によっては、どうしてもローカルに置いておかないとならない資料もある。また、注意したとしても、作業などで使ったファイルを、クラウドに上げ忘れることもある。

こうしたときに、外出先から自宅のマシンにアクセスができると便利だ。自宅のネットワークをリモートからアクセス可能にする方法には、いくつもあり、インターネットが利用可能になった1990年台中頃から、ずっと「技術課題」だった。モバイルでの「接続手段」と自宅での「サーバー構築」をどうするかが問題だった。

いまでは、一般家庭でもインターネット常時接続が可能で、多くのサービスはクラウド側で済ませることができる。携帯電話のインターネット接続性能は向上し続け、4G/5Gの接続機能を持つWindowsマシンも少なくない。ただ、ここまで来るには、ずいぶんと長い道のりがあり、筆者宅には、いまや使うこともできない通信機器やモバイルデバイスが大量に残る。

最近では、インターネット接続サービスがIPv6ベースとなりつつある。IPv6が使えると、インターネットアクセスは簡単になる。そもそも、IPv6は、多数のデバイスにすべてIPv6アドレス(128bitある)を、割り当てることを想定して開発されたものだからだ。たとえば、以前紹介したSSHなら、ルーターのパケットフィルターなどでポート22を通過できるようにするだけで、IPv6を使って、目的のマシンに接続できる。これがIPv4だと、ポートフォワードやDynamic DNSなどの設定が面倒だった。

サイトに侵入しようと、著名なポート番号に接続しようとするプログラム(ポートスキャナー)が使われることがあるため、大半のルーターは外部からの接続パケットを全て拒否するのが初期設定である。SSHでは、正しいキー(あるいはパスワード)がない限りアクセスは困難であるため、ルーターのフィルタ条件を緩和するだけで、IPv6を使ったSSHサーバーへのアクセスが可能になる。

やり方は、ルーターにより異なるが、TCPに対して、任意のアドレス/ポートから、SSHサーバーのIPv6アドレス/ポート22へのパケット通過を許可するだけだ。なお、Windowsファイアウォールに関しては、OPEN SSHサーバーをインストールしたときに自動的に設定されているので触る必要はない。

一般にIPv6ベースのインターネット・アクセスサービスでは、プロバイダ側は128bitのIPv6アドレスの前半部分になる「プリフィックス」を割り当て、後半部分は、サイト側の管理に任せる。筆者の利用しているフレッツ光/OCNでは、64 bitのプレフィックスが割り当てられ、ここから作られるIPv6アドレスは、インターネットアクセスにそのまま使える「グローバルアドレス」だ。サービスとしてはプリフィックス割り当ては固定とは謳っていないが、ルーターを再起動した程度では、プレフィックスは変わらないし、ずっと調べたわけではないが、数週間の範囲では変更はなく、頻繁には変わらないと考えてよさそうだ。

IPv6のホストアドレス割り当てには、一定の手順「StateLess Address Auto Configuration(SLAAC)」が定義されている。これを使うとホストの情報を元にIPv6アドレスを決定することができる。このため、SLAACを使うとプリフィックスが変わらない限り、ホストのIPv6アドレスも一定のものになる。

ただ、セキュリティやプライバシー問題もあるため、最近では、乱数を元に作られた「一時(匿名)IPv6アドレス」を使って、インターネット側へのアクセスを行うことが多い。また、アドレス割り当てなどの基本的な動作のためすべてのIPv6ノードは、リンクローカルアドレスを持つ。Windowsでは、最低でも3つのIPv6アドレスが、ネットワークアダプタ(ネットワーク・インターフェース)に割り当てられている。このため、「本当のIPv6アドレス」を調べるのはちょっと面倒だ。見るだけでいいのなら、ipconfig.exeや設定 ⇒ ネットワークとインターネット ⇒ プロパティなどを使えばよい。しかし、データとしてIPv6アドレスを得られると、これを自動でHostsファイルに追加して、これを外出で使うマシンに配布するなんてことができる。それには、


Get-NetIPAddress -AddressFamily IPv6 -SuffixOrigin link -PrefixOrigin RouterAdvertisement | select IPv6Address

とする。IPv6アドレスが得られたら、後ろにスペースを置き、適当な名前(現実のドメイン名と重複しなければ何でもよい)を付けて、Hostsファイル(C:\Windows\System32\drivers\etc\hosts)に入れておく。Hostsファイルを設定したマシンでは、名前でIPアドレスを指定できるようになる。外出先からのアクセスを行うには、マシンをスリープさせない設定など、いくつかの準備が必要である。また、ホットスポットサービスなどでは、IPv6のルーティングができないところもある。いきなりぶっつけ本番ではうまくいかないことが多い。「平時」に、必要なものを揃え、接続できるところまで試しておくべきだろう。

今回のタイトルネタは、コードウェイナー・スミスの、“Scanners Life in Vain”(1950。邦題スキャナーに生きがいはない)である。コードウェイナー・スミスは、国内では「人類補完機構」シリーズの作者として知られているが、「鼠と竜のゲーム」、「スズダル中佐の犯罪と栄光」など「猫SF」の作家だと個人的には思っている。