ピックアップ

WireGuardを個人的に試した件

VPNの理解のために、

WireGuardを使用して、

試すのが良いと意見を聞き、

それを試すことにした。

あくまで、

個人的な備忘録なので、

ChatGPT等に聞きながら、

自分なりに見返したいところだけ、

この記事にメモしてる。

前提環境 / 準備

環境としては、

Ubuntu

を使って試した。

sudo apt install wireguard -y

で導入。

設定

メモ

2つのサーバー間

──────────────────
サーバーとクライアントで何が違うか
──────────────────

  1. A(サーバー)側
  • ListenPort を開けて待ち受ける
  • ピアの公開鍵を登録して AllowedIPs を指定
  • Endpoint は不要
    → 「自分から接続しに行く」わけじゃなく、相手が接続してくるのを待つだけ
  1. B(クライアント)側
  • 自分の秘密鍵・VPN内IPを設定
  • 接続先サーバー A の公開鍵を登録
  • AllowedIPs で許可するルーティングを指定
  • Endpoint 必須
    → 「どこに接続するか」を知っている必要がある(AのグローバルIP:51820)

要するに、両方の設定ファイルは構造は同じ [Interface][Peer] だけど、値の意味が逆向きになるんだよね。

イメージで言うと:

Droplet A (サーバー)
[Interface] → 自分の秘密鍵、IP、ListenPort
[Peer] → Bの公開鍵、AllowedIPs

Droplet B (クライアント)
[Interface] → 自分の秘密鍵、IP
[Peer] → Aの公開鍵、AllowedIPs、Endpoint

なるほど、

だけど、

片方だけ、Endpointが入るのがわからん。

Interface, Peerがわからんからか。

そもそも、Interface, Peerとは?

──────────────────
WireGuardの本質:VPNトンネル
──────────────────

VPNはざっくり言うと “自分と相手を安全につなぐ暗号化トンネル” だよね。
そのトンネルを作るために必要なのが鍵とIP情報。

  • Interface → 「自分側のトンネル情報」
  • Peer → 「相手側のトンネル情報」

──────────────────
Interface(自分)とは?
──────────────────

  • 自分が持つ秘密鍵
  • 自分のVPN内のIPアドレス
  • (サーバーならListenPortで待ち受け)

つまり 「自分のトンネルをどう作るか」 を決める部分。
ここを見れば「このノードはVPN上でどのIPを持ってるのか、どの鍵で通信するのか」がわかる。

──────────────────
Peer(相手)とは?
──────────────────

  • 相手の公開鍵
  • 相手に許可するIP(AllowedIPs)
  • (クライアントなら接続先としてEndpoint)

つまり 「この相手と通信していいか」 の情報。
Peerに書いた公開鍵とIPにだけ通信が許可される。
ここを見ると「誰とつながるのか」がわかる。

──────────────────
図でイメージすると

Droplet A (サーバー)
Interface → 自分の鍵、IP、ListenPort
Peer      → Bの公開鍵、AllowedIPs

Droplet B (クライアント)
Interface → 自分の鍵、IP
Peer      → Aの公開鍵、AllowedIPs、Endpoint

これ、

Interface は必ず「自分」、Peer は必ず「相手」

がポイントらしい。

さらに、

WireGuard は双方向通信できるけど、設定上は

どちらかを“起点”として接続を開始するかどうか

という役割分担で考えると良いらしい。

なるほど、

少しわかったような気がする。

整理

ポイントはこう整理できる:

──────────────────

  1. 双方向通信は可能
    ──────────────────
  • WireGuardはトンネルが一度張られると、両方向で暗号化通信できる
  • だから「どちらも設定ファイルは必要」
  • つまり両方に Interface と Peer の情報を書く必要がある

──────────────────
2. でも接続の開始は片方が主体
──────────────────

  • 「サーバー」と呼ぶ方は ListenPort を開いて待つだけ
  • 「クライアント」と呼ぶ方は Endpoint を指定して接続しに行く
  • 接続が確立すれば、双方向通信はどちらからもできる

──────────────────
3. まとめると
──────────────────

  • 両方に設定が必要 → トンネルを作るには双方が自分用Interfaceと相手用Peerを持つ
  • 接続開始は片方だけ → Endpointを書いて自分から接続するのはクライアントだけ
  • トンネル確立後は双方向通信可能 → データのやり取りはどちらからでもOK

視点としては、

  • 設定は「自分視点」
  • 接続開始役を決めると整理しやすい

こう考えると、AとBのconfが「同じ構造で値だけ違う」理由も納得できる。

通信試す

サーバーA,Bで

sudo wg-quick up wg0

をやって立ち上げたら、

サーバーA

ping 10.0.0.1

サーバーB

ping 10.0.0.2

これでうまく接続できました。

ピックアップ

おすすめ書籍

コメント一覧

コメントはまだありません。

コメント送信

コメントを残す

広告

おすすめ記事