1、安装 StrongSwan
SSH 到 Alpine 作为 root。它应该使用您的 SSH 私钥进行身份验证。
安装软件:
apk --update add \
bash \
build-base \
curl \
curl-dev \
ca-certificates \
ip6tables \
iproute2 \
iptables-dev \
openssl \
openssl-dev
下载、构建和安装 strongswan:
mkdir -p /tmp/strongswan
curl -Lo /tmp/strongswan.tar.bz2 \
https://download.strongswan.org/strongswan.tar.bz2
tar --strip-components=1 -C /tmp/strongswan -xjf /tmp/strongswan.tar.bz2
cd /tmp/strongswan
./configure --prefix=/usr \
--sysconfdir=/etc \
--libexecdir=/usr/lib \
--with-ipsecdir=/usr/lib/strongswan \
--enable-aesni \
--enable-chapoly \
--enable-cmd \
--enable-curl \
# --enable-dhcp \
# --enable-farp \
--enable-eap-dynamic \
--enable-eap-identity \
--enable-eap-md5 \
--enable-eap-mschapv2 \
--enable-eap-radius \
--enable-eap-tls \
--enable-files \
--enable-gcm \
--enable-md4 \
--enable-newhope \
--enable-ntru \
--enable-openssl \
--enable-sha3 \
--enable-shared \
--disable-aes \
--disable-des \
--disable-gmp \
--disable-hmac \
--disable-ikev1 \
--disable-md5 \
--disable-rc2 \
--disable-sha1 \
--disable-sha2 \
--disable-static && \
make && \
make install
2. 配置 StrongSwan
(1)生成密钥和证书
为了简化操作,我们将在 VM1 (192.168.95.150)上生成根证书(CA)和服务器证书,然后将服务器证书复制到 VM2 (192.168.95.152)上。
在 VM1 上运行以下命令:
bash复制
# 创建证书存储目录
sudo mkdir -p /etc/ipsec.d/{cacerts,private,certs}
# 生成根证书密钥
sudo ipsec pki --gen --type rsa --size 4096 --outform pem > /etc/ipsec.d/private/caKey.pem
# 生成根证书
sudo ipsec pki --self --in /etc/ipsec.d/private/caKey.pem --dn "C=CN, O=MyOrg, CN=MyRootCA" --ca --outform pem > /etc/ipsec.d/cacerts/caCert.pem
# 生成 VM1 的密钥和证书
sudo ipsec pki --gen --type rsa --size 4096 --outform pem > /etc/ipsec.d/private/vm1Key.pem
sudo ipsec pki --issue --in /etc/ipsec.d/private/vm1Key.pem --type priv --cacert /etc/ipsec.d/cacerts/caCert.pem --cakey /etc/ipsec.d/private/caKey.pem --dn "C=CN, O=MyOrg, CN=vm1.example.com" --san vm1.example.com --flag serverAuth --flag ikeIntermediate --outform pem > /etc/ipsec.d/certs/vm1Cert.pem
# 生成 VM2 的密钥和证书
sudo ipsec pki --gen --type rsa --size 4096 --outform pem > /etc/ipsec.d/private/vm2Key.pem
sudo ipsec pki --issue --in /etc/ipsec.d/private/vm2Key.pem --type priv --cacert /etc/ipsec.d/cacerts/caCert.pem --cakey /etc/ipsec.d/private/caKey.pem --dn "C=CN, O=MyOrg, CN=vm2.example.com" --san vm2.example.com --flag serverAuth --flag ikeIntermediate --outform pem > /etc/ipsec.d/certs/vm2Cert.pem
将 VM2 的证书和密钥复制到 VM2 上:
# 在 VM1 上
scp /etc/ipsec.d/private/vm2Key.pem root@192.168.95.152:/etc/ipsec.d/private/
scp /etc/ipsec.d/certs/vm2Cert.pem root@192.168.95.152:/etc/ipsec.d/certs/
scp /etc/ipsec.d/cacerts/caCert.pem root@192.168.95.152:/etc/ipsec.d/cacerts/
将VM1的证书复制到VM2上:
scp /etc/ipsec.d/certs/vm1Cert.pem root@192.168.95.152:/etc/ipsec.d/certs/
- VM1 需要
vm1Cert.pem
、vm1Key.pem
、vm2Cert.pem
和caCert.pem
。 - VM2 需要
vm2Cert.pem
、vm2Key.pem
、vm1Cert.pem
和caCert.pem
。
(2)配置 /etc/ipsec.conf
在 VM1 上编辑 /etc/ipsec.conf
文件:
config setup
charondebug="ike 1, knl 1, cfg 0"
conn %default
ikelifetime=60m
keylife=20m
rekeymargin=3m
keyingtries=1
keyexchange=ikev2
authby=pubkey
conn vm1-to-vm2
left=192.168.95.150
leftid=vm1.example.com
leftcert=vm1Cert.pem(可以填绝对路径)
leftsendcert=always
leftsubnet=192.168.95.150/32
right=192.168.95.152
rightid=vm2.example.com
rightcert=vm2Cert.pem(可以填绝对路径)
rightsubnet=192.168.95.152/32
auto=start
在 VM2 上编辑 /etc/ipsec.conf
文件:
config setup
charondebug="ike 1, knl 1, cfg 0"
conn %default
ikelifetime=60m
keylife=20m
rekeymargin=3m
keyingtries=1
keyexchange=ikev2
authby=pubkey
conn vm2-to-vm1
left=192.168.95.152
leftid=vm2.example.com
leftcert=vm2Cert.pem(可以填绝对路径)
leftsendcert=always
leftsubnet=192.168.95.152/32
right=192.168.95.150
rightid=vm1.example.com
rightcert=vm1Cert.pem(可以填绝对路径)
rightsubnet=192.168.95.150/32
auto=start
(3)配置 /etc/ipsec.secrets
在 VM1 和 VM2 上,确保 /etc/ipsec.secrets
为
#vm1的ipsec.secrets
: RSA /etc/ipsec.d/private/vm1Key.pem
#vm2的ipsec.secrets
: RSA /etc/ipsec.d/private/vm2Key.pem
(4)配置 /etc/strongswan.conf
在 VM1 和 VM2 上编辑 /etc/strongswan.conf
文件:
charon {
send_vendor_id = yes
plugins {
eap-dynamic {
preferred = mschapv2, tls, md5
}
}
}
3. 启动 StrongSwan 服务
(1)确认 StrongSwan 的安装路径
首先,确认 StrongSwan 的可执行文件路径。运行以下命令:
which ipsec
(2)检查启动脚本
由于 Alpine Linux 使用 OpenRC 而不是 systemd,因此需要检查是否存在 StrongSwan 的 OpenRC 启动脚本。运行以下命令:
ls /etc/init.d/strongswan
如果 /etc/init.d/strongswan
文件不存在,说明 StrongSwan 的启动脚本没有正确安装。
(3)手动创建启动脚本
如果启动脚本不存在,可以手动创建一个。以下是一个简单的 OpenRC 启动脚本示例:
创建 /etc/init.d/strongswan
文件:
sudo nano /etc/init.d/strongswan
将以下内容粘贴到文件中:
#!/sbin/openrc-run
name="strongSwan IPsec"
description="strongSwan IPsec IKEv1/IKEv2 daemon using ipsec.conf"
command="which ipsec所查看到的路径"
command_args="start --nofork"
pidfile="/var/run/ipsec.pid"
depend() {
need net
}
start_pre() {
ebegin "Starting $name"
}
start() {
start-stop-daemon --start --exec $command -- $command_args
eend $?
}
stop() {
ebegin "Stopping $name"
start-stop-daemon --stop --exec $command
eend $?
}
保存并退出编辑器,然后为脚本添加可执行权限:
sudo chmod +x /etc/init.d/strongswan
4. 启动 StrongSwan 服务
使用以下命令启动 StrongSwan 服务:
sudo rc-service strongswan start
或者手动启动StrongSwan服务
sudo /usr/local/sbin/ipsec(which ipsec所查看到的路径) start
在 VM1 上运行以下命令,检查 IKEv2 隧道是否建立:
sudo ipsec status
如果一切配置正确,你应该能看到类似以下的输出:
Security Associations (1 up, 0 connecting):
vm1-to-vm2[1]: ESTABLISHED 1 minute ago, 192.168.95.150[vm1.example.com]...192.168.95.152[vm2.example.com]
在 VM1 上尝试 ping VM2 的 IP 地址:
bash复制
ping 192.168.95.152
如果能够成功 ping 通,说明 IKEv2 加密通信已经成功建立。
5. 配置网络转发(可选)
为了允许两台虚拟机之间的网络流量转发,需要在两台虚拟机上启用 IP 转发:
# 在 VM1 和 VM2 上
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p