ProxmoxはLinuxのKVMを使って簡単に高機能な仮想マシン(VM)環境を構築できます。
さらに、軽量コンテナ環境であるLXC(Linuxコンテナ)も同じインターフェース上で管理することができます。
このLXCコンテナ、同じコンテナであるDockerと比較するとDockerが「アプリコンテナ」と言われているのに対し、LXCは「OSコンテナ」と言われるほど、どちらかといえば軽量な仮想マシン(VM)的な使い方ができる点が特徴です。
そしてこの「軽量な仮想マシン(VM)的な使い方」により、LXCコンテナ内にDockerを導入して(ネスティング)動かすこともできます。
本記事ではLXCコンテナのネスティング機能によりDockerを導入し、DockerコンテナとしてWireGuardおよびダイナミックDNS環境を構築していきます。
ProxmoxとLXCコンテナ
Proxmoxとは?
ProxmoxとはDebianベースの仮想システムであり、KVMによる仮想マシン(VM)の構築・管理が行えます。
2024年になってVMWare社がライセンス体系を大きく変更したことで無償版のESXiが提供されなくなりました。
ProxmoxはすでにESXiと人気を二分する仮想サーバー環境でしたが、現在はその(ESXi)代替ホームサーバーとして非常に利用者が増えているようです。
LXCコンテナとは?
ProxmoxはKVMによる仮想マシン(VM)の構築・管理ができると同時に、LXC(Linuxコンテナ)によるコンテナ機能も利用することができます。
LXCはDockerと同じでコンテナという仕組みに分類されますが、Dockerが「アプリコンテナ」と言われるのに対しLXCは「OSコンテナ」と言われます。
LXCの使い方としては「超軽量のLinuxサーバーをあっという間に構築できる」というイメージです。
仮想マシン(VM)を構築してもいいんだけど、簡単に試したい・サクッと環境構築したい、リソース(CPU/メモリ)をあまり使いたくない、という使い方の場合に最適な仕組みがLXCコンテナです。
LXCコンテナでdockerを動かす
LXCコンテナを使えばサクッとDebianなどのLinux環境を構築することができます。
LXCコンテナによるLinux環境は構築(インストール)もテンプレートベースの簡単インストールだし、リソース(CPU/メモリ)も非常に小さな環境で動作します。
そして、LXCコンテナでLinux環境を構築すればその中にDockerをインストールすることができます。
LXcコンテナにDockerがインストールできれば、(当然ながら)星の数ほど公開されているDockerイメージをインストールしてアプリケーションを簡単に利用することができるようになります。
Proxmoxの使いやすい環境を利用してDockerアプリを使いたい、という場合にはProxmoxの仮想マシン(VM)またはLXCコンテナでDockerサーバーを構築する、というのは有効な手段です。
Proxmox環境でWireGuard VPN環境を構築
本記事の目標は自宅WireGuardサーバーの構築です。
いつでも外出先(インターネット側)から自宅へWireGuardによるVPN接続ができる環境の構築です。
このWireGuardによる自宅VPN環境を「Proxmox & LXC & dockerで構築してみよう」というのが本記事の内容になります。
この目標を達成するための仕組みと構築手順について説明します。
WireGuard環境で必要なもの
WireGuardサーバー機能
本記事ではWireGuardのサーバー(待ち受け)側機能として「WG-Easy」というDockerコンテナイメージを利用します。
DockerコンテナをインストールするだけでWireGuardのサーバー(待ち受け)側環境が一発構築できます。
さらに、WireGuardでちょっと面倒なピア(接続相手)側の接続管理(IPアドレス/WireGuard秘密鍵・公開鍵)の管理もウェブUIでできる優れものです。
ダイナミックDNSの管理機能
本記事では自宅へ接続する場合の名前解決としてフリー(無料)のダイナミックDNSサービスである「DDNS Now」を利用させていただきました。
そして、「DDNS Now」への定期的な最新IPアドレスの登録・更新するためのダイナミックDNSクライアントとして「DDNS-Updater」を利用します。
「DDNS-Updater」は多くの有料・無料のダイナミックDNSサービスに対応しているので、サービスごとの定型設定を行うことで簡単にIPアドレスの登録・更新ができます。
そして、標準対応していないダイナミックDNSサービスであっても「カスタム(Custom)」機能により対応可能です。
今回利用した「DDNS Now」は「DDNS-Updater」の標準対応ダイナミックDNSではないので、この「カスタム(Custom)」機能を使って環境構築していきます。
自宅ルーターのポート転送機能
外部(インターネット側)から自宅のWireGuardサーバーへ接続するためには、自宅ルーターにポート転送機能が必要です。
本記事では自宅ルーターとしてOpenWrtルーターおよびバッファローの「WXR-6000AX12S」を前提とし、ポート転送設定を行っていきます。
なお、比較的安価な初心者向け(?)ルーターにはポート転送機能のないルーターも存在します。
このようなポート転送機能のないルーターの場合には外部(インターネット側)から自宅サーバー(WireGuardサーバー)への接続はできません。
WireGuardのDockerコンテナ「WG-Easy」
WireGuardの機能をDockerイメージとして配布されているのが「WG-Easy」です。
WG-EasyをDockerコンテナとしてインストールすることでDockerのサーバー側(待ち受け側)環境が一発で構築されるのはもちろんのこと、面倒なクライアント側(接続する側)のIPアドレス管理や鍵管理を専用のウェブインターフェースで管理することができる、というパッケージになります。
WireGuardは環境構築が簡単なのですが、接続相手(ピア)が増えてくるとその接続相手ごとのIPアドレス管理や鍵管理がちょっと面倒です。
WG-Easyを使えばその面倒なIPアドレス管理・鍵管理もWG-Easyが勝手にやってくれます。
本記事ではサーバー側(待ち受け側)の環境構築およびピア(接続相手)の管理の仕組みとして「WG-Easy」を利用します。
- DockerコンテナでWireGuardサーバー環境(待ち受け側)を構築できる
- ピア(接続相手)の定義ファイルを自動生成してくれる
- もちろんピアのIPアドレス・鍵も管理してくれる
- ピアの追加・削除も自由、一時停止も可能
- TrueNASやQNAP/SynologyなどのNASシステムでも利用可能
ダイナミックDNSコンテナ「DDNS-Updater」
外部(インターネット側)から自宅のWireGuard(WG-Easy)へ接続するためには(一般的に)ダイナミックDNSによる名前解決の仕組みが必要です。
多くの市販ルーターには有料・無料のダイナミックDNSサービスが添付されています。
また、「no-IP」などのような無料で提供されているダイナミックDNSサービスもたくさんあります。
これらダイナミックDNSに対して定期的に最新の自宅IPアドレスを登録・更新してくれる仕組みがダイナミックDNSクライアントであり、この機能をDockerイメージとして提供しているのが「DDNS-Updater」です。
本記事ではダイナミックDNSサービスとして「DDNS Now」を利用させていただき、「DDNS Now」への定期的なIPアドレス更新の仕組みとして「DDNS-Updater」を利用します。
- DockerコンテナでダイナミックDNSクライアント環境を構築できる
- 非常にたくさんのダイナミックDNSサービスに対応
- 標準対応していないDDNSサービスも「カスタム(Custom)」登録ができる
- TrueNASやQNAP/SynologyなどのNASシステムでも利用可能
STEP⓪ Proxmoxのインストール
まず最初にProxmoxをインストールして仮想サーバー環境を構築する必要があります。
本記事ではここから(Proxmox環境構築)の手順を説明してしまうと非常に長文記事となってしまいます
当サイトでは手のひらサイズのミニPC「HUNSN RJ03」にProxmoxをインストールして仮想サーバーとする記事を公開しています。
Proxmoxのインストール手順についてはこちらの記事を参考にしてください。
STEP① ProxmoxのLXCコンテナへDebianをインストール
では、仮想サーバーProxmox環境へLXCコンテナとして「Debian-12-Standard」をインストールします。
Docerがアプリケーションコンテナと言われているのに対し、LXCコンテナはOSコンテナとも言われます。
LXCコンテナは仮想マシン(VM)とほぼ同等のOS環境を非常に軽量なコンテナとして構築できます。
そして、Debian12(Bookworm)のLXCコンテナ版が「Debian-12-Standard」テンプレートとなります。
LXCコンテナのインストール
Proxmoxサーバー環境へ「Debian-12-Standard」をインストールしていきます。
Proxmoxは標準でLXCコンテナ環境に対応しており、さまざまなLXCテンプレートからLXCコンテナを構築することができます。
コンテナテンプレートの更新
まず、Proxmoxが対応しているLXCコンテナ環境で利用可能なLXCテンプレートのリストを最新化しておきましょう。
メニュー「ノード(自分のサーバー)⇒シェル」からテンプレートのアップデートコマンドを発行しておきます。
以下のような実行結果となります。
root@sbpve01:~# pveam update
update successful
root@sbpve01:~#
以上でProxmoxのLXCコンテナテンプレートリストは最新化されます。
LXCコンテナテンプレートのダウンロード
メニュー「ストレージ(local)⇒CTテンプレート」から「テンプレート」ボタンを押下します。
Proxmoxで利用可能なLXCコンテナテンプレートの一覧が表示されます。
検索欄に「debian」を入力すると、一覧が絞り込まれて「Debian 12 Bookworm(standard)」が表示されます。
種別 | パッケージ | 説明 |
---|---|---|
lxc | Debian-12-standard | Debian 12 Bookworm(standard) |
上記「debian-12-standard」を選択して「ダウンロード」ボタンを押下します。
「TASK OK」のメッセージが出たらダウンロード処理が終了しています。
ダウンロードが終了したら画面右上の「×」をクリックしてダウンロード画面を閉じます。
テンプレートの一覧画面に今ダウンロードしたテンプレートが登録されています。
LXCコンテナのインストール
ダウンロードしたテンプレートを使って「debian-12-standard」をインストールしていきます。
ProxmoxでのLXCコンテナインストールはウィザード形式で行っていきます。
画面上部(右上)から「CTを作成」を押下します。
全般:コンテナウィザード①
コンテナ作成ウィザードの「全般」タブが表示されます。
以下のように入力してください。
ノード | 初期値のまま |
---|---|
CT ID | 初期値のままでよい ※またはお好きなID |
ホスト名 | 構築するコンテナのホスト名を指定 ※本記事では”v-docker” |
非特権コンテナ | チェック |
ネスト | チェック |
リソースプール | 未指定 |
パスワード | コンテナへログインするときのパスワード |
パスワードの確認 | パスワードと同じものを入力 |
ssh Public Key | 未指定 |
入力したら「次へ」。
テンプレート選択:コンテナウィザード②
「テンプレート」タブが表示されます。
先ほどダウンロードした「debian-12-standard」を選択してください。
ディスク:コンテナウィザード③
「ディスク」タブが表示されます。
ディスクを作成するストレージを選択し、「次へ」。
CPU:コンテナウィザード④
「CPU」タブ画面が表示されます。
CPUスペックを設定します。
後から変更できるので、ここでは「1 Core」として設定します。
メモリ:コンテナウィザード⑤
「メモリー」タブ画面が表示されます。
メモリーも後から変更可能なので、ここでは「512 MB」と設定します。
※もっと小さく「128 MB」でもよかったです・・・
ネットワーク:コンテナウィザード⑥
「ネットワーク」タブ画面が表示されるので、LXCコンテナのネットワーク設定(IPアドレス)を行います。
我が家の自宅ネットワークは「192.168.11.0/24」としており、今回のdockerサーバー(debian-12-standard)のIPv4アドレスは「192.168.11.4/24」と設定しました。
また、IPv6アドレスは利用しません。
本記事では以下のように設定しました。
IPv4 アドレス |
IPv4 | 「静的」をチェック |
---|---|---|
IPv4/CIDR | LXCコンテナのIPv4アドレスを設定 ※本記事では「192.168.11.4/24」 |
|
ゲートウェイ (IPv4) |
自宅ネットワークのゲートウェイを設定 ※本記事では「192.168.11.1/24」 |
|
IPv6 アドレス |
IPv6 | 「静的」をチェック |
IPv6/CIDR | IPv6アドレスは使用しないので空白のまま | |
ゲートウェイ (IPv6) |
IPv6アドレスは使用しないので空白のまま |
なお、IPv4アドレス(IPv4/CIDR)をDHCPとして設定することも可能ですが、DHCPからIPv4アドレスを取得する設定の場合はLXCコンテナ起動時にかなり時間がかかります。
よって、「DHCP」を選択しない方が良いです。
DNS:コンテナウィザード⑦
「DNS」タブ画面が表示されます。
初期値のままで「次へ」。
確認:コンテナウィザード⑧
「確認」タブ画面が表示されます。
設定した内容を確認し「完了」ボタンを押下。
しばらくコンテナ作成のタスクが実行されます。
「TASK OK」が表示されたらコンテナ作成完了です。
LXCコンテナの起動と初期設定
メニュー「データセンター⇒LXCコンテナ」に今作成したコンテナが一覧表示されています。
では、このコンテナを起動してみます。
サブメニュー「コンソール」を選んで画面上の「開始」ボタンを押下すると、コンソール画面上でコンテナが起動します。
rootユーザーでログインします。パスワードはコンテナ作成時に「全般」タブで設定したパスワードです。
モジュールの最新化
ログインしたら、最初にDebianのモジュールを最新化しておきましょう。
### Debianを最新化 ###
apt update && apt -y upgrade
以上でDebian(debian-12-standard)のモジュールが最新化されます。
タイムゾーン(Asia/Tokyo)の設定
インストール直後のLXCはタイムゾーンが世界標準時となっています。
これを「Asia/Tokyo」へと変更設定しておきます。
### TimeZoneを"Asia/Tokyo"へ設定 ###
timedatectl set-timezone Asia/Tokyo
以上でタイムゾーンが「Asia/Tokyo」になります。
引き続き、作成したLXCコンテナ(Debian)へDockerモジュールをインストールしていきます。
LXCコンテナへDockerをインストール
「LXCコンテナでDockerコンテナを動かす」と言うと「1つのDockerコンテナを1つのLXCコンテナで動かす」というイメージになりますが、そうではありません。
LXCコンテナを使ってLinuxサーバーを構築、そのLinuxサーバー(LXCコンテナ)の中にDockerをインストールし、あとはお好きなDockerコンテナを使っていく、という使い方になります。
つまりDockerを動かすサーバーを仮想マシン(VM)として使うかLXCコンテナで使うか、という違いになります。
Debian(LXCコンテナ)へのDockerのインストールは超簡単です。
以下のコマンドをコピペすることで、一発インストールです。
### curlをインストール ###
apt install -y curl
### dockerインストールスクリプトを実行 ###
curl fsSL https://get.docker.com | sh
以上でLXCコンテナを使ってのDockerサーバーが構築完了です。
STEP② Portainer-ce(Dockerイメージ)をインストール
Dockerコンテナの起動状態を確認したり停止・再起動などの操作を行うためにPortainer-ceをインストールしておきます。
Dockerコンテナの各種操作をコマンドでできる人は不要ですが、ブラウザで確認・操作したい、という場合にはインストールしておくと便利です。
Simple Docker Management System | Portainer
Portainer-ceのDockerイメージをインストール
Portainer-ceはDockerイメージとして配布されているので、簡単にインストールすることができます。
以下の「docker run」コマンドをコピペするだけで、portainer-ceのDockerイメージをインストールすることができます。
### Portainerをインストール ###
docker run -d \
--name portainer \
-p 9000:9000 \
-p 9443:9443 \
--restart unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce
インストール後は「http://
インストール後に初めてアクセスする場合には管理者「admin」に対するパスワード設定が必要ですが、初期値ではパスワードは「12桁以上の英数字」となっています。
※パスワードポリシーは変更可能です。
STEP③ DDNS-Updater(Dockerイメージ)をインストール
外出先(インターネット側)から自宅への接続はIPv4アドレスではなくドメイン名で接続できると便利です。
すでにダイナミックDNS環境が構築されている場合はそのダイナミックDNSで提供されるドメイン名で良いです。
ダイナミックDNS環境が構築されていない場合には、DDNS-Updater(Dockerイメージ)を使ってダイナミックDNS環境を構築していきます。
Lightweight universal DDNS Updater program | Github
DDNS-Updaterコンフィグファイルの作成
本記事では「/root/updater/data/config.json」として定義ファイル(config.json)を作成していきます。
## カレントディレクトリへ移動と確認
root@v-docker:~# cd
root@v-docker:~# pwd
/root
## DATAディレクトリの作成
root@v-docker:~# mkdir updater
root@v-docker:~# cd updater
root@v-docker:~# mkdir data
root@v-docker:~# chown 1000 data
root@v-docker:~# chmod u+r+w+x data
## config.jsonの作成
root@v-docker:~# touch data/config.json
root@v-docker:~# vi data/config.json
上記手順で作成したコンフィグファイル「config.json」にダイナミックDNSクライアントとしての機能を定義していきます。
標準対応のダイナミックDNS設定
DDNS-Updaterは標準で非常にたくさんのダイナミックDNSサービスに対応しています。
標準対応のダイナミックDNSサービスは以下のリンクから確認することができます。
DDNS-Updater Configuration | Github
そして、標準対応のダイナミックDNSサービスについては、個別に「config.json」の定義内容が具体的に説明されています。
標準対応のダイナミックDNSサービスをご利用の場合には、上記を参考に「config.json」を定義してください。
非標準対応のダイナミックDNS設定(DDNS Now)
DDNS-Updaterは標準対応以外のダイナミックDNSサービスを利用することもできます。
この場合、”Provider”として”custom”を選択指定することで、任意のダイナミックDNSサービスの利用定義を行います。
本記事で利用するダイナミックDNSサービス「DDNS Now」はその利用方法について以下の記載があります。
“https://f5.si/update.php?domain=ユーザ名&password=パスワードもしくはAPIトークン”
つまり、上記のブラウザインターフェースアクセスにより、アクセス元回線のIPアドレスが登録・更新される、という仕組みです。
また、IPアドレスの登録・更新の結果として、正常に登録・更新された場合には以下のテキストレスポンスが返る、ということです。
OK:SUCCESS
正常に処理完了
この情報をもとに「DDNS Now」の”custom”設定は以下のようになります。
{
"settings": [
{
"provider": "custom",
"domain": "mydomain.f5.si",
"url": "https://f5.si/update.php?domain=mydomain&password=mypassword",
"ipv4key": "ipv4",
"ipv6key": "ipv6",
"success_regex": "OK:SUCCESS",
"ip_version": "ipv4",
"ipv6_suffix": ""
}
]
}
これをコンフィグファイル「/root/updater/data/config.json」へ登録します。
provider | 個別定義の”custom”と定義 |
---|---|
domain | ご利用のドメイン名を定義 ※”mydomain”部分が登録部分です |
url | “DDNS Now”へのIPアドレス更新URLを定義 ※”mydomain”と”mypassword”をご利用のものに変更 |
ipv4key | “ipv4″と定義 |
ipv6key | “ipv6″と定義 |
success_regex | IPアドレス更新成功時のレスポンステキストを定義 |
ip_version | IPアドレス更新するIPバージョンを定義 ※我が家はIPv4のみなので”ipv4″と定義 |
ipv6_suffix | IPv6Suffixを定義 ※IPv6使用しないので””(空文字)定義 |
以上で「DDNS Now」対応のコンフィグファイル作成が完了です。
DDNS-UpdaterのDockerイメージをインストール
では、DDNS-UpdaterのDockerイメージをインストールします。
DDNS-UpdaterのDockerイメージは以下のコマンドのコピペでインストールすることができます。
### DDNS-Updaterをインストール ###
docker run -d \
--name=ddns-updater \
-p 8000:8000/tcp \
-v /root/updater/data:/updater/data \
--restart unless-stopped \
qmcgaw/ddns-updater
注意点は「-v /root/updater/data:/updater/data」部分であり、コンフィグファイル「config.json」を配置しているディレクトリを正しく指定してください。
STEP④ WG-Easy(Dockerイメージ)をインストール
WireGuardのサーバー(待ち受け)側機能をDockerイメージでインストールしていきます。
利用するDockerイメージは「WG-Easy」です。
WG-EasyはWireGuardサーバー機能の一発構築だけでなく、ピア(接続相手)の管理もウェブ管理画面でできる機能もあり、非常に便利なDockerイメージです。
WG-EasyのDockerイメージをインストール
WG-EasyはDockerイメージとしてのみ提供されています。
WG-EasyのDockerイメージは以下のコマンドを変更してインストールします。
### WG-Easyをインストール ###
docker run -d \
--name=wg-easy \
-e LANG=en \
-e PASSWORD=YOUR_PASSWORD \
-e PORT=51821 \
-e WG_HOST=YOUR_DOMAIN \
-e WG_PORT=51820 \
-e WG_PERSISTENT_KEEPALIVE=25 \
-e WG_DEFAULT_ADDRESS=10.9.0.x \
-v ~/.wg-easy:/etc/wireguard \
-p 51820:51820/udp \
-p 51821:51821/tcp \
--cap-add=NET_ADMIN \
--cap-add=SYS_MODULE \
--sysctl="net.ipv4.conf.all.src_valid_mark=1" \
--sysctl="net.ipv4.ip_forward=1" \
--restart unless-stopped \
ghcr.io/wg-easy/wg-easy
代表的なパラメーターは以下を参考にして環境に合わせて変更してください。
LANG=en | 管理画面(WebUI)の言語を指定します。 ※”en”=英語です ※日本語はありません |
---|---|
PASSWORD=password | 管理画面(WebUI)へのログイン時パスワードを指定します。 ※指定しない場合はパスワードなしでログイン |
PORT=51821 | 管理画面(WebUI)のポート番号を指定します。 |
WG_HOST=yourdomain.com | ダイナミックDNSによるドメイン名を指定します。 ※本記事では〇〇〇.f5.si |
WG_PORT=51820 | WireGuardの待ち受けポートを指定します。 ※WireGuard推奨値=51820 |
WG_DEFAULT_ADDRESS=10.8.0.x | WireGuardネットワークのIPアドレス範囲を指定します。 ※初期値は10.8.0.0/24 |
WG_PERSISTENT_KEEPALIVE=25 | WireGuard(クライアント側)のKEEP_ALIVE時間(秒)を指定します。 ※WireGuardの推奨値は25(秒) |
なお、WG-Easyの全パラメーターについての説明は以下のリンクにて確認することができます。
STEP⑤ ルーターの設定/ポート転送設定
外部(インターネット側)から自宅ネットワークへVPN接続する場合、自宅ルーターにポート転送の設定が必要です。
つまり、外部から自宅ルーターへWireGuardによる接続要求があった場合にはその通信を今回構築したWG-EasyのDockerコンテナへ転送するための設定になります。
この設定は自宅ルーターに対して行います。
OpenWrtルーターでのポート転送設定
我が家で使っているルーター「OpenWrtルーター」でのポート転送設定を行います。
管理メニュー「ネットワーク > ファイアウォール」画面から「ポートフォワーディング」タブ画面を開きます。
「追加」ボタンから新規のポート転送(ポートフォワーディング)設定を行っていきます。
以下の内容で設定します。
名前 | ご自由に ※本記事では”UDP51820″と設定 |
---|---|
プロトコル | “UDP”を選択設定 ※”TCP”のチェックを外す |
外部ポート | “51820”を設定 ※WG-Easyに設定したWireGuardの待ち受けポート |
内部IPアドレス | “192.168.11.4/24″を選択設定 ※v-docker(LXCコンテナ)のIPアドレスを設定 |
内部ポート | “51820”を設定 ※WG-Easyに設定したWireGuardの待ち受けポート |
設定後、「保存」ボタンで設定を保存します。
一覧画面で内容を確認し「保存&適用」ボタンを押下してシステム反映します。
以上でOpenWrtルーターでのポート転送(ポートフォアーディング)設定は完了です。
STEP⑥ WireGuardクライアント設定
WireGuardのクライアントアプリをインストールし、自宅ネットワークへWireGuardによるVPN接続を行ってみましょう。
WireGuardのクライアントアプリは以下のWireGuard公式サイトのリンクよりダウンロード・インストールします。
WireGuard Installation | WireGuardプロジェクト
WindowsPCからのWireGuard接続
WireGuardアプリのインストール
WireGuard設定ファイルの作成
通信許可 | WireGuardの有効化(オン:右へスライド)/一時停止(オフ:左へスライド) |
---|---|
QRコード | スマホ用クライアントアプリ用のQRコード表示 |
ダウンロード | WireGuard定義ファイルのダウンロード |
削除 | WireGuard定義の削除 |
自動生成された(ダウンロードした)WireGuard定義ファイルの内容は以下のようになっています。
秘密鍵・公開鍵・事前共有鍵は自動生成してくれ、以下の内容になっています。
Interface(ピア/クライアント側)設定 | |
---|---|
PrivateKey | クライアントの秘密鍵(自動生成) |
Address | クライアントのWireGuard IPアドレス ※WG-Easyの”WG_DEFAULT_ADDRESS”で変更可 |
DNS | “1.1.1.1”CloudFlareのDNSを使用 ※WG-Easyの”WG_DEFAULT_DNS”で変更可 |
Peer(ピア/サーバー側)設定 | |
PublicKey | サーバーの公開鍵(自動生成) |
PresharedKey | 事前共有鍵(自動生成) |
AllowedIPs | “0.0.0.0/0,::/0″が設定 ※すべての通信がサーバー経由となる設定 ※WG-Easyの”WG_ALLOWED_IPS”で変更可 |
PresistentKeepalive | “25秒”に設定 ※WG-Easyの”WG_PERSISTENT_KEEPALIVE”で変更可 |
Endpoint | “〇〇〇.f5.si:51820″が設定 ※WG-Easyの”WG_HOST”/”WG_PORT”で変更可 |
WireGuard接続
AndroidスマホからのWireGuard接続
WireGuardアプリのインストール
WireGuard設定ファイルの作成
WireGuard接続
まとめ、Proxmoxでdockerコンテナを使う
本記事では外出先からいつでも自宅ネットワークへ接続できるVPN環境を構築してきました。
VPN環境構築に必要となる「WireGuard(VPN)」「DDNS-Updater(DDNSクライアント)」「Portainer-ce(Docker管理)」の環境をすべてDockerコンテナで構築してみました。
アプリコンテナと言われるDockerを使えば必要な機能を簡単に一発インストールすることができ、その機能の組み合わせにより目的とする環境構築がとても簡単にできてしまいます。
WireGuard環境構築の優れもの「WG-Easy」
WireGuardはインストールも簡単だし接続も簡単で、まさに次世代VPNと呼ぶにふさわしいプロトコルです。
ただ、ピア(接続先)が増えてくると接続ごとに必要となるWireGuardネットワーク(IPアドレス)の管理や秘密鍵・公開鍵の管理などが面倒になってきます。
WG-EasyはDockerコンテナを導入するだけでWireGuardサーバー(接続待ち)側の環境が構築できるだけでなく、ピアごとの鍵管理などもやってくれる仕組みまでが含まれるDockerアプリです。
WireGuardを使って自宅ネットワークへの接続環境を構築するならWG-Easyは非常におすすめのアプリコンテナと言えます。
注意点!DockerによるVPNでは拠点間VPNは構築できない
WG-Easyを使うことでピア(接続相手)の管理もやってくれるWireGuard環境が構築できてとても便利です。
ただし、WG-EasyはDockerコンテナとしての提供のみであることからちょっと注意も必要です。
WG-Easyを使ってのWireGuard環境ではネットワークとネットワークを接続する拠点間VPNは構築できません。
拠点間VPNの場合には相手ネットワークへの静的ルーティングをデフォルトゲートウェイへ登録する必要があります。
これがDockerアプリ利用の場合には「IPアドレスとポート番号でルーティング」という必要があり、これは一般的な静的ルーティングでは実現できません。
よって、一般的にはDockerを使ってのVPN環境(WireGuard含む)では拠点間VPNの環境構築はできません。