メインコンテンツへスキップ
見出し画像

自宅サーバー構築記録②──WireGuard VPN構築

    v6プラス・二重NAT環境でWireGuard VPNを構築した手順の記録です。ポート変更・DDNS設定・2段階ポート転送まで解説します。

    はじめに

    「外出先からも自宅のサーバーにアクセスしたい」──そのためにWireGuard VPNを構築しました。

    ところが、ドコモ光(v6プラス)環境ではポート80・443・51820が使えないという制約があります。さらに自分の環境はCTU(NTT機器)とIPoEルーターによる二重NATです。この2つの障壁を越えるまでが最大の難所でした。

    この記事では、v6プラス・二重NAT環境でのWireGuard VPN構築手順を、DDNS設定も含めて解説します。

    前提: Ubuntuサーバー(固定LAN IP: 192.168.10.138)が稼働していること。


    全体の仕組み

    外出先デバイス
        │  UDP 13472(WireGuard)
        ▼
    your-domain.com(DDNSで自動更新)
        │
    CTU RT-500MI(192.168.1.1)      ← ポート転送①
        │
    IPoEルーター(192.168.10.1)      ← ポート転送②
        │
    Ubuntu(192.168.10.138)
        │  WireGuardトンネル
        ▼
    VPN仮想ネットワーク(10.0.0.0/24)
    

    ポイントは2点です。

    1. ポートをWireGuardデフォルト(51820)から13472に変更 ── v6プラスで使えないポートを回避

    2. DDNS ── 変動するグローバルIPをドメインに自動反映


    ステップ1:ドメイン取得とCloudflare設定

    1-1. ドメイン取得

    お名前.comやムームードメインなどでドメインを取得します(例: your-domain.com)。

    1-2. CloudflareにDNS管理を移管

    1. Cloudflareアカウントを作成

    2. ドメインをCloudflareに追加

    3. ドメインのネームサーバーをCloudflare指定のものに変更(レジストラ側の設定)

    1-3. AレコードとAPIトークンを作成

    Cloudflare Dashboard → DNS → レコードを追加:

    タイプ: A
    名前: your-domain.com
    IPv4アドレス: 現在のグローバルIP(後でDDNSが自動更新)
    プロキシ: オフ(DNSのみ)
    

    重要: WireGuardはUDP通信のため、Cloudflareのプロキシ(オレンジ雲)を必ずオフにしてください。オンにするとWireGuardが接続できません。

    次にAPIトークンを作成します。

    Cloudflare Dashboard → My Profile → API Tokens → Create Token → 「Edit zone DNS」テンプレートを使用:

    • Zone: your-domain.com(特定ドメインのみに限定)

    • 権限: Zone / DNS / Edit

    注意: トークンは作成後に一度しか表示されません。必ずメモしてから閉じてください。


    ステップ2:DDNS(ddclient)の設定

    グローバルIPが変わるたびにCloudflareのAレコードを自動更新します。

    インストール

    sudo apt update && sudo apt install -y ddclient
    

    設定ファイル

    /etc/ddclient.conf を編集:

    protocol=cloudflare
    use=web
    web=https://checkip.amazonaws.com
    ssl=yes
    zone=your-domain.com
    login=token
    password=YOUR_CLOUDFLARE_API_TOKEN
    your-domain.com
    

    起動・確認

    sudo systemctl enable --now ddclient
    
    # 手動実行して確認
    sudo ddclient -daemon=0 -debug -verbose -noquiet
    

    正常に動作すると SUCCESS と表示され、CloudflareのAレコードが現在のIPに更新されます。以後5分おきに自動更新されます。


    ステップ3:WireGuardサーバー設定

    インストール

    Ubuntu 24.04ではカーネルに内蔵されているため、ツールだけインストールします。

    sudo apt install -y wireguard
    

    鍵ペアの生成

    cd /etc/wireguard
    sudo wg genkey | sudo tee server_private.key | wg pubkey | sudo tee server_public.key
    sudo chmod 600 server_private.key
    

    サーバー設定ファイルの作成

    /etc/wireguard/wg0.conf:

    [Interface]
    Address = 10.0.0.1/24
    ListenPort = 13472
    PrivateKey = <server_private.keyの内容>
    PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o enp2s0 -j MASQUERADE
    PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o enp2s0 -j MASQUERADE
    
    [Peer]
    # デバイス名(コメント)
    PublicKey = <クライアントの公開鍵>
    AllowedIPs = 10.0.0.2/32
    

    enp2s0 はサーバーのネットワークインターフェース名です。ip a コマンドで確認してください(eth0 など環境によって異なります)。

    IPフォワーディングの有効化

    フルトンネル(全トラフィックをVPN経由)を使う場合に必要です。

    echo "net.ipv4.ip_forward = 1" | sudo tee /etc/sysctl.d/99-wireguard.conf
    sudo sysctl -p /etc/sysctl.d/99-wireguard.conf
    

    起動・自動起動設定

    sudo systemctl enable --now wg-quick@wg0
    
    # 接続状態の確認
    sudo wg show
    

    ステップ4:ポート転送設定(二重NAT環境)

    v6プラス + 二重NAT環境では、2箇所でポート転送を設定します。

    転送①:CTU(192.168.1.1)

    NTTのCTU管理画面(通常 http://192.168.1.1 でアクセス):

    機能: 静的IPマスカレード
    プロトコル: UDP
    ポート: 13472
    宛先IP: 192.168.1.2(IPoEルーターのWAN側IP)
    宛先ポート: 13472
    

    CTUの管理画面の場所はNTTの機種によって異なります。RT-500MIの場合は「詳細設定」→「静的IPマスカレード設定」にあります。

    転送②:IPoEルーター(192.168.10.1)

    IPoEルーターの管理画面:

    機能: ポートマッピング
    プロトコル: UDP
    外部ポート: 13472
    宛先IP: 192.168.10.138(Ubuntuサーバー)
    宛先ポート: 13472
    

    動作確認

    外出先(または携帯のモバイル回線)から接続テスト:

    # クライアントを接続してから
    ping 10.0.0.1
    

    注意: 自宅Wi-Fi(同一LAN)からはNATヘアピン制限により接続できません。必ず外出先・モバイル回線からテストしてください。


    ステップ5:クライアント設定

    事前準備(各デバイス)

    各デバイスのWireGuardアプリで鍵ペアを生成し、公開鍵をサーバーの wg0.conf に追記してください。

    # Ubuntuサーバー側で新しいPeerを追加(設定ファイルも更新)
    sudo wg set wg0 peer <新デバイスの公開鍵> allowed-ips 10.0.0.X/32
    sudo wg-quick save wg0
    

    VPN IPは 10.0.0.2 から順番に割り当てます(被らなければ番号は任意)。

    フルトンネル設定(全トラフィックをVPN経由)

    外出先で自宅のIPアドレスとして使いたい場合、公共Wi-Fiの通信を保護したい場合に使います。

    [Interface]
    PrivateKey = <このデバイスの秘密鍵>
    Address = 10.0.0.X/32
    DNS = 1.1.1.1
    
    [Peer]
    PublicKey = <サーバーの公開鍵>
    Endpoint = your-domain.com:13472
    AllowedIPs = 0.0.0.0/0, ::/0
    PersistentKeepalive = 25
    

    スプリットトンネル設定(自宅ネットワークのみVPN経由)

    YouTube等の一般的なネット通信は通常回線、自宅サーバーへのアクセスだけVPN経由にする場合。帯域・遅延を節約できます。

    [Interface]
    PrivateKey = <このデバイスの秘密鍵>
    Address = 10.0.0.X/32
    
    [Peer]
    PublicKey = <サーバーの公開鍵>
    Endpoint = your-domain.com:13472
    AllowedIPs = 10.0.0.0/24
    PersistentKeepalive = 25
    

    なぜ 192.168.10.0/24 を含めないか: 外出先のLANが同じサブネットを使っていた場合にルーティング競合が起きるためです。自宅サーバー(Ubuntu)には 10.0.0.1、Windows等の他のLAN機器には ssh -J user@10.0.0.1 user@192.168.10.125 のようにジャンプホスト経由でアクセスできます。

    接続手順

    Windows: WireGuardアプリ → トンネルをインポート → 「有効化」

    Android / iOS:

    1. WireGuardアプリをインストール

    2. 「+」→「ファイルまたはアーカイブから作成」または「QRコードをスキャン」

    3. トグルをオンにして接続


    ステップ6:UFWファイアウォール設定

    # WireGuardポートを許可
    sudo ufw allow 13472/udp
    
    # SSHのレート制限(ブルートフォース対策)
    sudo ufw limit ssh
    
    # UFW有効化
    sudo ufw enable
    sudo ufw status
    

    トラブルシューティング

    • Endpointに接続できない: ポート転送が2段階とも設定されているか確認。自宅Wi-Fiからのテストは失敗するので注意

    • wg show でハンドシェイクが更新されない: ファイアウォール(UFW)でポート13472/UDPが開放されているか確認

    • フルトンネルで接続後にインターネットにつながらない: net.ipv4.ip_forward = 1 が有効か確認。sudo sysctl net.ipv4.ip_forward で確認

    • DDNSがIPを更新しない: sudo ddclient -daemon=0 -debug でエラーを確認。APIトークンのスコープが正しいか確認


    まとめ

    v6プラス環境でWireGuardを動かすポイントをまとめます。

    • ポートは51820を避ける ── 13472など別のポートを使う

    • Cloudflareのプロキシはオフ ── UDPが通らなくなる

    • ポート転送は2段階 ── CTUとIPoEルーターの両方で設定

    • テストは外出先・モバイル回線から ── 同一LAN内からは接続できない

    次の記事③では、OpenCloudをDockerで構築し、Cloudflare Tunnelで外部公開するまでの手順を解説します。

     
     

    Sone

     
     
    新しいことを試すのが好きな趣味人。自宅サーバ構築やガジェット弄りなど、気になったらとりあえず手を動かしてみるタイプ。学んだことをここに残していきます。

    あなたへのおすすめ