DockerでWireGuardを簡単にインストールする方法

自宅サーバー
スポンサーリンク

これまでOpenVPNを使って外出先からVPN(トンネル)を張って自宅のNASに接続したり、録画予約をしたり、便利に使ってきました。

これはこれで便利に使えていたのですが、VPNの有効な選択肢としてOpenVPNに比べて高速&堅牢なWireGuardが出てきたので、早速導入してみました。

ここ2か月ほど使ってみましたが、安定して使えることが確認できたので、DockerでWireGuardをインストールする方法について記事にしたいと思います。

非常に簡単にインストールできますし、スマホのアプリ(android/ios)もあるので使うのも難しくありません。

私

ロゴはダサいけど、いいかんじ!

VPNとは?

VPN(Virtual Private Network)とは、直訳すると「仮想専用網」です。

簡単に言うと、疑似的な自分専用の通信経路を確保し安全な通信を可能にします。

例えば、駅やカフェにある公衆無線LAN(フリーWi-Fi)では、インターネットに接続するまでの経路で悪意のある第三者が介在し、個人情報の盗聴や通信を改ざんされるリスクがあります。

仮に、信頼のおけるネットワークを使ったとしても、サーバ側で外部(インターネット)に向けてポートを解放している場合、そこからセキュリティ攻撃を受けるリスクがあります。

VPNは端末とサーバの間で 通信を暗号化することにより疑似的に自分専用の通信経路を構築し、第三者の盗聴や改ざんを防ぐことができます。

これにより、サーバ側で直接的にサービスにアクセスするためのポートを解放せずとも安全に通信を実現することができます。

ちなみに、本ブログでは以前にOpenVPNを紹介しています。

WireGuard

WireGuardはLinuxカーネル内のモジュールとして実行されていることから、接続時のネゴシエーションが速い(低遅延)と言われています。

また、VPNの要ともいわれる暗号通信においても、強力な暗号化規格を採用しており、高速かつ堅牢なVPNを実現する新たな選択肢となりました。

OpenVPNでも十分実用的だと言われていた安全性が更に向上し、加えて高速化しているなら、このWireGuardを使わない理由はありません。

ただ、WireGuardはUDPでしかVPN(トンネル)を張ることができないという制約があるので、公衆のWi-Fiから443/TCPで使いたいならOpenVPNということになります。

インストール手順

では早速、WireGuardの導入方法について解説していきます。

Dockerを使ってインストールします。

Docker Hub

前提

git、dockerおよびdocker-composeがインストールされていることが前提です。

もし、まだインストールしていない場合はこちらを参照してインストールしましょう。

私のマシンはこれです。

ECS 小型デスクトップパソコン LIVAZ-8/240-W10Pro(N4200)TS

メモリ8GB以上を選択すれば性能的に問題はないと思います。

Windows10マシンですが、私はUbuntuを上書きインストールして自宅サーバを構築しています。

Raspberry Piにも導入できます。

Raspberry Pi 4 Model B /ラズベリーパイ4B(8GB RAM)技適マーク付/MicroSDHCカード128GB 一式セット

docker-compose.yml

適当な場所に任意のプロジェクト(ディレクトリ)を作成し、その配下にdocker-compose.ymlを作成します。

エディタは何でもOKです。

オリジナルからの修正箇所

10,11行目:ホストのuidとgidを設定。

12行目:ログの時刻などを合わせるためにTZ(Time Zone)を設定。

13行目:ホストのURLを入力。IPアドレス/ドメイン指定が可能。

14行目:WireGuardのUDPポートを指定。デフォルトは58120。25番とか53番なら公衆無線LANからアクセス可能と思われるが、自宅サーバ環境の状況に合わせて設定。

15行目:クライアント(ピア)の数or識別子。整数指定だとピアの数。識別子の場合はカンマ区切りで指定。(例)PEERS=myPC,myPhone,myTablet

17行目:VPN(クライアントに割り当てる)のネットワークアドレスを設定。

18行目:疎通を許可するネットワークを指定。ANYの場合は、0.0.0.0/0を指定するか、この行毎削除。

20行目:WireGuardのコンフィグファイルを共有するパスを指定。

26行目:サーバ起動時にWireGuardも起動させる場合はalwaysを指定。

準備はたったこれだけ。

私

すばらC!

コンテナ起動

以下のコマンドでコンテナを起動します。

これで、サーバにwireguardが立ち上がりました。

ピア情報

wireguardのクライアントはpeerと呼ばれます。

wireguardクライアントの設定には、peer情報(ピア情報)が必要で、これはサーバ側の/config/配下に生成されます。

peer情報はdocker-compose.ymlで指定した数だけ生成されていて、peerXのXでpeerを識別できます。

スマホのアプリ側の解説は別の記事で紹介したいと思います。

私

記事にしましたので、参考にしてください。

まとめ

外部から自宅サーバにアクセスする際のVPNの手段として、WireGuardを紹介しました。

WireGuardはOpenVPNよりも高速&堅牢ということが売りとされています。

実際、使ってみましたが接続処理はかなり早かったのが体感でもわかりました。

ただ、WireGuardはUDPでしか使えないそうなので、443番ポートで使う場合は従来のOpenVPNを使うことになりです。

WireGuardとOpenVPNを利用状況に応じて使い分けて活用してください。

私

よろしければSSLHもどうぞ。

参考になれば幸いです。

(参考)Android&iOSアプリでWireGuardを使う方法

スマホのOSに応じて、以下の記事を参考にしてみてください

コメント

  1. カズ より:

    初めまして。
    カズです。

    先日テレビに関することで調べていたところ小茂根さんのブログを見つけました。
    今現在は、Ubuntu20.04にPx-Q3U4を導入し視聴することができています。
    これも小茂根さんのおかげだと思っております。ありがとうございます。

    そして、今回お聞きしたいことがありコメントさせていただきました。

    今現在は、wireguardによるVPN構築に挑戦しているのですが、ネットワーク関連に全然詳しくなく苦戦している状態です。

    (環境)
    デフォルトゲートウェイ:192.168.11.1
    サブネットマスク   :255.255.255.0

    Ubuntu20.04
    IPアドレス(固定) :192.168.11.20

    今回は17行目と18行目にあたるこの部分に何を入力すればよいかをお聞きしたくコメントいたしました。

    – INTERNAL_SUBNET=10.2.93.0 #optional
    – ALLOWEDIPS=10.29.3.0/24 #optional

    お忙しいところ恐縮ですがよろしくお願いいたします。

    • こもね より:

      >カズさん
      私の記事を参考にしてくださりありがとうございます。
      お役に立てて私も嬉しいです。

      今回は17行目と18行目にあたるこの部分に何を入力すればよいかをお聞きしたくコメントいたしました。

      – INTERNAL_SUBNET=10.2.93.0 #optional
      – ALLOWEDIPS=10.29.3.0/24 #optional

      INTERNAL_SUBNETには、VPNで接続する内部(ローカル)アドレス帯を設定してください(任意のNW)。
      自宅のNWと重複しなければ、記事と同じ10.2.93.0でもOKです。

      ALLOWEDIPSはVPNで接続した上記NWとアタッチするNWを指定します。
      自宅のNWを指定することでVPNで自宅NWのアクセスが可能になり、VPN越しにインターネットに抜けたり自宅のサーバ(録画サーバ等)の参照が可能になります。

      例えば、カズさんの自宅で録画サーバを同一NW(192.168.11.*/24)に構築されているなら
      – INTERNAL_SUBNET=10.2.93.0 #何でも良い
      – ALLOWEDIPS=192.168.11.0/24
      で良いかと思います。

タイトルとURLをコピーしました