Azure の学習と趣味のサーバ構築を兼ねて、「Azure VM を中継サーバとして利用し、自宅サーバへ安全にアクセスする仕組み」を構築しました。本記事では、その構成と実装手順を技術者向けにまとめています。
業務で Azure を扱う機会が増え、クラウド基盤を体系的に理解する必要性を感じました。まずは初歩の知識を得るためにAZ-900 の学習を始めたものの、座学だけでは理解が深まりにくいため、実際に Azure を触りながら学ぶことにしました。
ちょうど自宅に趣味用サーバを構築していたのですが、家庭のネットワーク環境ではポート開放ができない制約がありました。そこで、Azure VM を中継サーバとして WireGuard VPN を構築し、Azure 経由で自宅サーバへアクセスする方式を採用しました。
この記事の内容は検証レベルで構築したものです。同様の構成を利用する場合は、必ず自己責任でセキュリティに配慮して運用してください。
外部端末
⇔(インターネット)
⇔ Azure VM(VPN・中継)
⇔(WireGuard VPN)
⇔ 自宅サーバ(Windows)
WireGuard(UDP 51820)やアプリ用ポートを開けておかないと、Linux 側で設定しても通信が通りません。
| 用途 | ポート | プロトコル |
|---|---|---|
| WireGuard | 51820 | UDP |
| アプリ用(例:UDP 5000) | 任意 | UDP/TCP |
ここからは実際のコマンド作業です。WireGuard のセットアップと、VPN 越しに自宅サーバへ通信を転送するための iptables 設定を行います。
sudo -i
apt update
apt -y upgrade
apt install -y wireguard wireguard-tools
apt install -y iptables
cd /etc
mkdir -p wireguard
chmod 700 wireguard
cd wireguard
umask 077
wg genkey | tee server.key | wg pubkey > server.pub
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
nano /etc/sysctl.conf
以下のコメントを外します。
net.ipv4.ip_forward=1
反映:
sysctl -p
systemctl enable wg-quick@wg0
systemctl start wg-quick@wg0
wg show
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
[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
| 役割 | Linux(Azure) | Windows |
|---|---|---|
| Interface PrivateKey | server.key | Windows PrivateKey |
| Peer PublicKey | Windows PublicKey | server.pub |
wg show
確認ポイント:
tcpdump -ni eth0 udp port 5000
tcpdump -ni wg0 udp port 5000
| 状況 | 原因の可能性 |
|---|---|
| eth0 には来ているが wg0 に流れない | DNAT / FORWARD 設定漏れ |
| wg0 には流れるが応答が返らない | SNAT 設定漏れ |
| handshake が発生しない | 鍵設定ミス / NSG 未開放 |
| handshake はあるが通信が 0KB | AllowedIPs の設定ミス |
ここまで設定すれば、外部端末 → Azure VM → 自宅サーバ の通信が可能になります。
IP 直指定では繋がらないケースがあり、無料 DNS に Azure のグローバル IP を登録すると解決したことがありました(原因は不明)。
Azure VM の作成からネットワーク設定、WireGuard の構築まで一通り触れることで、クラウド基盤の理解が大きく深まりました。サンプル機能では得られない「実際に動く環境を構築する経験」は非常に有益で、学習効果も高いと感じました。
次は VM だけでなく、Functions や App Service なども試していく予定です。