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 |
|