通りには美しい晴れた日があるので、ほとんどの時間を家の外で広いチャンネルで過ごし、公園のどこかでネットブックと4gモデムを使い始めました。 これは間違いなく私の健康には良いのですが、それでも大きなファイルをダウンロードしたいので、外部からホームネットワークへのアクセスを整理するためのオプションを探す必要がありました。 私のプロバイダーは、ユーザーに
動的なホワイト IPv4アドレスを提供することにすぐに注意します(残念ながら、IPv6を運用すると、そのような歪みの必要性は自動的になくなります)。
私の前のタスク:
- ネットワーク上のすべてのコンピューターへのアクセス
- すべてのプロトコルのサポート
- 使いやすさ
私のホームネットワークの構造について一言:
コンピューター(Win 7 + Win XP)->ルーター(ZyXEL Keenetic 4G(ファームウェアv2.00))-> L2TP VPN->インターネット。
この種のアクセスを整理するために、いくつかのオプションが利用可能です。
- LogMeIn HamachiのようなVPN
- 動的DNSサービス+ルーターのポート転送
- 自転車:外部IP転送+ルーターのポート転送
検討の過程で、最初のオプションは無料ではないため、ほとんどすぐになくなりました。また、ネットワークに追加されたすべてのデバイスへのアクセスのみを許可しますが、これは確かに便利ではありません。
2番目のオプションは、長い検討を重ねた結果、いくつかの欠点が現れました。
- 1台のコンピューターのみへのアクセス
- アクセスはIPにアクセスするのではなく、フレームを介して提供されるため、使用の可能性が大幅に減少します。
- HTTPリダイレクトのみが可能です。これは良くありません
3番目のオプションのみが残ります。つまり、タスクを決定します。
それらを実行するには、まず、現在の外部IPを見つけ、次に外部のどこかに転送し、最後にホームNATを介してパケットを転送する必要があります。 各ルーターが持つ手段で最後のタスクを処理できる場合、最初の2つの処理はより困難になります。
そのため、少し考えてからスクリプトを作成するために、Windows 7/8の組み込みツールであるPowerShellを使用することに決めました。PowerShellはXPまたはVistaにインストールできます。
外部アドレスを取得するために、サイト
myip.ruが使用され 、その出力は正規表現によって理解されました:
$ipsite = (new-object net.webclient).DownloadString("http://myip.ru")
if ($ipsite -cmatch '(?s)([0-9]{1,3}?\.[0-9]{1,3}?\.[0-9]{1,3}?\.[0-9]{1,3}?)') {
$ip = $matches[1]
} else {
Write-Error "Cannot get ip!"; return
}
IPアドレスがわかったので、それを渡す必要があります。 これを行うには、熟考した後、Dropboxを使用することにしました。 しかし、その使用には1つの問題があります。必要なホームネットワークのリソースへのリンクを含むhtmlファイルを作成したかったのですが、Dropboxはロシア(ロシアのIP)から作成されたhtmlを表示しません。 いくつかの検索の後、xhtmlファイルを完全に放棄したことが判明したため、残ったのはテンプレートを元に戻し、スクリプトに追加することだけでした。
スクリプトの最終バージョンは
ここに提示され
ます 。
スクリプトを自動的に実行するには、10分ごとにスクリプトを実行する標準タスクスケジューラを使用します。 ファイルは、パブリックフォルダーまたはそのサブフォルダーに保存する必要があります。
このファイルへのアクセスを簡単にし、長いリンクを記憶しないようにするために、bit.lyを使用して、記憶に残るアドレスでビットマークを作成しました。