2018年1月31日水曜日

【PowerShell】グローバルIPアドレスをメール送信

◆目次
  1. セキュリティソフトでメール送信を除外。
  2. Google設定で安全でないアプリを許可するよう設定。※
  3. PowerShellでメール送信。
  ※Gmailの場合の手順。セキュリティレベルは下がるので注意。また、2段階認証の設定も必要とのこと。自分の場合は何故か不要だった。

◆ダウンロード
GrobalIPMailv0.2.zip
GrobalIPMailv0.1.zip

◆手順
  1. セキュリティソフトでメール送信を除外。(以下AVGの場合)
    1.  タスクバーのAVG(ver17.9.3040)をクリック。
    2. [メニュー]-[設定]-[コンポーネント]-[(メールシールドの)カスタマイズ]の順に選択。
    3. 送信メールをスキャン(SMTP)のチェックを外し、[OK]ボタン-[OK]ボタン。
       
  2. Google設定で安全でないアプリを許可するよう設定。
    1. Chromeを起動。
    2. アドレス欄にgoogle.comと入力。
    3. Chrome右上の:::ボタン(Googleアプリボタン)押下。
    4. [アカウント]を選択。
    5. [端末のアクティビティとセキュリティ イベント]を選択。
    6. [アカウントにアクセスできるアプリ]を選択。
    7. [安全性の低いアプリの許可]を無効から有効に変更。
       
  3. PowerShellでメール送信。
    (上述のzipを使う場合は、同梱のreadme.txtを参照のこと。下記のコードとは別で、タスクスケジューラによる定期処理を行う。)
    1. 後述の簡易コードをファイルに保存。ファイル名はgipmail.ps1。
      その際、[ユーザ名]と[ぱすわーど]は読み替えること。
    2. gipmail.ps1を右クリックし、[PowerShellで実行]を選択。
       
◆簡易コード(gipmail.ps1)
$from = "ユーザ名@gmail.com"
$to = "ユーザ名@gmail.com"
$server = "smtp.gmail.com"
$port = 587
$user = "ユーザ名@gmail.com"
$pass = "ぱすわーど"

curl ipinfo.io | ConvertFrom-Json | sv ret
$ret.ip

$client = New-Object Net.Mail.SmtpClient($server, $port)
$client.EnableSsl = $true
$client.Credentials = New-Object Net.NetworkCredential($user, $pass)

New-Object Net.Mail.MailMessage($from, $to,"Global IP", $ret.ip) | sv msg
$client.Send($msg)

◆zip内のコード(GrobalIPメール送信.ps1:要setting.json)
# 設定ファイルのパス・前回取得したグローバルIPアドレス記録ファイルのパス
$MyInvocation.MyCommand.Path | Split-Path -Parent | sv path
Join-Path $path setting.json | sv setting_path
Join-Path $path latest_gip.txt | sv gip_path

# 設定ファイル読み込み。
cat $setting_path | ConvertFrom-Json | sv conf

# 認証情報生成
ConvertTo-SecureString $conf.pass | sv pass
New-Object System.Management.Automation.PSCredential $conf.user, $pass | sv cred

# 前回のIPをファイルから取得
if (Test-Path $gip_path) {
    cat $gip_path | sv latestip
}

# グローバルIP取得サイトにアクセス。
curl ipinfo.io | ConvertFrom-Json | sv ret

# 前回のIPと今回取得したIPが不一致の場合のみ、ファイル書き込み&メール送信。
if ($latestip -ne $ret.ip) {
    Send-MailMessage `
        -To         $conf.to     `
        -From       $conf.from   `
        -SmtpServer $conf.server `
        -Port       $conf.port   `
        -Subject    "Global IP"  `
        -Credential $cred        `
        -UseSsl                  `
        -Body       $ret.ip

    # メール送信に成功した場合のみ、グローバルIPアドレスを更新
    if ($? -eq $true) {
        $ret.ip | tee -f $gip_path
    }
}

