
Docker IPsec VPN Server — Updated!
DockerベースのIPsec VPNサーバー。IPsec/L2TP、Cisco IPsec、IKEv2をサポートし、認証情報の自動生成とマルチプラットフォーム対応のクライアント設定を備えています。
English | 简体中文 | 繁體中文 | Русский
Docker 上の IPsec VPN サーバー
IPsec/L2TP、Cisco IPsec、IKEv2 をサポートする、IPsec VPN サーバーを実行するための Docker イメージです。
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
クイックスタート
IPsec VPN サーバーを Docker 上にセットアップするには、次のコマンドを使用します:```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)が開放されていること
- `docker` のエイリアスを作成した後、[Podman](https://docs.podman.io) を使用してこのイメージを実行することもできます
**注記:** 上級ユーザーは、[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)できます。
### イメージの比較
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.3.2 | 5.3.2 |
| 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 .
このイメージの使い方
環境変数
注意: このイメージのすべての変数はオプションです。つまり、変数を1つも入力する必要はなく、すぐに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
The variables above are only for IPsec/L2TP and IPsec/XAuth ("Cisco IPsec") modes. For IKEv2, see 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) することもできます。
### VPN ログイン情報を取得する
上記の `docker run` コマンドで `env` ファイルを指定しなかった場合、`VPN_USER` はデフォルトで `vpnuser` になり、`VPN_IPSEC_PSK` と `VPN_PASSWORD` はどちらもランダムに生成されます。これらを取得するには、コンテナのログを確認してください:```bash
docker logs ipsec-vpn-server
出力内でこれらの行を検索してください:``` 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
例 `docker-compose.yml` (既に含まれています):```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
Next steps
Read this in other languages: English, 简体中文, 繁體中文, Русский.
コンピュータまたはデバイスでVPNを使用できるようにします。以下を参照してください:
IPsec/XAuth("Cisco IPsec")VPNクライアントの設定
📖 VPN bookを読んで、追加コンテンツにアクセスしてください。
自分専用のVPNをお楽しみください! ✨🎉🚀✨
重要な注意事項
Windowsユーザー:IPsec/L2TPモードの場合、VPNサーバーまたはクライアントがNAT(例:家庭用ルーター)の背後にあるときは、一回限りのレジストリ変更が必要です。
同じVPNアカウントを複数のデバイスで使用できます。ただし、IPsec/L2TPの制限により、同じNAT(例:家庭用ルーター)の背後から複数のデバイスを接続する場合は、IKEv2またはIPsec/XAuthモードを使用する必要があります。
VPNユーザーアカウントを追加、編集、または削除する場合は、まずenvファイルを更新してから、次のセクションの手順に従ってDockerコンテナを削除して再作成する必要があります。上級ユーザーは、envファイルをバインドマウントできます。
外部ファイアウォールを使用するサーバー(例:EC2/GCE)の場合、VPN用にUDPポート500と4500を開放してください。Alibaba Cloudユーザーは、#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)、次に[これらの手順に従ってください](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 の完全前方秘匿性 (PFS) を有効化
- Docker ホスト上の他のコンテナにアクセス
- VPN サーバーのパブリック IP を指定
- VPN クライアントに静的 IP を割り当て
- VPN サブネットのカスタマイズ
- IPv6 サポート
- スプリットトンネリング
- ホストネットワークモードについて
- Libreswan ログの有効化
- サーバーステータスの確認
- ソースコードからビルド
- コンテナ内の Bash シェル
- env ファイルのバインドマウント
- Google BBR 輻輳制御の導入
技術的詳細
IPsec VPN 用の Libreswan (pluto) と、L2TP サポート用の xl2tpd の 2 つのサービスが実行されています。
デフォルトの 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 非移植 ライセンス の下で提供されています。
帰属表示が必要です: 派生物には私の名前を含め、どのように改善したかを私に知らせてください!