【Debian 13 (Trixie)】強固な IKEv2 VPN サーバーを swanctl で構築して Windows から Samba に爆速接続する(2026年版)
はじめに
Debian 13 (Trixie) では、従来の strongswan-starter (レガシーな ipsec コマンド) から、最新の swanctl (vici) 方式 への移行が標準化されました。
これに伴い、従来のネット上の古いノウハウ通りに構築すると、Systemd の厳格なサンドボックス制限(exit status is 66)や agent プラグインの権限エラー(CAP_SETUID/CAP_SETGID 不足)に阻まれて起動すらできない泥沼にハマります。
本記事では、これら Debian 13 特有のハマりどころを完全に回避し、Windows の標準機能(ビルトイン VPN)から一発で安全に接続し、自宅の Samba (ファイル共有) にアクセスするまでの最短手順をまとめました。
環境・構成
- サーバー: Debian 13.3 (Trixie)
- クライアント: Windows 11 / 10 (追加アプリ不要、OS標準の IKEv2)
-
VPN 仮想ネットワーク:
10.10.10.0/24 - 認証方式: サーバー側=マルチドメイン証明書、クライアント側=EAP-MSCHAPv2 (ユーザー名/パスワード)
🛠️ 1. Debian 13(サーバー側)の設定
1-1. 必要パッケージのインストール
最新の管理ツール(charon-systemd)と、証明書作成ツール(strongswan-pki)を導入します。
sudo apt update
sudo apt install charon-systemd strongswan-pki iptables-persistent samba -y
1-2. 証明書の作成(管理者権限で実行)
リダイレクトによる権限エラーを防ぐため、sudo -i で完全に root に切り替えて実行します。
※ 【あなたのグローバルIPまたはDDNS】 の部分は、環境に合わせて(例: 123.45.67.89 など)書き換えてください。
sudo -i
# ディレクトリの作成と移動
mkdir -p /etc/swanctl/x509ca /etc/swanctl/x509 /etc/swanctl/rsa
cd /etc/swanctl
# 1. 認証局(CA)証明書の作成
pki --gen --type rsa --size 4096 --outform pem > rsa/ca.key.pem
pki --self --ca --lifetime 3650 --in rsa/ca.key.pem --dn "CN=My Home IKEv2 CA" --outform pem > x509ca/ca.cert.pem
# 2. サーバー証明書の作成 (CNとSANに、Windowsからの接続先アドレスを正確に指定)
pki --gen --type rsa --size 4096 --outform pem > rsa/server.key.pem
pki --pub --in rsa/server.key.pem | pki --issue --lifetime 3650 --cacert x509ca/ca.cert.pem --cakey rsa/ca.key.pem --dn "CN=【あなたのグローバルIPまたはDDNS】" --san "【あなたのグローバルIPまたはDDNS】" --flag serverAuth --flag ikeAuthority --outform pem > x509/server.cert.pem
1-3. VPN接続設定ファイルの作成 (/etc/swanctl/swanctl.conf)
Windows 標準の IKEv2 接続に適合する暗号化プロポーザルと、EAP 認証用のプール・ユーザー情報を記述します。
connections {
ikev2-vpn {
version = 2
proposals = aes256-sha256-modp2048,default
pools = vpn-pool
fragmentation = yes
local {
auth = pubkey
certs = server.cert.pem
id = 【あなたのグローバルIPまたはDDNS】
}
remote {
auth = eap-mschapv2
eap_id = %any
}
children {
net {
local_ts = 0.0.0.0/0
}
}
}
}
pools {
vpn-pool {
addrs = 10.10.10.0/24
dns = 1.1.1.1
}
}
secrets {
eap-user {
id = 【好きなユーザー名】
secret = 【好きなパスワード】
}
}
1-4. プラグインの最適化 (/etc/strongswan.conf)
Debian 13 で最も多い**「agent plugin requires CAP_SETUID/CAP_SETGID」エラーを根本解決**します。不要なプラグインの自動ロードを切り、IKEv2 動作に必要な最小限の安全なプラグインだけをロードさせます。
charon-systemd {
load_modular = no
plugins {
load = aes sha1 sha2 md5 random nonce x509 revocation constraints pubkey pkcs1 pem openssl gmp vici kernel-netlink eap-identity eap-mschapv2
}
}
1-5. Systemd 競合の回避と、自動起動スクリプトへの移行
Debian 13 の charon-systemd ユニットファイルはサンドボックス制限が極めて厳しく、環境によって systemctl restart で確実に落ちます。
泥沼の Systemd デバッグを避け、**最も堅牢かつ確実にバックグラウンド実行を維持する「rc.local 代替方式」**へ移行します。既存の起動サービスは完全に眠らせます。
systemctl stop strongswan.service 2>/dev/null
systemctl disable strongswan.service 2>/dev/null
systemctl mask strongswan.service
続いて、自動起動スクリプトを作成します。
nano /etc/rc.local
中身に以下を貼り付けます。
※ -o enp3s0 の部分は、ip route show default コマンドで確認したご自身の実際のLANカード名に変えてください。
※ 192.168.11.0/24 の部分は、ご自身の宅内LANのIPアドレス範囲に変えてください。
#!/bin/sh -e
# Debian 13 IKEv2 VPN 自動起動スクリプト
# 1. IP転送を有効化
sysctl -w net.ipv4.ip_forward=1
# 2. ファイアウォール初期化
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
# 3. 宅内LANからの通信(VPN未接続時のSamba用)を明示的に許可
iptables -A INPUT -s 192.168.11.0/24 -j ACCEPT
# 4. VPNネットワーク(10.10.10.0/24)を外(LAN/Internet)へマスカレード変換
iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o enp3s0 -j MASQUERADE
# 5. VPNサーバー本体をバックグラウンドで直接叩いて起動
pkill -f charon-systemd || true
/usr/sbin/charon-systemd &
# 6. 本体の起動をじっくり待ってから設定を強制ロード
sleep 5
/usr/sbin/swanctl --load-all
exit 0
保存して閉じたら、実行権限を与えます。
chmod +x /etc/rc.local
Debian 13 で rc.local を機能させるための Systemd 受け皿作成
nano /usr/lib/systemd/system/rc-local.service
以下を貼り付けて保存します。
[Unit]
Description=/etc/rc.local Compatibility
ConditionFileIsExecutable=/etc/rc.local
After=network.target
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
サービスを有効化し、即時実行します。
systemctl daemon-reload
systemctl enable rc-local.service
/etc/rc.local
画面の最後に successfully loaded 1 connections, 0 unloaded と出れば、サーバー側は完全開通です!
最後に exit で root から抜けます。
🌐 2. 自宅ルーターの設定(ポート開放)
ルーターの管理画面を開き、外からの通信を Debian のローカルIPアドレスに向けてポート開放します。
IKEv2 では、以下の 2つの UDP ポート を必ず同時に開けてください。
- UDP 500
- UDP 4500
💻 3. Windows(クライアント側)の設定
3-1. CA証明書のインポート
- Debian 上にある
/etc/swanctl/x509ca/ca.cert.pemを Windows PC に持っていきます。 - ファイルの拡張子を
.pemから.crtに変更します(ca.crt)。 - ダブルクリックし、「証明書のインストール」 をクリック。
- 保存場所:「ローカル コンピューター」 を選択。
- 「証明書をすべて次のストアに配置する」にチェックを入れ、参照から 「信頼されたルート証明機関」 を手動指定してインポートを完了させます。
3-2. Windows レジストリの修正(重要)
Windows 標準の VPN 機能は、高セキュリティな最新暗号(DHグループ14、AES-256 など)のネゴシエーションを自ら拒否して接続エラーを起こす持病があります。これをレジストリで許可します。
-
Win + R➔regeditでレジストリエディターを起動。 -
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Rasman\Parametersへ移動。 - 右クリック ➔ 新規 ➔ 「DWORD (32ビット) 値」 を作成。
- 名前を
Negotiate DH2048_AES256とし、値を1に設定。 - 設定を反映するため、Windows PC を一度再起動 します。
3-3. VPN 設定の追加と固定化
- Windowsの「設定」>「ネットワークとインターネット」>「VPN」>「VPNを追加する」をクリック。
- VPN プロバイダー: Windows (ビルトイン)
- サーバー名またはアドレス: Debian側で証明書(CN)に指定したグローバルIPアドレス(※1文字でもずれると接続拒否されます)
-
VPN の種類:
IKEv2 - サインイン情報の種類: ユーザー名とパスワード
-
Win + R➔ncpa.cplを実行(ネットワーク接続を開く)。 - 作成した VPN アイコンを右クリック ➔ 「プロパティ」 ➔ 「セキュリティ」タブを開く。
- 認証の項目で「拡張認証プロトコル (EAP) を使用する」にチェックを入れ、
Microsoft: セキュリティで保護されたパスワード (EAP-MSCHAP v2)に明示的に固定して保存。
🚀 4. 接続テストと運用方法
Windows PC を自宅外のネットワーク(スマホのテザリングなど)に接続し、VPN「接続」をクリックします。「接続済み」になれば開通です!
運用による接続先の使い分け
VPN からのパケットを Debian の iptables が正常にマスカレード(NAT)しているため、外出先からでも宅内と同じように Samba が利用可能です。
| 滞在場所 | WindowsのVPN状態 | エクスプローラー(Win+R)でのSamba接続先 |
|---|---|---|
| 外出先 (テザリング等) | 接続にする |
\\10.10.10.1 (または通常の宅内IPアドレス) |
| 自宅の中 (自宅Wi-Fi) | 切断にする |
\\192.168.x.x (いつものDebianのローカルIP) |
おわりに
Debian 13 の charon-systemd と swanctl 周りは非常にセキュリティが厳格になっていますが、Systemd のサンドボックスをバイパスして rc.local で制御し、最小限の必要プラグインだけを厳選してロードすることで、嘘のように安定した爆速 IKEv2 環境が手に入ります。ぜひ試してみてください。