WireGuard でセキュアなリモートデスクトップ環境を構築する
WireGuard は Linux カーネルに組み込まれた新世代の VPN プロトコル兼アプリケーションです。「シンプル・高速・安全」を目的に設計されており、従来の VPN(OpenVPN、IPsec)に比べて設定が容易でパフォーマンスも高いのが特徴です。
本記事では、WireGuard を使用してセキュアなリモートデスクトップ環境を構築する方法を解説します。外出先から自宅や会社の Windows PC に安全にアクセスできる環境を作ることで、テレワークやリモート作業の効率を向上させることができます。
WireGuard の利用目的
- セキュアなリモートアクセス:外出先から自宅・会社の Windows PC に安全に接続
- 通信の暗号化:公共 Wi-Fi 経由でも RDP 通信が盗聴・改ざんされることを防ぐ
- ネットワーク制限の回避:企業ファイアウォールや ISP の制限を回避してリモートデスクトップ接続を実現
- パフォーマンス向上:従来の VPN より低レイテンシでスムーズなリモートデスクトップ操作が可能
WireGuard の仕組み概要
- 軽量な鍵交換
- 各デバイス(クライアント PC、中継サーバ、ターゲット Windows PC)が公開鍵・秘密鍵ペアを持つ
- 複雑な証明書認証が不要で、設定が簡単
- 低レイテンシの暗号化トンネル
- UDP パケットベースで RDP 通信に最適化された高速な暗号化トンネルを構築
- TCP オーバーヘッドがないため、画面共有やファイル転送が高速
- 柔軟なルーティング制御
- RDP ポート(デフォルト 3389)のみを VPN 経由にルーティング可能
- 他の通信は通常のインターネット接続を使用してパフォーマンスを最適化
今回の利用環境
- 中継サーバー:さくらの VPS / Ubuntu 20.04
- クライアント:MacOS Sonoma14.5
- Windows11Pro
中継サーバの構築(さくらの VPS / Ubuntu)
外部からプライベートネットワーク内の Windows PC にアクセスするため、インターネット上の中継サーバを構築します。今回はさくらの VPS(以下、さくら VPS)を利用することにしました。
さくら VPS に SSH 接続、root 権限に切り替え
sudo su -
システム更新し WireGuard をインストール
apt update
apt upgrade -y
apt install wireguard -y
/etc/sysctl.conf ファイルの編集
vim /etc/sysctl.conf
テキストエディタ で編集
# 以下をコメントアウト(もしくは追記)
net.ipv4.ip_forward=1
設定ファイルから値を読み込んで反映
sysctl -p
WireGuard の設定ディレクトリに移動
cd /etc/wireguard
サーバーの秘密鍵と公開鍵を生成
wg genkey | tee server_private.key | wg pubkey > server_public.key
chmod 600 server_private.key
クライアント用(今回は MacOS)の鍵も生成
wg genkey | tee mac_private.key | wg pubkey > mac_public.key
chmod 600 mac_private.key
Windows クライアント用の鍵を生成
wg genkey | tee windows_private.key | wg pubkey > windows_public.key
chmod 600 windows_private.key
設定ファイルの作成と編集
touch /etc/wireguard/wg0.conf
vim /etc/wireguard/wg0.conf
設定ファイルの記載例
[Interface]
Address = 10.0.0.1/24
ListenPort = <ポート、デフォルトは51820>
PrivateKey = <サーバー秘密鍵>
MTU = 1420
# ens3(インターフェース名、環境に応じて要変更)
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE
[Peer]
# Macクライアント
PublicKey = <Macクライアント公開鍵>
AllowedIPs = 10.0.0.2/32
[Peer]
# Windowsクライアント
PublicKey = <Winクライアント公開鍵>
AllowedIPs = 10.0.0.3/32
ファイアウォール(ufw)の設定
ufw status
ufw allow <ポート番号>/udp
ufw reload
WireGuard サービスの起動
# 起動と自動起動設定
systemctl enable wg-quick@wg0
systemctl start wg-quick@wg0
# 状態確認
systemctl status wg-quick@wg0
wg show
再起動する場合
systemctl restart wg-quick@wg0
クライアント側の設定
以下は CLI での操作を説明しますが、運用にあたっては App ストアからアプリをダウンロードして GUI で操作する方が、VPN 接続切り替えが便利かもしれません。
Mac でのインストール
brew install wireguard-tools
バージョン確認
wg --version
// wireguard-tools v1.0.20250521 - https://git.zx2c4.com/wireguard-tools/
設定ファイルの生成
mkdir -p ~/.wireguard
vim ~/.wireguard/client.conf
設定ファイルの編集
[Interface]
Address = 10.0.0.2/24
PrivateKey = <クライアントの秘密鍵>
DNS = 1.1.1.1, 8.8.8.8
MTU = 1420
[Peer]
PublicKey = <サーバーの公開鍵>
Endpoint = <さくらVPSのIP>:<ポート番号>
# AllowedIPs = 0.0.0.0/0, ::/0 # クライアントからのネット接続のすべてがさくら経由
AllowedIPs = 10.0.0.0/24 # 構築したVPN内だけさくら経由
PersistentKeepalive = 25
.zshrc にエイリアスを設定
echo 'alias vpn-up="sudo wg-quick up ~/.wireguard/client.conf"' >> ~/.zshrc
echo 'alias vpn-down="sudo wg-quick down ~/.wireguard/client.conf"' >> ~/.zshrc
echo 'alias vpn-status="sudo wg show"' >> ~/.zshrc
zshrc を反映
source ~/.zshrc
使い方
vpn-up # VPN接続
vpn-down # VPN切断
vpn-status # 状態確認
Windows クライアント側の設定
WireGuard アプリのインストール
WireGuard 公式サイト より Windows 用 GUI アプリをダウンロード・インストール
トンネルの追加で以下の設定を記述
[Interface]
PrivateKey = <Winクライアントの秘密鍵>
Address = 10.0.0.3/24
DNS = 1.1.1.1, 8.8.8.8
MTU = 1420
[Peer]
PublicKey = <サーバーの公開鍵>
Endpoint = <さくらVPSのIP>:<ポート番号>
AllowedIPs = 10.0.0.0/24
PersistentKeepalive = 25
リモートデスクトップの有効化
VPN 経由でリモートデスクトップ接続を受け付けるため、Windows PC 側でリモートデスクトップを有効化。ネットワークレベル認証も有効化しておく。
# PowerShell を管理者権限で実行
Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server' -Name "fDenyTSConnections" -Value 0
Enable-NetFirewallRule -DisplayGroup "Remote Desktop"
# ネットワークレベル認証を有効化
Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name "UserAuthentication" -Value 1
または、GUI で設定する場合:
- 設定 → システム → リモートデスクトップ
- リモートデスクトップ タブで有効化。ネットワークレベル認証の有効化にもチェックを入れる。
リモートデスクトップ接続の実行
ターミナル、もしくは GUI アプリから VPN を有効化
# VPN 接続
vpn-up
# リモートデスクトップクライアントで接続
# IP: 10.0.0.3(Windows PC の VPN 内 IP)
# ポート: 3389(または変更した場合は該当ポート)
Microsoft Remote Desktop アプリからリモートデスクトップ接続を行う。
- App Store から「Microsoft Remote Desktop」をインストール
- PC 追加で
10.0.0.3を指定して接続
Discussion