Debian 12でWireGuardポイントツーサイトVPNサーバーを設定する方法

Debian 12 (Bookworm) 上で WireGuard を使用したポイントツーサイト VPN は、ラップトップ、スマートフォン、リモートワークステーションがサーバーにアクセスしたり、サーバー経由でトラフィックをルーティングしたりするための実用的な方法です。まず重要な点を明確にしておきましょう。WireGuard には特別な「サーバーモード」はありません。参加者はすべてピアです。ポイントツーサイト構成では、1 つの Debian ホストが安定した公開アクセス可能なハブとして機能し、各リモートデバイスはそれぞれ独自のキーペアとトンネル アドレスを取得します。

このガイドでは、Debian に同梱されている WireGuard ツール、wg-quickIPv4 フォワーディング、および nftables を使用します。Debian サーバーが root または sudo アクセス権を持ち、UDP ポートが51820サーバーに到達できることを前提としています。サーバーが自宅またはオフィスのルーターの背後にある場合は、その UDP ポートを Debian ホストに転送する必要があります。ISP がキャリアグレード NAT (CGNAT) を使用している場合、通常のルーターのポート転送では不十分な場合があります。WireGuard 自体のトラブルシューティングを行う前に、実際に到達可能なパブリック アドレスがあることを確認してください。

この設定は何をしますか?

このVPNの例では、 を使用します10.8.0.0/24。サーバーは で10.8.0.1、最初のクライアントは です10.8.0.2。クライアントは、IPv4インターネットトラフィックがDebianサーバーを経由して送信されるフルトンネルVPN、または選択されたプライベートネットワークのみがWireGuardを使用するスプリットトンネルのいずれかとして構成できます。

Debian の WireGuard ドキュメントには、WireGuard がディストリビューション パッケージを通じて利用可能であることが明記されています。また、公式の WireGuard クイックスタートでは、鍵生成、wg-quickおよびオプションの永続的なキープアライブ動作について説明しています。詳しくは、Debian WireGuard ドキュメント、公式の WireGuard クイックスタート、および Debian のwg-quick マニュアル ページをご覧ください。

ステップ1:WireGuardとnftablesをインストールする

パッケージのメタデータを更新してから、WireGuardとnftablesをインストールしてください。

sudo apt update
sudo apt install wireguard nftables

よくある誤解として、Debian 12には外部のWireGuardカーネルモジュールが必要だというものがありますが、そうではありません。WireGuardは長年Linuxカーネルに組み込まれており、Debianのパッケージには必要なユーザー空間管理ツールが揃っています。対策:検証されていないインストールスクリプトをダウンロードするのではなく、Debianパッケージを使用してください。

Debianターミナルでaptを使ってwireguardとnftablesパッケージをインストールする
トンネル構成を作成する前に、DebianのパッケージリポジトリからWireGuardとnftablesをインストールしてください。

ステップ2:サーバーキーペアを生成する

制限付きアクセス権限を持つキーファイルを作成する。

sudo -i
install -d -m 700 /etc/wireguard
umask 077
wg genkey | tee /etc/wireguard/server_private.key | wg pubkey > /etc/wireguard/server_public.key
chmod 600 /etc/wireguard/server_private.key
cat /etc/wireguard/server_public.key

秘密鍵は絶対に秘密にしておく必要があります。公開鍵はクライアントの設定ファイルにコピーするものです。理想的には、各クライアントの秘密鍵はサーバーではなく、そのクライアント上で生成してください。そうすれば、サーバーはクライアントの秘密鍵を保持する必要がなくなります。

DebianターミナルにWireGuardの鍵生成コマンドと生成された公開鍵が表示されている。
制限的なファイル権限を使用しながら、DebianサーバーのWireGuard秘密鍵を生成し、その公開鍵を導出します。

ステップ3:IPv4転送を有効にする

VPNトンネルは正常に確立されるものの、ルーティングされたトラフィックは失敗する場合があります。その理由は、LinuxのIPフォワーディングがWireGuard自体とは別のカーネル設定であるためです。永続的なsysctlファイルを作成してください。

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

最終コマンドは を報告するはずですnet.ipv4.ip_forward = 1。Debian のカーネルドキュメントでは、 はip_forwardIPv4 パケットの転送を有効にするスイッチとして説明されています。対処法: トンネルインターフェイスが自動的にルーティングを有効にすると想定するのではなく、この値を明示的に確認してください。Debianの ip(7) マニュアルとsysctl.conf ドキュメントを参照してください。

Debianターミナルにsysctl設定ファイルでnet.ipv4.ip_forwardが1に設定されていると表示される。
DebianがWireGuardインターフェースと他のネットワーク間でパケットをルーティングできるように、IPv4転送を有効にしてください。

