
Docker IPsec VPN Server — Updated!
IPsec/L2TP、Cisco IPsec、IKEv2をサポートするDockerベースのIPsec VPNサーバー。自動認証情報生成とマルチプラットフォーム対応のクライアント設定を備えています。
English | 简体中文 | 繁體中文 | Русский
Docker上のIPsec VPNサーバー
IPsec VPNサーバーを実行するためのDockerイメージ。IPsec/L2TP、Cisco IPsec、IKEv2に対応しています。
Alpine 3.23またはDebian 12をベースに、Libreswan(IPsec VPNソフトウェア)とxl2tpd(L2TPデーモン)を搭載しています。
IPsec VPNはネットワークトラフィックを暗号化するため、あなたとVPNサーバー間の誰も、インターネットを経由するデータを盗聴できません。これは、コーヒーショップや空港、ホテルの客室など、安全でないネットワークを利用する場合に特に役立ちます。
特徴:
- 初回起動時にVPN認証情報とIKEv2設定を自動生成
- 強力かつ高速な暗号(例: AES-GCM)を使用したIKEv2をサポート
- iOS、macOS、Androidデバイスを自動設定するVPNプロファイルを生成
- Windows、macOS、iOS、Android、Chrome OS、LinuxをVPNクライアントとしてサポート
- IKEv2ユーザーと証明書を管理するヘルパースクリプトを同梱
- GitHub Actionsによる自動ビルドと公開
- Dockerボリュームによるデータの永続化
- マルチアーキテクチャ:
linux/amd64、linux/arm64、linux/arm/v7
関連情報:
- VPN: DockerなしのIPsec、WireGuard、OpenVPN、Headscale
- AI: ローカルLLM、チャット、RAG、音声、AIツール向けのSelf-Hosted AI Stack
- 📚 書籍: The Self-Hosted AI Builder’s Guide、Privacy Tools in the Age of AI
クイックスタート
次のコマンドを使用して、Docker上にIPsec VPNサーバーをセットアップします:```bash
docker run
--name ipsec-vpn-server
--restart=always
-v ikev2-vpn-data:/etc/ipsec.d
-v /lib/modules:/lib/modules:ro
-p 500:500/udp
-p 4500:4500/udp
-d --privileged
hwdsl2/ipsec-vpn-server
お使いのVPNログイン情報はランダムに生成されます。[VPNログイン情報の取得](#retrieve-vpn-login-details)を参照してください。
または、[Dockerを使わずにIPsec VPNをセットアップ](https://github.com/hwdsl2/setup-ipsec-vpn)することもできます。このイメージの使い方の詳細については、以下のセクションをお読みください。
## コミュニティ
- 📬 [プロジェクトの更新情報を購読](https://selfhostedstack.beehiiv.com/subscribe?utm_campaign=vpn)(月1〜2通のメール)— 無料のVPNおよびAIデプロイガイド(PDF)を入手
- 💬 ディスカッションのために[r/selfhostedstack](https://www.reddit.com/r/selfhostedstack/)コミュニティに参加
- ⭐ 役に立つと思ったらリポジトリにスターを付けてください — 他の人が見つけやすくなります
## 要件
- パブリックIPアドレスまたはDNS名を持つLinuxサーバー
- Dockerがインストールされていること
- ファイアウォールでVPNポート(UDP 500および4500)が開放されていること
- [Podman](https://docs.podman.io)を使用して、`docker`のエイリアスを作成した上でこのイメージを実行することもできます
**注:** 上級ユーザーは、[Docker for Mac](https://docs.docker.com/desktop/setup/install/mac-install/)を使用してmacOS上でこのイメージを利用できます。IPsec/L2TPモードを使用する前に、`docker restart ipsec-vpn-server`でコンテナを一度再起動する必要がある場合があります。このイメージはDocker for Windowsをサポートしていません。
## ダウンロード
[Docker Hubレジストリ](https://hub.docker.com/r/hwdsl2/ipsec-vpn-server/)から信頼できるビルドを取得してください。```bash
docker pull hwdsl2/ipsec-vpn-server
代替として、Quay.ioからダウンロードすることもできます。```bash docker pull quay.io/hwdsl2/ipsec-vpn-server docker image tag quay.io/hwdsl2/ipsec-vpn-server hwdsl2/ipsec-vpn-server
サポート対象プラットフォーム: `linux/amd64`、`linux/arm64`、`linux/arm/v7`。
上級ユーザーは、GitHub で[ソースコードからビルド](https://gitlab.com/hwdsl2/docker-ipsec-vpn-server/-/blob/master/docs/advanced-usage.md#build-from-source-code)できます。
### イメージの比較
2つのビルド済みイメージが用意されています。デフォルトの Alpine ベースのイメージは、わずか約 19 MB です。
| | Alpine ベース | Debian ベース |
| ----------------- | ------------------------ | ------------------------------ |
| イメージ名 | hwdsl2/ipsec-vpn-server | hwdsl2/ipsec-vpn-server:debian |
| 圧縮サイズ | 約 19 MB | 約 62 MB |
| ベースイメージ | Alpine Linux 3.23 | Debian Linux 12 |
| プラットフォーム | amd64、arm64、arm/v7 | amd64、arm64、arm/v7 |
| Libreswan バージョン | 5.4 | 5.4 |
| IPsec/L2TP | ✅ | ✅ |
| Cisco IPsec | ✅ | ✅ |
| IKEv2 | ✅ | ✅ |
**注:** Debian ベースのイメージを使用するには、この README 内のすべての `hwdsl2/ipsec-vpn-server` を `hwdsl2/ipsec-vpn-server:debian` に置き換えてください。これらのイメージは、現在 Synology NAS システムとは互換性がありません。
<details>
<summary>
古い Libreswan バージョン 4 を使用したい。
</summary>
一般的には、このプロジェクトのデフォルトバージョンである最新の [Libreswan](https://libreswan.org/) バージョン 5 を使用することをお勧めします。ただし、古い Libreswan バージョン 4 を使用したい場合は、ソースコードから Docker イメージをビルドできます。```bash
git clone https://github.com/hwdsl2/docker-ipsec-vpn-server
cd docker-ipsec-vpn-server
# Specify Libreswan version 4
sed -i 's/SWAN_VER=5\..*/SWAN_VER=4.15/' Dockerfile Dockerfile.debian
# To build Alpine-based image
docker build -t hwdsl2/ipsec-vpn-server .
# To build Debian-based image
docker build -f Dockerfile.debian -t hwdsl2/ipsec-vpn-server:debian .
このイメージの使い方
環境変数
注: このイメージのすべての変数はオプションであり、変数を入力する必要はありません。そのままIPsec VPNサーバーをすぐに利用できます。その場合は、touch vpn.env で空の env ファイルを作成し、次のセクションに進んでください。
このDockerイメージは、以下の変数を使用します。これらは env ファイルで宣言できます(例を参照):```
VPN_IPSEC_PSK=your_ipsec_pre_shared_key
VPN_USER=your_vpn_username
VPN_PASSWORD=your_vpn_password
これにより、VPNログイン用のユーザーアカウントが作成され、複数のデバイス[\*](#important-notes)で使用できます。IPsec PSK(事前共有鍵)は、`VPN_IPSEC_PSK` 環境変数で指定されます。VPNユーザー名は `VPN_USER` で定義され、VPNパスワードは `VPN_PASSWORD` で指定されます。
追加のVPNユーザーもサポートされており、必要に応じて `env` ファイルで次のように宣言できます。ユーザー名とパスワードはスペースで区切る必要があり、ユーザー名に重複を含めることはできません。すべてのVPNユーザーは同じIPsec PSKを共有します。```
VPN_ADDL_USERS=additional_username_1 additional_username_2
VPN_ADDL_PASSWORDS=additional_password_1 additional_password_2
上記の変数は、IPsec/L2TPおよびIPsec/XAuth(「Cisco IPsec」)モードのみに適用されます。IKEv2については、IKEv2 VPNの設定と使用方法を参照してください。
注: envファイル内では、値の周りに""や''を付けたり、=の周りにスペースを追加したりしないでください。値の中に次の特殊文字を使用しないでください: \ " '。安全なIPsec PSKは、少なくとも20文字のランダムな文字で構成する必要があります。
注: Dockerコンテナが作成された後にenvファイルを変更した場合は、変更を有効にするためにコンテナを削除して再作成する必要があります。Dockerイメージの更新を参照してください。
追加の環境変数
上級ユーザーは、オプションでDNS名、クライアント名、および/またはカスタムDNSサーバーを指定できます。
DNS名、クライアント名、および/またはカスタムDNSサーバーの指定方法を確認する。
上級ユーザーは、オプションでIKEv2サーバーアドレスのDNS名を指定できます。DNS名は完全修飾ドメイン名(FQDN)である必要があります。例:``` VPN_DNS_NAME=vpn.example.com
IKEv2クライアントの名前を指定できます。1語のみで、`-`と`_`以外の特殊文字は使用できません。指定しない場合のデフォルトは`vpnclient`です。```
VPN_CLIENT_NAME=your_client_name
デフォルトでは、VPNがアクティブな場合、クライアントはGoogle Public DNSを使用するように設定されています。すべてのVPNモードでカスタムDNSサーバーを指定できます。例:``` VPN_DNS_SRV1=1.1.1.1 VPN_DNS_SRV2=1.0.0.1
詳細と、一般的な公開DNSプロバイダーの一覧については、[代替DNSサーバーの使用](https://gitlab.com/hwdsl2/docker-ipsec-vpn-server/-/blob/master/docs/advanced-usage.md)を参照してください。
デフォルトでは、IKEv2クライアント設定のインポート時にパスワードは不要です。クライアント設定ファイルをランダムなパスワードで保護することも選択できます。```
VPN_PROTECT_CONFIG=yes
注: 上記の変数は、Dockerコンテナ内でIKEv2が既に設定されている場合、IKEv2モードには影響しません。この場合、IKEv2を削除して、カスタムオプションを使用して再度設定することができます。IKEv2 VPNの設定と使用を参照してください。
IPsec VPNサーバーの起動
このイメージから新しいDockerコンテナを作成します(./vpn.env を独自の env ファイルに置き換えてください):```bash
docker run
--name ipsec-vpn-server
--env-file ./vpn.env
--restart=always
-v ikev2-vpn-data:/etc/ipsec.d
-v /lib/modules:/lib/modules:ro
-p 500:500/udp
-p 4500:4500/udp
-d --privileged
hwdsl2/ipsec-vpn-server
このコマンドでは、`docker run` の `-v` オプションを使用して、`ikev2-vpn-data` という名前の新しい [Docker ボリューム](https://docs.docker.com/storage/volumes/) を作成し、それをコンテナ内の `/etc/ipsec.d` にマウントしています。証明書や鍵などの IKEv2 関連データはボリュームに永続化され、後で Docker コンテナを再作成する必要がある場合は、同じボリュームを再度指定するだけで済みます。
このイメージを使用する際は、IKEv2 を有効にすることをお勧めします。ただし、IKEv2 を有効にせず、IPsec/L2TP および IPsec/XAuth(「Cisco IPsec」)モードのみを使用して VPN に接続したい場合は、上記の `docker run` コマンドから最初の `-v` オプションを削除してください。
**注:** 上級ユーザーは、[特権モードなしで実行](https://gitlab.com/hwdsl2/docker-ipsec-vpn-server/-/blob/master/docs/advanced-usage.md#run-without-privileged-mode) することもできます。
### VPN ログイン情報を取得する
上記の `docker run` コマンドで `env` ファイルを指定しなかった場合、`VPN_USER` はデフォルトで `vpnuser` になり、`VPN_IPSEC_PSK` と `VPN_PASSWORD` はランダムに生成されます。これらを取得するには、コンテナのログを表示します:```bash
docker logs ipsec-vpn-server
Search for these lines in the output:``` Connect to your new VPN with these details:
Server IP: your_vpn_server_ip IPsec PSK: your_ipsec_pre_shared_key Username: your_vpn_username Password: your_vpn_password
出力には、IKEv2モードが有効な場合の詳細も含まれます。
(任意)生成されたVPNログイン情報(ある場合)を現在のディレクトリにバックアップします。```bash
docker cp ipsec-vpn-server:/etc/ipsec.d/vpn-gen.env ./
docker-compose の使用```bash
cp vpn.env.example vpn.env
Edit vpn.env if needed, then:
docker compose up -d docker logs ipsec-vpn-server
Example `docker-compose.yml` (already included):```yaml
volumes:
ikev2-vpn-data:
services:
vpn:
image: hwdsl2/ipsec-vpn-server
restart: always
env_file:
- ./vpn.env
ports:
- "500:500/udp"
- "4500:4500/udp"
privileged: true
hostname: ipsec-vpn-server
container_name: ipsec-vpn-server
volumes:
- ikev2-vpn-data:/etc/ipsec.d
- /lib/modules:/lib/modules:ro
次のステップ
他の言語で読む: English, 简体中文, 繁體中文, Русский.
お使いのコンピューターまたはデバイスでVPNを使用できるようにします。以下を参照してください:
IPsec/XAuth("Cisco IPsec")VPNクライアントの設定
📖 VPNブックを読んで、追加コンテンツにアクセスしてください。
自分だけのVPNをお楽しみください! ✨🎉🚀✨
重要な注意事項
Windowsユーザー: IPsec/L2TPモードでは、VPNサーバーまたはクライアントがNAT(例: 家庭用ルーター)の背後にある場合、一度だけのレジストリ変更が必要です。
同じVPNアカウントは、複数のデバイスで使用できます。ただし、IPsec/L2TPの制限により、同じNAT(例: 家庭用ルーター)の背後から複数のデバイスを接続する場合は、IKEv2またはIPsec/XAuthモードを使用する必要があります。
VPNユーザーアカウントを追加、編集、または削除する場合は、まずenvファイルを更新し、その後、次のセクションの手順に従ってDockerコンテナを削除して再作成する必要があります。上級ユーザーは、envファイルをバインドマウントできます。
外部ファイアウォール(例: EC2/GCE)を備えたサーバーの場合は、VPN用にUDPポート500および4500を開放してください。Aliyunユーザーは、#433を参照してください。
クライアントは、VPNがアクティブなときにGoogle Public DNSを使用するように設定されています。別のDNSプロバイダーを希望する場合は、このセクションを参照してください。
Dockerイメージの更新
Dockerイメージとコンテナを更新するには、まず最新バージョンをダウンロードしてください:```bash docker pull hwdsl2/ipsec-vpn-server
Dockerイメージがすでに最新の場合は、次のように表示されます:```
Status: Image is up to date for hwdsl2/ipsec-vpn-server:latest
それ以外の場合は、最新バージョンをダウンロードします。Dockerコンテナを更新するには、まずVPNログイン情報を取得してください。次に、docker rm -f ipsec-vpn-serverでDockerコンテナを削除します。最後に、このイメージの使用方法の手順に従って再作成します。
IKEv2 VPNの設定と使用
IKEv2モードは、IPsec/L2TPおよびIPsec/XAuth(「Cisco IPsec」)よりも改善されており、IPsec PSK、ユーザー名、パスワードは不要です。詳細はこちらをご覧ください。
まず、コンテナのログを確認して、IKEv2の詳細を表示します。```bash docker logs ipsec-vpn-server
**注:** IKEv2 の詳細が見つからない場合、コンテナ内で IKEv2 が有効になっていない可能性があります。[Docker イメージの更新](#update-docker-image)セクションの手順に従って、Docker イメージとコンテナを更新してみてください。
IKEv2 のセットアップ中に、IKEv2 クライアント(デフォルト名 `vpnclient`)が作成され、その設定が**コンテナ内の** `/etc/ipsec.d` にエクスポートされます。設定ファイルを Docker ホストにコピーするには:```bash
# Check contents of /etc/ipsec.d in the container
docker exec -it ipsec-vpn-server ls -l /etc/ipsec.d
# Example: Copy a client config file from the container
# to the current directory on the Docker host
docker cp ipsec-vpn-server:/etc/ipsec.d/vpnclient.p12 ./
次の手順: デバイスを設定して、IKEv2 VPNを使用します。
IKEv2クライアントの管理方法を学ぶ。
ヘルパースクリプトを使用してIKEv2クライアントを管理できます。以下の例を参照してください。クライアントオプションをカスタマイズするには、引数なしでスクリプトを実行します。```bash
Add a new client (using default options)
docker exec -it ipsec-vpn-server ikev2.sh --addclient [client name]
Export configuration for an existing client
docker exec -it ipsec-vpn-server ikev2.sh --exportclient [client name]
List existing clients
docker exec -it ipsec-vpn-server ikev2.sh --listclients
Show usage
docker exec -it ipsec-vpn-server ikev2.sh -h
**注:** 「executable file not found」というエラーが発生した場合は、上記の `ikev2.sh` を `/opt/src/ikev2.sh` に置き換えてください。
</details>
<details>
<summary>
IKEv2サーバーアドレスを変更する方法を学ぶ。
</summary>
特定の状況では、IKEv2サーバーアドレスを変更する必要がある場合があります。たとえば、DNS名を使用するように切り替える場合や、サーバーIPが変更された後などです。IKEv2サーバーアドレスを変更するには、まず[コンテナ内でbashシェルを開き](https://gitlab.com/hwdsl2/docker-ipsec-vpn-server/-/blob/master/docs/advanced-usage.md#bash-shell-inside-container)、次に[これらの手順に従ってください](https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/ikev2-howto.md#change-ikev2-server-address)。Dockerコンテナを再起動するまで、コンテナログに新しいIKEv2サーバーアドレスが表示されないことに注意してください。
</details>
<details>
<summary>
IKEv2を削除し、カスタムオプションを使用して再設定する。
</summary>
特定の状況では、IKEv2を削除し、カスタムオプションを使用して再設定する必要がある場合があります。
**警告:** 証明書や鍵を含むすべてのIKEv2設定は**完全に削除**されます。これは**元に戻すことはできません**!
**オプション1:** ヘルパースクリプトを使用してIKEv2を削除し、再設定します。
これにより、`env`ファイルで指定した変数(`VPN_DNS_NAME`や`VPN_CLIENT_NAME`など)が上書きされ、コンテナログにIKEv2の最新情報が表示されなくなることに注意してください。```bash
# Remove IKEv2 and delete all IKEv2 configuration
docker exec -it ipsec-vpn-server ikev2.sh --removeikev2
# Set up IKEv2 again using custom options
docker exec -it ipsec-vpn-server ikev2.sh
オプション2: ikev2-vpn-data を削除し、コンテナを再作成します。
- VPNログイン情報をすべて書き留めます。
- Dockerコンテナを削除します:
docker rm -f ipsec-vpn-server。 ikev2-vpn-dataボリュームを削除します:docker volume rm ikev2-vpn-data。envファイルを更新し、VPN_DNS_NAMEやVPN_CLIENT_NAMEなどのカスタムIKEv2オプションを追加してから、コンテナを再作成します。このイメージの使用方法を参照してください。
高度な使い方
高度な使い方 を参照してください。
- 代替DNSサーバーを使用する
- 特権モードなしで実行する
- VPNモードを選択する
- IKEv2完全前方秘匿性を有効にする
- Dockerホスト上の他のコンテナにアクセスする
- VPNサーバーのパブリックIPを指定する
- VPNクライアントに静的IPを割り当てる
- VPNサブネットをカスタマイズする
- IPv6サポート
- スプリットトンネリング
- ホストネットワークモードについて
- Libreswanログを有効にする
- サーバーのステータスを確認する
- ソースコードからビルドする
- コンテナ内のBashシェル
- envファイルをバインドマウントする
- Google BBR輻輳制御を導入する
技術的な詳細
2つのサービスが実行されています: IPsec VPN用の Libreswan (pluto) と、L2TPサポート用の xl2tpd です。
デフォルトのIPsec設定は以下をサポートしています:
- PSKを使用したIPsec/L2TP
- PSKとXAuthを使用したIKEv1("Cisco IPsec")
- IKEv2
必要なポート: 500/udp と 4500/udp (IPsec)
ライセンス
注: ビルド済みイメージ内のソフトウェアコンポーネント(Libreswanやxl2tpdなど)は、それぞれの著作権所有者が選択した各ライセンスの下にあります。ビルド済みイメージの使用全般に関して、このイメージのいかなる使用も、その中に含まれるすべてのソフトウェアの関連ライセンスに準拠していることを確認する責任はイメージ利用者にあります。
Copyright (C) 2016-2026 Lin Song 
Thomas Sarlandieの作品に基づく (Copyright 2012)

この作品はクリエイティブ・コモンズ 表示 - 継承 3.0 非移植ライセンスの下にライセンスされています。
帰属表示が必要です: 派生物には私の名前を含め、どのように改良したかをお知らせください。