strongSwan : サーバーの設定2025/03/19 |
|
IPsec ベースの VPN ソリューション [strongSwan] のインストールと設定です。 当例では以下のような環境で strongSwan サーバーを設定します。 インターネットを経由するため、事前に、自身の環境で strongSwan サーバー側のローカルネットワークとインターネットの境界ルーターに、IP マスカレードの設定が必要です。 下例の場合、strongSwan クライアントからインターネットを経由して strongSwan サーバーのグローバル IP アドレス宛てに来るパケットを、[Router#1] 上で、strongSwan サーバーの IP アドレス (10.0.0.30) の 500/UDP, 4500/UDP ポートに転送するよう設定します。
+------------------------+
| [ strongSwan Server ] |
| dlp.srv.world +--------+
| | |
+-----------+------------+ |
enp1s0|10.0.0.30/24 |
| |
| Local Network |
+------+-----+ |
-------| Router#1 |---------------|-----
+------+-----+ |
| |
Internet | Internet |
| |
+------+-----+ |
-------| Router#2 |---------------|-----
+------+-----+ |
| Local Network |
| |
enp1s0|192.168.10.30/24 |
+-----------+------------+ |
| [ strongSwan Client] | |
| +--------+
| |172.16.100.x (VPN IP)
+------------------------+
|
| [1] | |
| [2] | strongSwan をインストールします。 |
|
# EPEL からインストール [root@dlp ~]# dnf --enablerepo=epel -y install strongswan
|
| [3] | strongSwan の設定です。 Firewalld でルーティングルールを設定するため、Firewalld 稼働中が前提です。 |
|
# 証明書へのリンク作成 [root@dlp ~]# ln -s /etc/letsencrypt/live/dlp.srv.world/fullchain.pem \ /etc/strongswan/swanctl/x509/fullchain.pem [root@dlp ~]# ln -s /etc/letsencrypt/live/dlp.srv.world/privkey.pem \ /etc/strongswan/swanctl/private/privkey.pem [root@dlp ~]# ln -s /etc/letsencrypt/live/dlp.srv.world/chain.pem \
/etc/strongswan/swanctl/x509ca/chain.pem
[root@dlp ~]#
vi /etc/strongswan/swanctl/conf.d/ikev2.conf # 新規作成
connections {
ikev2 {
version = 2
proposals = default,aes256-sha256-modp4096,aes256-sha256-modp2048,aes256gcm16-sha256-modp1024
unique = never
send_cert = always
pools = ipv4
fragmentation = yes
local {
# strongSwan サーバーのホスト名
# 証明書に登録したホスト名と合わせる
id = dlp.srv.world
certs = fullchain.pem
}
remote {
auth = eap-mschapv2
eap_id = %any
}
children {
child-ikev2 {
# ローカルネットワーク
local_ts = 10.0.0.0/24
}
}
}
}
pools {
ipv4 {
# VPN クライアントに割り当てるネットワーク
addrs = 172.16.100.0/24
# VPN クライアントに割り当てるネームサーバー
dns = 8.8.8.8
}
}
secrets {
# VPN ユーザーを設定
eap-1 {
id = vpnuser01
secret = "userPassword01"
}
eap-2 {
id = vpnuser02
secret = "userPassword02"
}
}
[root@dlp ~]#
chmod 600 /etc/strongswan/swanctl/conf.d/ikev2.conf
[root@dlp ~]#
vi /etc/strongswan/masquerade.sh # 新規作成
#!/bin/bash
# ローカルネットワークに接続可能なインターフェース
IF=enp1s0
case "$1" in
"start")
firewall-cmd --zone=public --add-masquerade
firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -o ${IF} -j ACCEPT
firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -o ${IF} -j MASQUERADE
firewall-cmd --add-service=ipsec
;;
"stop")
firewall-cmd --zone=public --remove-masquerade
firewall-cmd --direct --remove-rule ipv4 filter FORWARD 0 -o ${IF} -j ACCEPT
firewall-cmd --direct --remove-rule ipv4 nat POSTROUTING 0 -o ${IF} -j MASQUERADE
firewall-cmd --remove-service=ipsec
;;
*)
echo "Unknown option is specified"
;;
esac
chmod 700 /etc/strongswan/masquerade.sh
[root@dlp ~]#
systemctl edit strongswan # 新規作成 [Service] ExecStartPost=/etc/strongswan/masquerade.sh start ExecStopPost=/etc/strongswan/masquerade.sh stop systemctl enable --now strongswan
|
| [4] | SELinux を有効にしている場合は、ポリシーの変更が必要です。 |
|
[root@dlp ~]#
vi swan-ipsec.te # 以下の内容で新規作成
module swan-ipsec 1.0;
require {
type ipsec_conf_file_t;
type init_t;
type lsmd_t;
type passt_repair_exec_t;
class file { getattr execute execute_no_trans };
}
#============= init_t ==============
allow init_t ipsec_conf_file_t:file { execute execute_no_trans };;
allow lsmd_t passt_repair_exec_t:file getattr;
checkmodule -m -M -o swan-ipsec.mod swan-ipsec.te [root@dlp ~]# semodule_package --outfile swan-ipsec.pp --module swan-ipsec.mod [root@dlp ~]# semodule -i swan-ipsec.pp |
| Sponsored Link |
|
|