VPN接続先のグローバルIPアドレスをGmailで通知させてみる【(第2弾 第1章)家から実家のファイルサーバを使いたいんじゃ!シリーズ】
時間が空いてしまいましたが今回は「家から実家のファイルサーバを使いたいんじゃ!シリーズ」の第2弾です。
シリーズの概要は以下のリンクをご覧ください。
第二弾の本題であるグローバルIPアドレスをGmailで通知させてるシステムの作成手順をすぐに見たい場合はこちらまで飛ばしてご覧ください。
第一弾の振り返えり
第一弾では、実家で稼働させているファイルサーバの「Hayana」フォルダに物理的に離れている自宅から接続してみようという試みを実施しました。
接続方法は光回線を開通させる際にNTTから貸し出される実家側のホームゲートウェイ(HGW)のVPNサーバ機能を有効化、自宅のPCから実家のグローバルIPアドレスやVPNアカウント情報を入力し実家へVPN接続、その後ファイルサーバのIPアドレスに接続することで実家のファイルサーバに接続しています。
実施手順は以下をご覧ください。
第一弾のみでは、実は一般家庭の場合、一時的にファイルサーバを使えるようにはなりますが不定期で使えなくなってしまいます。
第一弾のみ実施した場合の欠点
第一弾の振り返りで「自宅から実家のグローバルIPアドレスやVPNアカウント情報を入力し実家へVPN接続、その後ファイルサーバのIPアドレスに接続することで実家のファイルサーバに接続」と大まかな手順を記載しましたが、一般家庭の光回線の場合「グローバルIPアドレス」が不定期で勝手に変更されてしまうため、そのまま放置しているといずれはVPN接続が出来なってしまいます。
接続できなくなったら実家に連絡して新しいグローバルIPアドレスを聞いてPCのVPN設定を変更すればいいじゃない!とも思いますが。
接続できなくなったらからって毎回毎回、聞くのも、、、ねぇ?
この欠点を埋めるためにも第二弾ではグローバルIPアドレスを通知させるシステムを作ってみます。
また、グローバルIPアドレスが変更されて困るのはVPN接続先となる「実家」のグローバルIPアドレスです。
自宅のグローバルIPアドレスは関係ないので、通知システムは実家側のサーバに作成しましょう。
ってか、まずグローバルIPアドレスって何??
ここを説明している記事はネット上にたくさん転がっているので簡単に説明します。
ネットワークにはホームネットワークとグローバルネットワーク(パブリックネットワークとも言う)の2種類のネットワークがあります。
以下の図の通り家の中で構成されているネットワークが「ホームネットワーク(ローカルネットワーク)」。
家の外にあるネットワークがグローバルネットワーク(パブリックネットワーク)といいます。厳密には違いますが、グローバルネットワークはインターネットと思ってもらってった方がわかりやすいかと思います。
厳密な話は、すみませんがググってください🙏
この2つのネットワークはホームゲートウェイが区切っています。
Wi-FiやLANケーブルで接続するのがホームネットワークで、光ケーブルで接続されているのがグローバルネットワークです。
そして、ホームネットワークやグローバルネットワークにはそれぞれネットワークの住所を表現するIPアドレスというものが振られています。
ホームネットワーク用のIPアドレスは「ローカルIPアドレス」
グローバルネットワーク用のIPアドレスは「グローバルIPアドレス」
スマホやPCなどをWi-Fiに接続するとホームネットワーク内でホームゲートウェイ(ルータ)からローカルIPアドレスが割り当てられます。
グローバルIPアドレスは一軒(厳密には1契約)につき一つがホームゲートウェイに割り当てられます。
郵便物に言い換えると、、、
東京都千代田区x-x-x というような住所に当たる部分がグローバルIPアドレスで、
宛先の名前(はやな)がローカルIPアドレスに当たります。
グローバルIPアドレスが変更されてしまうタイミング
グローバルIPアドレスが住所と唯一異なる特徴を持っているのは「不定期的に変更されてしまう」ということです。
グローバルIPアドレスはホームゲートウェイが光回線に接続されるタイミングで契約しているインターネットサービスプロバイダー(フレッツ光、OCN光など)から自動で割り当てられます。
そのため以下のような場合、グローバルIPアドレスが変更されてしまいます。
・ホームゲートウェイが再起動
・光ケーブルを光コンセントから一度引き抜き、再度差し込んだタイミング
など
ただ、以上のようなことをしていないのにも関わらず勝手に変更されてしまうタイミングというのもあります。
それはホームゲートウェイのミドルウェア更新です。この更新を行う際はホームゲートウェイの再起動もセットで行われるので勝手に変更されてしまいます。
だからといって、このミドルウェア自動更新を停止してしまうとセキュリティ上良くありません。
3か月に1回あるかないか程度の更新頻度なので受け入れるしかありません。
グローバルIPアドレスを固定化する方法はある
ホームゲートウェイを再起動するたびにグローバルIPアドレスが変更されるのがホントに嫌だという場合、固定化する方法はあります。
しかし有料で、契約しているインターネットサービスプロバイダの料金表を見ると安くても毎月7000円から1万円程かかります。
詳しくは契約しているインターネットプロバイダの固定IPアドレスに関するの記事をご覧ください。
グローバルIPアドレス変更通知メールを作ってみよう!
さて、ここからが本題です!
グローバルIPアドレスを固定化して安定したVPN環境を作るのも良いですが、そこまで頻度の多くないミドルウェア更新の対策のために毎月お金を払うのも馬鹿馬鹿しいかなとも思います。
たまに来るなら、変更されたタイミングで新しいグローバルIPアドレスを通知してもらいましょう。
今回は通知システムの流れを一つずつ実施できるかを確認していきます。
グローバルIPアドレス通知システムの大まかな流れ
今回は実家側のファイルサーバを使って通知システムを作成します。
流れは以下の通りです。
1,毎分、現在のグローバルIPアドレスを取得
2,現在のIPアドレスと「1,」で取得したIPアドレスを比較
3,もし変更されていたらGmailを使って自動的に新しいグローバルIPアドレスを送信する
1番の毎分取得する部分についてはCronを使い、2番はシェルスクリプトを使って比較するので、次の記事で紹介します。
当記事では
「グローバルIPアドレスが取得するための環境構築」
「Linuxサーバ上でGmailを送信させるための環境構築」
以上の2つを行っていきます。
ファイルサーバの仕様
OS:Ubuntu(Linux)
ファイルサーバミドルウェア:Samba
sudo権限:使用可能なユーザを保有
準備するもの
・VPN接続先側のネットワーク(実家側)に配置しているLinuxサーバ(今回は元々作成しているファイルサーバを使います。)
・Gmailアカウント(サブアカウントの方が望ましいです。)
では、作成していきます。
通知システム作成手順
VPN経由で対象サーバにSSH接続する
本手順の前提は自宅から実家にあるファイルサーバを操作することです。
なので、まず実家のファイルサーバにSSH経由で接続しましょう。
- 実家にVPN接続する
接続参考ページはこちら - Tera Termなどで接続するサーバのローカルIPアドレスを入力して接続する
ローカルIPアドレスとは実家でそのままファイルサーバに接続しているときに使用しているIPアドレスです。
パターンとして多いのは192.168.xxx.xxxなど
Linuxサーバ内でグローバルIPアドレスを取得する
まず、LinuxサーバからグローバルIPアドレスを取得してみましょう。
curlコマンドを使用しますのでaptコマンドでcurlパッケージをインストールします。
$ sudo apt update
$ sudo apt -y upgrade
$ sudo apt install curl
【取得手順】
curlコマンドで"http://inet-ip.info/“にアクセスします。
$ curl inet-ip.info
xxx.xxx.xxx.xxx
192.168.xxx.xxxのようなIPではなく、バラバラな数字が使われているIPアドレスが返ってきたら成功です。
それがグローバルIPアドレスです。
LinuxサーバからGmailを送付する(sSMTP)
Gmailって実はWindowsのようなGUI画面が無いOSでもメール使えるんですよ!
今回構築する環境はメールを送付することさえできればいいので、メール送信機能が使えるsSMTPというソフトウェア使っていきます。
メール受信などの機能は使えませんが、設定はホントに簡単です。
1,mailutilsパッケージをインストール
まずはmailコマンドを使えるようにするためにmailutilsパッケージをインストールします。
$ sudo apt install mailutils
2,ssmtpをインストール
sSMTPパッケージをインストールします。
$ sudo apt install ssmtp
3,ssmtpの設定ファイルの編集
sSMTPのインストールが完了したら、次はsSMTPの設定ファイル(/etc/ssmtp/ssmtp.conf)を編集してGmailが使えるようにします。
$ sudo vi /etc/ssmtp/ssmtp.conf
/etc/ssmtp/ssmtp.conf
#
# Config file for sSMTP sendmail
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
root=Gmailのメールアドレス
# The place where the mail goes. The actual machine name is required no
# MX records are consulted. Commonly mailhosts are named mail.domain.com
mailhub=smtp.gmail.com:587
# Where will the mail seem to come from?
#rewriteDomain=
# The full hostname
hostname=ubuntu
# Are users allowed to set their own From: address?
# YES - Allow the user to specify their own From: address
# NO - Use the system generated From: address
#FromLineOverride=YES
AuthUser=Gmailのメールアドレス
AuthPass=Gmailのパスワード
UseSTARTTLS=YES
上記の様にsSMTP設定ファイルを編集します。以下編集ポイントをまとめています。
- root=postmaster
“postmaster"の部分を使用したいGmailのメールアドレスに編集します。
また、"root="のままだとmailコマンドを使ってメール送信をする際にsudoをつける必要があるのでrootではなく、自身のLinuxユーザ名に変更すると今後が楽です。
例:ユーザ名がhayanaの場合は"hayana=Gmailのメールアドレス" - ailhub=mail
“mail"の部分をGmailのsmtpサーバである"smtp.gmail.com:587″に編集します。 - hostname=
ここは特に変更する必要はありません。
次は設定ファイルに追記するポイントです。
- AuthUser=Gmailのメールアドレス
- AuthPass=Gmailのパスワード
- UseSTARTTLS=YES
4,Googleアカウントの設定を変更
使用するGoogleアカウントのセキュリティ設定を行います。
- スマートフォンでもパソコンでもいいので、今回使用するGoogle検索エンジンにGoogleアカウント(Gmailアカウント)にログインします。
- 右上の「アカウントアイコン」 > 「Googleアカウントを管理」の順に選択します。
- 「セキュリティ」を選択します。
- 画面を下にスクロールし「安全性の低いアプリにアクセス」を選択します。
- 無効になっている場合は、「有効」に変更します。
これでアカウント設定は完了です。
※2022年5月30日に「安全性の低いアプリにアクセス」が閉鎖されました。
代案としてLINE Notifyを利用した通知システムが比較的簡単に導入できることが出来ますので、是非お試しください。
5,メール送信確認
メールを送信する際はmailコマンドを使います。
/etc/ssmtp/ssmtp.confを"root="で設定している場合はコマンドの前にsudoをつけます。
sudo echo "本文" | mail -s 件名 宛先メールアドレス
例
sudo echo 'honbundesu' | mail -s test_title xxxx@gmail.com
といったような記述になります。
もし、メールが送信されずに"cannot send message: Process exited with a non–zero status“といったようなエラーが出たら以下のことを確認してください。
- Gmailアカウントのセキュリティで「安全性の低いアプリにアクセス」が有効化されているか
- /etc/ssmtp/ssmtp.confファイルの設定が間違っていないか
特に確認するべきは場所はパスワードです。また2段階認証が設定されているGoogleアカウントはアプリパスワードの取得が必要となります。 - ファイヤーウォールの587ポートが解放されているか
さて、届いたメールを確認してみましょう。
ちゃんと届きました!
日本語も文字化け無く使えました!
取得したグローバルIPアドレスをGmailで送信する
次が土台作り最後の作業です!
curlコマンドで取得したグローバルIPアドレスをメールでそのまま送信してみましょう。
といっても以下のようにechoコマンドで作成した本文の代わりに、curlコマンドで取得したIPアドレスを「|(パイプ)」でmailコマンドに渡せばいいだけです。
curl -s inet-ip.info | mail -s 新しいグローバルIPです 送信先メールアドレス
curlコマンドのオプションに「-s」を使っていますが、これはサイレントオプションです。
これが無いとコマンド実行時に以下のようなプログレスメータが標準出力されます。
次回行うcron設定では定期実行するたびに送信用に設定したGmailにプログレスメータが飛んでくるので「-s」は必須です。
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 15 100 15 0 0 151 0 --:--:-- --:--:-- --:--:-- 151
話がそれましたが、送信できたか確認してみましょう。
無事に送信されました。
これでグローバルIPアドレス更新通知システムの土台作りは完成しました。
次回は、実際に通知するためのシステムを作成していきます。
ディスカッション
コメント一覧
まだ、コメントがありません