1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

自宅のグローバルIPアドレスを外出先で知る

Last updated at Posted at 2024-02-10

自宅のPCにどこからでもWindows RDP(リモートデスクトップ)接続できるよう、利用しているインターネットサービスプロバイダーの固定IPアドレスオプションを契約していたのですが、この料金がこの度べらぼうに値上がりしてしまったので、やむなく契約を解除しました。

するとRDP接続はできなくなるのかというと、そんなことはなくて、グローバルIPアドレスさえわかれば接続できるわけです。PCがWOL (Wake On LAN)に対応していれば、外出先からPCの電源を入れることもできます。

まずは自宅のPC内で現在のグローバルIPアドレスを取得する方法です。方法はいろいろありますが、私はCygwinで下記のコマンドを実行して取得する方法をとりました。

dig myip.opendns.com @208.67.222.222 +short

digコマンドはbindをインストールすれば利用できます。

さて、上記コマンドで得られたグローバルIPアドレスを外出先で知ることができるよう、次の2つの方法を考えました。

  1. グローバルIPをテキストファイルに書き込み、クラウドで同期する
  2. メール送信する

クラウドで同期

Windowsのタスクスケジューラーで、以下のbashスクリプトがWindows起動時に実行されるように設定します。

#!/bin/bash
dig myip.opendns.com @208.67.222.222 +short > ~/OneDrive/GlobalIP.txt

これでWindows起動時に得られたグローバルIPアドレスが~/OneDrive/GlobnalIP.txtに書き込まれます。~/OneDriveがOneDriveで同期されるようになっていれば、外出先からOneDriveに同期されたGlobalIP.txtファイルを見ればいいわけです。

メール送信

以下のPowerShellスクリプトを用意します。

$MyName = hostname
$MyIP = dig myip.opendns.com "@208.67.222.222" +short
$From = "起動通知 <送信者メールアドレス>"
$SmtpServer = "メール送信サーバー"
$Port = ポート番号
$User = "メールアカウント名"
$Pass = "メールアカウントのパスワード"
$SMTPClient=New-Object Net.Mail.SmtpClient($SMTPServer,$Port)
$SMTPClient.EnableSsl=$false
$SMTPClient.Credentials=New-Object Net.NetworkCredential($User,$Pass)
$To = "宛先メールアドレス"
$Subject = "$MyName"
$Body = "$MyIP"
$Mail=New-Object Net.Mail.MailMessage($From,$To,$Subject,$Body)
$SMTPClient.Send($Mail)

$SMTPClientの諸設定は、使用するSMTPサーバーに応じて変更してください。

そしてWindowsのタスクスケジューラーで、このスクリプトがWindows起動時に実行されるように設定します。プログラム/スクリプトにはpwsh.exeの完全パスを設定し、引数には上記スクリプトの完全パスを設定します。

この方法では、メールアカウントのパスワードをスクリプト内に平文で書くことになるので、セキュリティー的にはちょっと難があります。

スクリプト実行タイミング

グローバルIPアドレスはルーターとISPとの接続が確立したときに決まり、通常、その後その接続が切られるまでは変化しないと思うので、Windowsを起動するたびに毎回実行する必要は無いのですが、負荷的にはぜんぜん大したことないので、まあいいかなと。ルーターを再起動したりするとアドレスが変わってしまうので、そのときは上記のスクリプトを再度実行してやらなければなりません。それを忘れそうで心配なら、タスクスケジューラーで定期的に実行されるよう設定するのもありだと思います。

グローバルIPアドレスが決まったタイミング、すなわち、ルーターとISPとの接続が確立したときに、それをトリガーとしてスクリプトを実行できるといいのですが、そんな方法は(少なくとも私の環境では)ありません。もしいい方法があれば教えてください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?