VPN内でPC名で接続する

2025/12/14

WireGuard VPN環境でホスト名によるリモートデスクトップ接続を実現する

VPN内で、ローカルDNSを運用する。

概要

WireGuard VPNを使ってWindows PC同士をリモートデスクトップ接続する際、IPアドレスではなくホスト名(コンピュータ名)で接続できると便利です。

本記事では、さくらインターネットVPS(AlmaLinux 9)のWireGuard中継サーバーにdnsmasqを導入し、VPN内のホスト名解決を実現する方法を解説します。

前提環境

  • さくらインターネットVPS(AlmaLinux 9、512MB RAM)
  • WireGuard VPN中継サーバー構築済み
  • VPNネットワーク: 10.200.0.0/24
  • VPSのVPN内IP: 10.200.0.1

VPN中継サーバーの構築方法は使えるVPN-中継サーバ設定を参照してください。

構成イメージ

[Windows PC A: 10.200.0.2]  ←──┐
                               │
[Windows PC B: 10.200.0.3]  ←──┼──→  [さくらVPS: 10.200.0.1]
                               │         dnsmasq (DNS)
[Windows PC C: 10.200.0.4]  ←──┘         WireGuard

各PCはVPN接続時にDNSサーバーとして 10.200.0.1 を参照し、dnsmasqがホスト名を解決します。


サーバー側の設定

STEP 1: dnsmasq インストール
sudo dnf install -y dnsmasq
STEP 2: dnsmasq 設定
sudo cp /etc/dnsmasq.conf /etc/dnsmasq.conf.bak
sudo tee /etc/dnsmasq.conf >/dev/null <<'EOF'
# VPNインターフェースのみでリッスン
interface=wg0
bind-interfaces

# 上流DNSサーバー(外部ドメイン解決用)
server=8.8.8.8
server=1.1.1.1

# ドメイン名
domain=vpn.local
local=/vpn.local/

# ログ(デバッグ時に有効化)
#log-queries

# キャッシュサイズ(メモリ節約)
cache-size=150
EOF
STEP 3: VPN内ホスト名の登録

/etc/hosts にVPN内PCのホスト名を追加します。ホスト名とFQDN(完全修飾ドメイン名)の両方を登録するのがポイントです。

sudo tee -a /etc/hosts >/dev/null <<'EOF'

# === WireGuard VPN hosts ===
10.200.0.1    vpn-server       vpn-server.vpn.local
10.200.0.2    DESKTOP     DESKTOP.vpn.local
10.200.0.3    DESKTOP2         DESKTOP2.vpn.local
10.200.0.4    DESKTOP3        DESKTOP3.vpn.local
EOF

IPアドレスとホスト名は、実際の環境に合わせて変更してください。

STEP 4: firewalld でDNSポート開放

VPNネットワークからのDNSクエリ(53番ポート)を許可します。

sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="10.200.0.0/24" port port="53" protocol="udp" accept'
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="10.200.0.0/24" port port="53" protocol="tcp" accept'
sudo firewall-cmd --reload
STEP 5: dnsmasq 起動
sudo systemctl enable --now dnsmasq
sudo systemctl status dnsmasq --no-pager

クライアント側の設定(Windows)

WireGuard設定ファイルの修正

各WindowsクライアントのWireGuard設定ファイルに、DNSサーバーとDNSサフィックスを追加します。

[Interface]
PrivateKey = (クライアントの秘密鍵)
Address = 10.200.0.2/24
DNS = 10.200.0.1, vpn.local

[Peer]
PublicKey = (サーバーの公開鍵)
AllowedIPs = 10.200.0.0/24
Endpoint = (VPSのグローバルIP):(WireGuardポート)
PersistentKeepalive = 25

重要なポイント:

  • DNS = 10.200.0.1, vpn.local の形式で、DNSサーバーとDNSサフィックスをカンマ区切りで指定
  • DNSサフィックス(vpn.local)を追加することで、DESKTOP と入力すると自動的に DESKTOP.vpn.local として検索される
設定手順
  1. WireGuardアプリを開く
  2. トンネルを選択し「トンネルを編集」をクリック
  3. 上記のように DNS 行を修正
  4. 保存して再接続

VPNに接続する全てのWindowsクライアントで同様に設定してください。


動作確認

サーバー側での確認
# dnsmasqの状態確認
sudo systemctl status dnsmasq

# 名前解決テスト
nslookup DESKTOP 127.0.0.1
Windowsクライアントでの確認

VPN接続後、コマンドプロンプトまたはPowerShellで以下を実行します。

# DNSキャッシュをクリア
ipconfig /flushdns

# 名前解決テスト
nslookup DESKTOP

# pingテスト
ping DESKTOP

リモートデスクトップ接続で DESKTOP と入力して接続できれば成功です。


ホスト追加時の手順

新しいPCをVPNに追加した場合は、以下の手順で登録します。

サーバー側
# /etc/hosts にエントリ追加
echo "10.200.0.5    NewPC    NewPC.vpn.local" | sudo tee -a /etc/hosts

# dnsmasq再起動
sudo systemctl restart dnsmasq
クライアント側

新しいクライアントのWireGuard設定に DNS = 10.200.0.1, vpn.local を追加するだけで、既存クライアントの再起動は不要です。


トラブルシューティング

名前解決できない場合

dnsmasqのログを有効化して原因を調査します。

# ログを有効化
sudo sed -i 's/#log-queries/log-queries/' /etc/dnsmasq.conf
sudo systemctl restart dnsmasq

# ログ確認
sudo journalctl -u dnsmasq -f
Windowsで古いDNSキャッシュが残る場合
ipconfig /flushdns
nslookupは成功するがpingが失敗する場合

DNSサフィックスが設定されていない可能性があります。WireGuard設定の DNS 行が DNS = 10.200.0.1, vpn.local の形式になっているか確認してください。


まとめ

dnsmasqを使うことで、WireGuard VPN環境でもホスト名によるリモートデスクトップ接続が可能になります。

ポイントは以下の3点です。

  1. サーバーの /etc/hosts にホスト名とFQDNの両方を登録する
  2. クライアントのWireGuard設定で DNS = 10.200.0.1, vpn.local のようにDNSサフィックスを追加する
  3. 512MBメモリのVPSでもdnsmasqは軽量なので問題なく動作する

これでIPアドレスを覚える必要がなくなり、VPN内の接続がより便利になります。