🔐

WireGuard でセキュアなリモートデスクトップ環境を構築する

に公開

WireGuard は Linux カーネルに組み込まれた新世代の VPN プロトコル兼アプリケーションです。「シンプル・高速・安全」を目的に設計されており、従来の VPN(OpenVPN、IPsec)に比べて設定が容易でパフォーマンスも高いのが特徴です。

本記事では、WireGuard を使用してセキュアなリモートデスクトップ環境を構築する方法を解説します。外出先から自宅や会社の Windows PC に安全にアクセスできる環境を作ることで、テレワークやリモート作業の効率を向上させることができます。

WireGuard の利用目的

  1. セキュアなリモートアクセス:外出先から自宅・会社の Windows PC に安全に接続
  2. 通信の暗号化:公共 Wi-Fi 経由でも RDP 通信が盗聴・改ざんされることを防ぐ
  3. ネットワーク制限の回避:企業ファイアウォールや ISP の制限を回避してリモートデスクトップ接続を実現
  4. パフォーマンス向上:従来の VPN より低レイテンシでスムーズなリモートデスクトップ操作が可能

WireGuard の仕組み概要

  1. 軽量な鍵交換
  • 各デバイス(クライアント PC、中継サーバ、ターゲット Windows PC)が公開鍵・秘密鍵ペアを持つ
  • 複雑な証明書認証が不要で、設定が簡単
  1. 低レイテンシの暗号化トンネル
  • UDP パケットベースで RDP 通信に最適化された高速な暗号化トンネルを構築
  • TCP オーバーヘッドがないため、画面共有やファイル転送が高速
  1. 柔軟なルーティング制御
  • 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 で設定する場合:

  1. 設定システムリモートデスクトップ
  2. リモートデスクトップ タブで有効化。ネットワークレベル認証の有効化にもチェックを入れる。

リモートデスクトップ接続の実行

ターミナル、もしくは 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