ステップ4:サーバー構成を作成する

サーバーの秘密鍵を読み取り、次に以下を作成します/etc/wireguard/wg0.conf。

[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY

[Peer]
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = 10.8.0.2/32

次に、ファイルを保護します。

sudo chmod 600 /etc/wireguard/wg0.conf

AllowedIPsは、ファイアウォールのような許可リストだと誤解されがちですが、ルーティングも制御します。サーバー側では、10.8.0.2/32このピアに を割り当てることで、WireGuard に対して、そのトンネル アドレス宛のパケットはこのクライアントに属すると認識させます。各クライアントに固有のアドレスと個別の[Peer]ブロックを割り当ててください。

SaveConfig = trueもう1つの便利な選択肢は、このファイルを手動で管理する予定がある場合は省略することです。を使用するとSaveConfig、wg-quickシャットダウン時にライブ状態を構成に書き戻すことができ、手動で編集した内容が上書きされる可能性があります。対処法:ライブ状態を明示的に保存したい場合を除き、ファイルは宣言型のままにしてください。

Debianターミナルに、WireGuardインターフェースと1つのピアを備えたwg0.confサーバー構成が表示されている。
サーバー側のwg0.confファイルを作成し、トンネルアドレス、UDPリスニングポート、サーバーの秘密鍵、およびクライアントピアを1つ指定します。

ステップ5:nftablesマスカレードの設定

フルトンネルクライアントがDebianサーバー経由でインターネットにアクセスする場合、最も簡単な構成はIPv4マスカレードです。まず、サーバーの送信インターフェースを特定します。

ip route get 1.1.1.1

devの後に、eth0、ens3、 などのインターフェースを探してくださいenp1s0。常に であるとは限りませんeth0。

既にNATテーブルを管理している場合は/etc/nftables.conf、ファイルを置き換えるのではなく、以下のNATテーブルを既存のルールセットにマージしてください。

table ip wireguard-nat {
    chain postrouting {
        type nat hook postrouting priority 100; policy accept;
        oifname "eth0" ip saddr 10.8.0.0/24 masquerade
    }
}

eth0実際の送信インターフェースに置き換えてください。ロード前に検証してください。

sudo nft -c -f /etc/nftables.conf
sudo systemctl enable --now nftables
sudo nft list ruleset

WireGuardではNATは必須ではありません。宛先LANに既にへの戻りルートがある場合10.8.0.0/24、マスカレードなしでルーティングされたアクセスが機能します。NATは、リモートクライアントにサーバーの既存のインターネットルートを使用させたい場合や、他の場所の戻りルートを制御しない場合に特に便利です。対処法:単純なインターネット出力の場合はマスカレードを使用し、ネットワークを制御し、送信元アドレスを保持したい場合は明示的なルーティングを推奨します。

Debian上のGNU nanoで、WireGuardサブネットに対するnftablesのpostroutingマスカレードルールを表示
10.8.0.0/24 専用の nftables NAT ルールを追加し、有効にする前にルールセットを検証してください。

ファイアウォールルールも必要ですか?

それは、既にインストールされているファイアウォールによって異なります。nftables の入力ポリシーが制限的な場合は、受信 UDP を許可してください51820。フォワードチェーンにデフォルトのドロップポリシーがある場合は、そこから目的の宛先へのトラフィックwg0と確立された戻りトラフィックを許可するルールを追加してください。クラウド VPS プロバイダーは、UDP を許可する必要がある別のセキュリティグループまたはプロバイダーファイアウォールを持っている場合もあります51820。

リモートのSSHサーバーに、まったく新しいデフォルト設定のファイアウォールルールセットを安易に貼り付けないでください。接続が遮断される可能性があります。対策:sudo nft list rulesetWireGuardを既存のファイアウォールに統合し、その設定を確認してください。

ステップ6:クライアントプロファイルを作成する

クライアント側では、WireGuardアプリまたはを使用して独自のキーペアを生成しますwg genkey。フルトンネルIPv4プロファイルは次のようになります。

[Interface]
Address = 10.8.0.2/24
PrivateKey = CLIENT_PRIVATE_KEY
DNS = 1.1.1.1

[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = vpn.example.com:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

vpn.example.comサーバーのパブリック DNS 名またはパブリック IP に置き換えてください。このDNS行はオプションであり、クライアントの実装サポートは異なります。スプリット トンネルの場合は、AllowedIPsVPN を通過するネットワークのみに変更してください。たとえば、10.8.0.0/24プライベート LAN などです192.168.50.0/24。

PersistentKeepalive = 25もオプションです。WireGuardの公式ドキュメントでは、NATまたはステートフルファイアウォールの背後にあるピアがアイドル期間中にマッピングを保持する必要がある場合、25秒が適切な値として推奨されています。これはパフォーマンス設定ではなく、すべてのクライアントで必須ではありません。推奨されるアクション:アイドル時間後に到達不能になるローミングクライアントまたはNATクライアントに主に使用してください。

Debian上のGNU nanoで、サーバーエンドポイント、AllowedIPs、およびPersistentKeepaliveを含むWireGuardクライアントプロファイルを表示
クライアントに自身の秘密鍵、サーバーの公開鍵、エンドポイント、ルーティングポリシー、およびオプションのキープアライブを設定します。

ステップ7:起動時にWireGuardを開始する

まずnftablesを起動し、次にWireGuardインターフェースを有効にしてください。

sudo systemctl enable --now nftables
sudo systemctl enable --now wg-quick@wg0
systemctl is-active nftables
systemctl is-active wg-quick@wg0

wg-quick@wg0を読み取ります/etc/wireguard/wg0.conf。wg-quickマニュアルでは、この命名規則が、の下に保存されている構成の通常のショートカットであることを確認しています/etc/wireguard。アクション: より複雑なネットワークマネージャ設計がない限り、カスタムブートスクリプトではなくサービスを使用してください。

Debianターミナルでnftablesとwg-quick@wg0を有効にし、両方のサービスがアクティブであることを確認します。
nftablesとwg-quick@wg0 systemdサービスを有効にして、再起動後にVPNが自動的に復旧するようにします。

ステップ8:ハンドシェイクとトラフィックを確認する

クライアントを接続し、サーバーを検査します。

sudo wg show
ip address show wg0
ping -c 3 10.8.0.2

正常なピアであれば、通常、トラフィックがトンネルを通過した後、最近のハンドシェイクとゼロ以外の転送カウンタが表示されます。フルトンネルを設定した場合は、信頼できるIPチェックサービスを使用してクライアントのパブリックIPv4アドレスを確認してください。これはDebianサーバーの送信アドレスと一致するはずです。

Debianターミナルにwg showの出力が表示され、最近のハンドシェイクと10.8.0.2へのpingが成功している。
ピアが最近WireGuardハンドシェイクを完了していること、転送カウンタが増加していること、およびクライアントトンネルアドレスが応答していることを確認してください。

よくある問題とその本当の意味

症状考えられる原因次の便利なアクション
ハンドシェイクなしキー、エンドポイント、UDPポート、アップストリームファイアウォール、ルーターのポートフォワーディング、またはCGNATが間違っています。UDPポート51820がDebianホストに到達していることを確認し、両方の公開鍵を再確認してください。
ハンドシェイクは機能するが、インターネットに接続できないIPv4転送、転送ファイアウォールルール、またはNATが欠落していますsysctl net.ipv4.ip_forward、、nft list rulesetおよび送信インターフェース名を確認してください。
10.8.0.1にはアクセスできるが、プライベートLANにはアクセスできない。クライアントにLANルートがないか、LANにリターンルートがありませんクライアントにLANサブネットを追加しAllowedIPs、ルーティングまたはNATを適切に設定してください。
一部のサイトは停止しますパスMTUの問題の可能性MTUを強制する前に、より小さなパケットでテストしてください。MTUwg-quickは自動的に選択されるため、他のガイドが1420に設定しているからといって、1420に設定しないでください。
IPv4はVPNを使用するが、IPv6は使用しないプロファイルはルートのみをルーティングします0.0.0.0/0IPv6の設定はWireGuard経由で行うか、IPv6の漏洩を防ぐことが必須条件の場合は、クライアントのIPv6を意図的に無効化/ブロックしてください。

全面トンネルか分割トンネルか:どちらを選ぶべきか?

信頼できない Wi-Fi 上のトラフィックを保護する場合、またはインターネット トラフィックを Debian サーバーから外部に出す場合は、フル トンネルを使用します。サーバー、ホーム ネットワーク、ラボ、または内部アプリケーションへのリモート アクセスのみが必要で、通常のインターネット トラフィックをローカルにとどめたい場合は、スプリット トンネルを使用します。選択は主にクライアントによって制御されますAllowedIPs。

小規模なポイントツーサイト構成の場合、上記の構成で保守可能なベースラインを確立できます。クライアントごとに1つのピアブロック、固有のトンネルアドレス、Debian管理サービス、そして実際に必要なルーティング動作のためのnftablesが必要です。大規模な構成では、WireGuardプロトコル自体はシンプルですが、鍵配布、ピアライフサイクル、DNS、ログ記録、構成管理などが運用上の懸念事項となります。

最終確認チェックリスト

  • wg-quick@wg0アクティブであり、wg0持っています10.8.0.1/24。
  • サーバーはUDPで待機しており51820、そのポートは上流のファイアウォールまたはルーターを経由してアクセス可能です。
  • 各クライアントは、それぞれ独自の鍵ペアと/32サーバー上の固有のエントリを持っています。
  • net.ipv4.ip_forward1ルーティングされたアクセスが必要な場合に等しくなります。
  • nftablesのマスカレード機能は、意図的にルーティングされたリターンパスを使用しない限り、フルトンネルのインターネットアクセスに存在します。
  • wg showクライアントがトラフィックを送信した後、最近のハンドシェイクを表示します。
  • クライアントの要望はAllowedIPs、意図された全トンネルまたは分割トンネルの設計と一致しています。

これらの手順は、Debian 12 および Debian で利用可能な標準の WireGuard ツールを対象としています。ネットワーク トポロジ、アップストリーム NAT、クラウド ファイアウォール、プライベート LAN ルーティング、および IPv6 ポリシーは環境固有のものであるため、WireGuard の設定だけではこれらの要素を推測することはできません。接続の問題をすべて WireGuard の障害として扱うのではなく、それぞれを個別に検証してください。

コメントを残す

失われたパーティションとハードディスクデータを安全に復元する方法

失われたパーティションとハードディスクデータを安全に復元する方法

TestDiskとPhotoRecを使って、失われたパーティションやファイルを復元する方法を学びましょう。ソースドライブを保護し、安全にスキャンを行い、復元したデータを別のディスクに保存します。

LinuxデスクトップでQRコードをスキャンする方法

LinuxデスクトップでQRコードをスキャンする方法

CoBangを使えば、Webカメラまたは画像ファイルでLinux上でQRコードをスキャンできます。インストールオプション、セットアップ手順、Flatpakカメラへのアクセスに関する修正方法については、こちらをご覧ください。

Cameractrlsを使ってLinuxでウェブカメラの設定を変更する方法

Cameractrlsを使ってLinuxでウェブカメラの設定を変更する方法

Cameractrlsを使用してLinux上でウェブカメラの設定を変更しましょう。露出、色、フリッカー低減などのサポートされているコントロールを調整し、互換性のあるビデオモードを確認できます。

LinuxにPhpStormをインストールする方法:ツールボックス、Tar.gz、Snap、およびAUR

LinuxにPhpStormをインストールする方法:ツールボックス、Tar.gz、Snap、およびAUR

LinuxにPhpStormをインストールするには、JetBrains Toolboxを使用するか、スタンドアロンのtar.gzアーカイブを使用するか、SnapおよびArch AURオプションを選択してください。Javaは既にバンドルされています。

LinuxにCisco Packet Tracerをインストールする方法

LinuxにCisco Packet Tracerをインストールする方法

Cisco Packet Tracer 9.0.1 を Ubuntu 64 ビット版にダウンロードし、APT を使用して DEB パッケージをインストールし、ターミナルでライセンスに同意してサインインすると、ラボを開始できます。

LinuxでCD-ROMをISOイメージとしてバックアップする方法

LinuxでCD-ROMをISOイメージとしてバックアップする方法

Linux上でGNOME Disksまたはddコマンドを使用してCD-ROM ISOイメージを作成します。光学ドライブを識別し、コピーを監視し、イメージを検証し、破損したディスクやオーディオディスクに別のツールが必要な場合を把握できます。

XFCE 4でデュアルパネルを設定する方法

XFCE 4でデュアルパネルを設定する方法

各ディスプレイごとに個別のXFCE 4パネルを作成し、2番目のパネルを右側の出力に割り当て、位置とサイズを調整し、必要なランチャーとステータス項目を追加します。

LinuxでGIMPを使って画像を切り抜く方法

LinuxでGIMPを使って画像を切り抜く方法

LinuxでGIMPを使って写真の背景を削除する方法:被写体をトレースし、選択した背景を削除し、透明度を保持して、再利用可能なPNG形式でエクスポートします。

FlightGearを無料でダウンロード:公式インストールガイド

FlightGearを無料でダウンロード:公式インストールガイド

FlightGearは公式サイトから無料でダウンロードできます。Windows、macOS、Linuxの各パッケージを比較し、データファイルをインストールして、最初のフライトを開始しましょう。

OKSampler:キーボードビートのための無料かつシンプルな音楽サンプラー

OKSampler:キーボードビートのための無料かつシンプルな音楽サンプラー

OKSamplerはMP3クリップをキーボードのキーにマッピングし、音声をループ再生できます。この旧型フリーウェアの機能、旧機能が失われた箇所、ダウンロード前に確認すべき点について解説します。