2018年1月13日土曜日

【VPN】【Aterm WG1200HP】外出先から自宅PCにアクセス

◎VPNを構築する
■ 環境
・使用機器とネットワーク構成

[外出先スマホ(Android6)]
 ↓
インターネット
 ↓
[ルーター(Aterm WG1200HP)]
 ↓
[自宅LAN内のPC(Windows10/192.168.11.3)]

・使用プロバイダ
かもめインターネット

・自宅回線
(確か)フレッツ光ネクスト マンションタイプ

・スマホのsim
 bic sim

・LAN側ネットワークアドレス/マスク
192.168.11.0/24

・ルーター
Aterm WG1200HP FW:1.0.32

■ 目次
1. ルーターのポートマッピング設定
2. Windows10(常時起動)のPPTPサーバ設定
3. AndroidのVPNクライアント設定
4. グローバルIPアドレス変更時のメール送信設定

■ 作業手順
1. ルーターのポートマッピング設定を行う。
1.1. クイック設定Webを開く。
 1) ブラウザ起動。
 2) アドレス欄に192.168.11.1を入力。(アドレスは適宜読み替えること。)
 3) ユーザ名/パスワードを入力。
1.2. クイック設定Webでポートマッピング(ポート転送)を設定。
 1) 「詳細モードに切り替え」ボタン押下。
 2) 「詳細設定」リンク押下。
 3) 「ポートマッピング設定」リンク押下。
 4) 「すべて削除」ボタン押下。※1
 5) 以下を入力し、「設定」ボタン押下。
  ・IPアドレス:192.168.11.3(LAN側のPPTPサーバアドレス。適宜読み替えること。)
  ・プロトコル:TCP
  ・ポート範囲:1723
  ・コメント :VPN PPTP
1.3. WG1200HPの電源を抜き差し。※2
1.4. WAN側IPアドレス確認。
 1) 再度、手順1.1.を行う。
 2) クイックWebで「現在の状態」リンクを押下。
 3) ブラウザを下部のほうにスクロールさせ、WAN側情報のIPアドレスを控える。

※1 WG1200HPのマニュアルによると、VPN設定を行う場合、ポートマッピングは1つしか設定できないとのこと。ただ、自分が試したところ複数設定した場合でもVPN接続に成功する。
※2 要らないと思われるが、一応実施。クイックWebからの再起動は5.2GHzWiFiがリセットされない問題があったので、使用を控えている。

2. Windows10(常時起動)のPPTPサーバ設定
2.1. ネットワーク接続画面を開く。
 1) キーボードの Winキー + X、Wを押下。
 2) 「アダプターのオプションを変更する」を押下。
2.2. 着信接続(PPTP)を構築する。
 1) キーボードの Alt+Fを押下。
 2) 「新しい着信接続」を選択。
 3) VPN接続対象ユーザのチェックボックスを押下し、「次へ」ボタンを押下。
 4) 「インターネット経由」のチェックボックスを押下し、「次へ」ボタンを押下。
 5) 「インターネット プロトコル バージョン 4 (TCP/IPv4)」を選択し、
  「プロパティ」ボタンを押下。※3
 6) 以下を指定して「OK」ボタンを押下。
  ・呼び出し元にローカルエリアネットワークへのアクセスを認める:ON
  ・IPアドレスを指定する:ON
  ・開始アドレス:192.168.11.90※4
  ・終了アドレス:192.168.11.99
  ・呼び出し元のコンピュータが自分のIPアドレスを指定できる:OFF※5
 7)「アクセスを許可」ボタンを押下。
 8) 「閉じる」ボタンを押下。
 9) Windows10を再起動。(要らないと思われるが一時実施した。)

※3 環境によっては不要かも。自分の環境では必要だった。
※4 IPアドレスは適宜読み替えること。
※5 ONでも良い。

