0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Debian 13 (Trixie)】強固な IKEv2 VPN サーバーを swanctl で構築して Windows から Samba に爆速接続する(2026年版)

0
Posted at

【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証明書のインポート

  1. Debian 上にある /etc/swanctl/x509ca/ca.cert.pem を Windows PC に持っていきます。
  2. ファイルの拡張子を .pem から .crt に変更します(ca.crt)。
  3. ダブルクリックし、「証明書のインストール」 をクリック。
  4. 保存場所:「ローカル コンピューター」 を選択。
  5. 「証明書をすべて次のストアに配置する」にチェックを入れ、参照から 「信頼されたルート証明機関」 を手動指定してインポートを完了させます。

3-2. Windows レジストリの修正(重要)

Windows 標準の VPN 機能は、高セキュリティな最新暗号(DHグループ14、AES-256 など)のネゴシエーションを自ら拒否して接続エラーを起こす持病があります。これをレジストリで許可します。

  1. Win + Rregedit でレジストリエディターを起動。
  2. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Rasman\Parameters へ移動。
  3. 右クリック ➔ 新規 ➔ 「DWORD (32ビット) 値」 を作成。
  4. 名前を Negotiate DH2048_AES256 とし、値を 1 に設定。
  5. 設定を反映するため、Windows PC を一度再起動 します。

3-3. VPN 設定の追加と固定化

  1. Windowsの「設定」>「ネットワークとインターネット」>「VPN」>「VPNを追加する」をクリック。
    • VPN プロバイダー: Windows (ビルトイン)
    • サーバー名またはアドレス: Debian側で証明書(CN)に指定したグローバルIPアドレス(※1文字でもずれると接続拒否されます)
    • VPN の種類: IKEv2
    • サインイン情報の種類: ユーザー名とパスワード
  2. Win + Rncpa.cpl を実行(ネットワーク接続を開く)。
  3. 作成した VPN アイコンを右クリック ➔ 「プロパティ」 ➔ 「セキュリティ」タブを開く。
  4. 認証の項目で「拡張認証プロトコル (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-systemdswanctl 周りは非常にセキュリティが厳格になっていますが、Systemd のサンドボックスをバイパスして rc.local で制御し、最小限の必要プラグインだけを厳選してロードすることで、嘘のように安定した爆速 IKEv2 環境が手に入ります。ぜひ試してみてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?