一般社団法人 全国個人事業主支援協会

COLUMN コラム

はじめに

Azure の学習と趣味のサーバ構築を兼ねて、「Azure VM を中継サーバとして利用し、自宅サーバへ安全にアクセスする仕組み」を構築しました。本記事では、その構成と実装手順を技術者向けにまとめています。

背景

業務で Azure を扱う機会が増え、クラウド基盤を体系的に理解する必要性を感じました。まずは初歩の知識を得るためにAZ-900 の学習を始めたものの、座学だけでは理解が深まりにくいため、実際に Azure を触りながら学ぶことにしました。

ちょうど自宅に趣味用サーバを構築していたのですが、家庭のネットワーク環境ではポート開放ができない制約がありました。そこで、Azure VM を中継サーバとして WireGuard VPN を構築し、Azure 経由で自宅サーバへアクセスする方式を採用しました。

注意事項

この記事の内容は検証レベルで構築したものです。同様の構成を利用する場合は、必ず自己責任でセキュリティに配慮して運用してください。


全体構成図

外部端末
   ⇔(インターネット)
      ⇔ Azure VM(VPN・中継)
         ⇔(WireGuard VPN)
            ⇔ 自宅サーバ(Windows)

1. Azure VM の作成(概要)

基本設定

  • リージョン:西日本
  • サイズ:Standard_B2ats_v2(2 vCPU / 1 GiB RAM)
  • イメージ:Ubuntu Server 24.04 LTS
  • 認証方法:SSH 公開キー
  • 可用性オプション:不要

ディスク

  • OS ディスク:30 GiB(既定値)
  • 種類:Standard SSD(LRS)

ネットワーク

  • パブリック IP:あり
  • SSH(22 番)は必要時のみ開放推奨

2. Azure VM へのログイン

  1. Azure ポータル → VM →「接続」
  2. 「SSH(Azure CLI)」を選択
  3. 「アクセスの確認」→「接続」
  4. CLI が開きログイン完了

3. Azure 側ネットワーク設定(※先に必須)

WireGuard(UDP 51820)やアプリ用ポートを開けておかないと、Linux 側で設定しても通信が通りません。

設定手順

  • Azure ポータル → VM →「ネットワーク」
  • ネットワークセキュリティグループ(NSG)を開く
  • 「受信セキュリティ規則」→「追加」

必要なポート

用途 ポート プロトコル
WireGuard 51820 UDP
アプリ用(例:UDP 5000) 任意 UDP/TCP

4. Azure VM(Linux)側の設定

ここからは実際のコマンド作業です。WireGuard のセットアップと、VPN 越しに自宅サーバへ通信を転送するための iptables 設定を行います。

4.1 初期セットアップ

root になる

sudo -i

パッケージ更新

apt update
apt -y upgrade

WireGuard / iptables のインストール

apt install -y wireguard wireguard-tools
apt install -y iptables

4.2 WireGuard の設定

ディレクトリ作成

cd /etc
mkdir -p wireguard
chmod 700 wireguard
cd wireguard

鍵の生成

umask 077
wg genkey | tee server.key | wg pubkey > server.pub

4.3 wg0.conf の作成

nano /etc/wireguard/wg0.conf
[Interface]
Address = 10.100.0.1/24
ListenPort = 51820
PrivateKey = <server.key の内容>

[Peer]
PublicKey = <Windows 側の PublicKey>
AllowedIPs = 10.100.0.2/32

4.4 IP Forward の有効化

nano /etc/sysctl.conf

以下のコメントを外します。

net.ipv4.ip_forward=1

反映:

sysctl -p

4.5 WireGuard の起動

systemctl enable wg-quick@wg0
systemctl start wg-quick@wg0
wg show

4.6 iptables の設定(例:UDP 5000)

iptables -t nat -A PREROUTING -i eth0 -p udp --dport 5000 -j DNAT --to-destination 10.100.0.2:5000
iptables -A FORWARD -i eth0 -o wg0 -p udp --dport 5000 -j ACCEPT
iptables -A FORWARD -i wg0 -o eth0 -j ACCEPT
iptables -t nat -A POSTROUTING -o wg0 -p udp --dport 5000 -j SNAT --to-source 10.100.0.1

永続化

mkdir -p /etc/iptables
iptables-save > /etc/iptables/rules.v4

5. Windows 側 WireGuard 設定

[Interface]
PrivateKey = (自動設定)
Address = 10.100.0.2/32

[Peer]
PublicKey = <server.pub>
Endpoint = <Azure VM のグローバル IP>:51820
AllowedIPs = 10.100.0.1/32
PersistentKeepalive = 25

6. 鍵の対応表

役割 Linux(Azure) Windows
Interface PrivateKey server.key Windows PrivateKey
Peer PublicKey Windows PublicKey server.pub

7. 接続確認(WireGuard / パケットレベル)

7.1 WireGuard の状態確認

wg show

確認ポイント:

  • latest handshake が表示されている
  • transfer の送受信バイト数が増えている

7.2 tcpdump によるパケット確認

外部端末 → Azure VM(eth0)

tcpdump -ni eth0 udp port 5000

Azure VM → 自宅サーバ(wg0)

tcpdump -ni wg0 udp port 5000

切り分けの典型パターン

状況 原因の可能性
eth0 には来ているが wg0 に流れない DNAT / FORWARD 設定漏れ
wg0 には流れるが応答が返らない SNAT 設定漏れ
handshake が発生しない 鍵設定ミス / NSG 未開放
handshake はあるが通信が 0KB AllowedIPs の設定ミス

8. 外部端末からの接続

ここまで設定すれば、外部端末 → Azure VM → 自宅サーバ の通信が可能になります。


9. 補足:DNS を使うと繋がる場合がある

IP 直指定では繋がらないケースがあり、無料 DNS に Azure のグローバル IP を登録すると解決したことがありました(原因は不明)。


まとめ

Azure VM の作成からネットワーク設定、WireGuard の構築まで一通り触れることで、クラウド基盤の理解が大きく深まりました。サンプル機能では得られない「実際に動く環境を構築する経験」は非常に有益で、学習効果も高いと感じました。

次は VM だけでなく、Functions や App Service なども試していく予定です。

この記事をシェアする

  • Twitterでシェア
  • Facebookでシェア
  • LINEでシェア