3. AndroidのVPNクライアント設定
3.1. VPN設定を開く。
 1) ホーム画面でアプリボタンをタップ。
 2) 「設定」ボタンをタップ。
 3) 「もっと見る」をタップ。
 4) 「VPN」をタップ。
 5) メニューボタンをタップ。
 6) 「VPNプロファイルの追加」をタップ。
 7)以下を入力し、「保存」をタップ。
  名前        :自宅ネット
  タイプ       :PPTP
  サーバーアドレス  :手順1.4.で確認したIPアドレス。※6
  PPP暗号化(MPPE) :ON(チェックした状態にする。)
 8) 上記で生成された「自宅ネット」をタップ。
 9) 以下を入力し、「接続」ボタンを押下。
  ・ユーザー名:Windows10アカウントのユーザー名。
  ・パスワード:Windows10アカウントのパスワード。
  ・アカウント情報を保存する:ON(チェックした状態にする。)

※6 プロバイダや契約内容によるが、WG1200HPを再起動すると、グローバルIPアドレスは変わってしまうのでAndroid側のIPアドレスを入力しなおす必要がある。そのため、この手順の前に再確認しておくと良い。

以上でVPN設定手順は終了。
うまくいった場合は、スマホ画面に「接続されました」と表示され、Windows10の「ネットワーク接続」画面にも「1クライアントが接続しています」と表示される。スマホのESエクスプローラーやRemoteDesktopなどで、LAN内のPCにアクセスできる。

4. グローバルIPアドレス変更時のメール送信設定
4.1. yahoo等のフリーメールアドレスを取得する。
  メールアドレスが1つ以上必要。GmailはIPアシストが未対応?(2018/1/13現在)
4.2. フリーソフト「IPアシスト」ダウンロード
 1) ブラウザを起動。
 2) アドレス欄に以下を入力
  http://www.geocities.jp/y_karasuma/download.html
 3) IPアシストのexeをクリック。
 4) ダウンロードしたzipファイルを展開。
4.3. 設定ファイル修正(バージョンが3.56βの場合のみ実施※7)
 解凍したフォルダ内のipasi3.iniをエディタで開き、以下のように修正して保存。
  ・Site_select=0
  ・UGTOP_終了文字列="<br>"
  ・UGTOP_開始文字数=5
  ・UGTOP_終了文字数=5
4.4. IPアシスト起動&設定
 1) ipasi3.exeを起動。
 2) 「WAN-IP」ボタンを押下。
  ⇒グローバルIPアドレスが表示されること。
 3) メニューの[設定]-[メール設定]を選択。
 4) 以下を入力し、「テスト送信」ボタンを押下。※8
  ・宛先アドレス:hoge@gmail.com
  ・送信元アドレス:aho@yahoo.co.jp
  ・SMTPサーバアドレス:smtp.mail.yahoo.co.jp
  ・SMTP認証を有効にする:ON
  ・ID:aho
  ・Password:ahobakakuso
  ・ポート番号:587
 5) テスト送信に成功したら、「OK」ボタンを押下し、設定画面を閉じる。
 6) メニューの[設定]-[メール送信【有効/無効】]-[メール送信【有効】]を選択。
 7) メニューの[設定]-[起動時メール送信]を選択。
 
※7 リリースされている設定ファイルに不備があるのか、一部の環境のみ発生するのかわからないが、これをやらないと「設定ファイル異常」と表示され、起動できない。
※8 アドレス等は読み替えること。また、宛先アドレス・送信元アドレスは同じアドレスでも可能だが、gmail.comを送信元アドレスにすることはできない。(2018/1/13現在)

■あとがき
 鬼門はやはりWG1200HPで、最初は上記の手順でやってたはずだが、駄目だった。その後、ポートマッピング設定を1エントリにしたり、再起動したり、ポートマッピングに47をいれたり、しばらく時間を置いたり、いろいろやってたらいつの間にか接続できてた。