Apline安装StrongSwan实现IKEv2加密通信

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.pemvm1Key.pemvm2Cert.pemcaCert.pem
  • VM2 需要 vm2Cert.pemvm2Key.pemvm1Cert.pemcaCert.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

VM1VM2 上,确保 /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

VM1VM2 上编辑 /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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值