かつて山市良と呼ばれたおじさんのブログ

セイテクエンジニアのブログ  かつて山市良と呼ばれたおじさんのブログ  vol.23 ラボ環境 on Azureに、共通のテスト用メール環境を導入したい

 

 

vol.23 ラボ環境 on Azureに、共通のテスト用メール環境を導入したい

2024年07月01日配信
執筆者:山内 和朗

 vol.19~22で紹介したWSL 2(Ubuntu)で簡単に導入できるテスト用メール環境は、スタンドアロン環境での利用を想定したものでした。送信メールサーバー(SMTP)、受信メールサーバー(POP3およびIMAP)ともにlocalhostを指定しての利用です。Windows標準機能でポートプロキシ(ポート転送)を構成すれば、利用範囲をローカルホストからローカルネットワークに広げることができます。

 

ラボ環境 on Azureにテスト用メール環境を導入する

 

 WSL 2のLinuxディストリビューションは、起動すると既定の仮想スイッチ(スイッチ名: WSL)に接続されます。この仮想スイッチは、Hyper-Vと共通の、“内部”タイプのネットワークであり、WindowsとLinuxディストリビューションの両方がこのスイッチに接続され、プライベートIPアドレスがそれぞれに動的に割り当てられます。Linuxディストリビューションからは、NAT(ネットワークアドレス変換)ベースのアーキテクチャで外部に通信することができ、外部からのアクセスはWSL 2をホストするWindowsから、プライベートIPアドレスを使用してアクセスすることができます。また、Windowsからlocalhost(127.0.0.1)に対するアクセスは、透過的にLinuxディストリビューションに転送されます。

 このブログの「メモ. WSL 2へのポートプロキシ設定に" "で苦労した話」でも説明したように、Windowsが接続されているローカルネットワーク(LAN)からLinuxディストリビューションにアクセスするように構成することもできます。それには、Windowsのポートプロキシを利用して、WindowsのローカルポートへのアクセスをLinuxディストリビューションにポート転送してあげるのです。

WSL を使用したネットワーク アプリケーションへのアクセス|ローカル エリア ネットワーク (LAN) からの WSL 2 ディストリビューションへのアクセス
https://learn.microsoft.com/ja-jp/windows/wsl/networking#accessing-a-wsl-2-distribution-from-your-local-area-network-lan

 

 このブログでは、入れ子になった仮想化(Nested Virtualization)を利用して、Azure VMにHyper-Vベースのラボ環境を構築してきました。Hyper-V VMに、WSL 2対応のWindowsゲストをインストールすれば、そのローカル環境でWSL 2のテスト用メール環境を導入することができますが、Hyper-V VMごとにそれを用意するのは少し手間です。また、WSL 2非対応のWindowsやLinuxゲストのHyper-V VMではこの方法は利用できません。

 そこで、Hyper-Vベースのラボ環境を提供するAzure VMに、WSL 2のメール環境を導入することにしました。ポートプロキシを構成することで、Hyper-V VMが接続される内部ネットワークに送信メールサーバーと受信メールサーバー、つまりSMTP(TCPポート25)、POP3(TCPポート110)、IMAP(TCPポート143)へのアクセスを提供するのです(図1)。

図1
図1 WSL 2(Ubuntu)のテスト用メール環境をHyper-Vホスト(Azure VM)に導入する

 

Azure VMのローカル環境にテスト用メール環境を導入する

 

 まず、vol.20のデモで示したのと同じ手順で、ラボ環境を構築したAzure VMのローカル環境に、WSL 2(Ubuntu)のテスト用メール環境を導入します。そして、Ubuntuに複数のローカルユーザーを作成し、ローカル環境にメールクライアントをインストールして、メールの送受信をテストします(画面1)。

画面1
画面1 ラボ環境を構築したAzure VMのローカル環境に、WSL 2をインストールし、テスト用メール環境をインポートしてローカル環境でのメール送受信環境を整える

 

ポートプロキシ(ポート転送)を構成する

 

 続いて、ポートプロキシとWindowsファイアウォールの受信の規則を作成します。次のようなスクリプトを記述したPowerShellスクリプト(.ps1)を作成し、実行すれば、ポートプロキシの設定とWindowsファイアウォールの受信の規則が作成され、ポート転送を受け付けるようになります(実行には管理者権限が必要です)。Linuxディストリビューション(Ubuntu)は実行中であっても、なくても構いません。Enterキーを最初のwsl -e hostname -Iの実行時にUbuntuが停止中であれば、自動的に開始されます(Ubuntuが既定のLinuxディストリビューションの場合)。なお、このスクリプトの内容については、「メモ. WSL 2へのポートプロキシ設定に" "で苦労した話」をご覧ください。

 

$ubuntuip = (wsl -e hostname -I).Trim()
$myfwrulename = "MyWSLrule"
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=25 connectaddress=$ubuntuip connectport=25
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=110 connectaddress=$ubuntuip connectport=110
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=143 connectaddress=$ubuntuip connectport=143
netsh interface portproxy show v4tov4
New-NetFirewallRule -Name $myfwrulename -DisplayName "Allow Inbound 25 110 143" -Protocol TCP -LocalPort @(25, 110,143) -Action Allow 
Write-Host "Mail receiving environment is running."
Write-Host "Press Enter to exit"
cmd /c Pause | Out-Null
netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=25
netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=110
netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=143
netsh interface portproxy show v4tov4
Remove-NetFirewallRule -Name $myfwrulename
wsl --terminate Ubuntu


 このスクリプトは“Press Enter to exit”というプロンプトで中断し、その間、ポート転送を受け付けます。Enterキー(または任意のキー)を入力すると、ポートプロキシの設定とWindowsファイアウォールの受信の規則が削除され、Linuxディストリビューション(Ubuntu)を停止します。

画面2
画面2 ポートプロキシとWindowsファイアウォールの受信の規則を追加/削除するスクリプトを作成し、実行する

 あとは、WindowsやLinuxゲストを実行するHyper-V VMに、メールクライアントをインストールし、送信メールサーバー/受信メールサーバーを「192.168.0.1」(Hyper-V VMのデフォルトゲートウェイとなっているHyper-Vホスト側のIPアドレス)として設定すれば、Hyper-Vホストで動くWSL 2(Ubuntu)のメール環境を利用することができます(画面3)。

画面3
画面3 Hyper-V VMのゲスト側のメールクライアントからメールを送受信できることを確認する

 

おまけ: Azure VMのサイズ拡張

 

 Azure上のラボ環境のAzure VMは、小さいサイズ「Standard_D2s_v52コア8GBメモリ、13,571円/月)」でスタートしました。しかし、WSL 2のテスト用メール環境を導入したことで、WSL 2実行時のリソース使用量が増えてしまいました。このサイズでは、1台のHyper-V VMを何とか実行できるくらいなので(残りの利用可能メモリは4GB程度)、Azure VMのサイズを当初予定していた「Standard_D4s_v54コア16GBメモリ、27,142円/月)」にスケールアップすることにしました。

 その方法はいたって簡単で、Azure VMを「停止済み(割り当て解除)」の状態にしたら、Azure VMの管理ブレードの「可用性とスケール|サイズ」を開いて、新しいサイズを選択し、「サイズの変更」をクリックします(画面4)。

画面4
画面4 WSL 2のメール環境を導入したことで、Hyper-Vで利用可能なリソースが減ってしまったので、サイズを当初予定していた「Standard_D4s_v5」に変更

blog_subscribe

blog_comment

最新記事