6.4. 手动配置带有原始 RSA 密钥身份验证的 IPsec 站点到站点 VPN
站点到站点的 VPN 在两个不同的网络之间建立一个安全的、加密的隧道,在不安全的公共网络(如互联网)中无缝连接它们。例如,这使分支机构中的设备能够访问公司总部中的资源,就如同它们都是同一本地网络的一部分一样。
对于验证网关设备,RSA 密钥比预共享密钥(PSK)更安全,因为其非对称加密消除了共享 secret 的风险。使用 RSA 密钥还通过避免对证书颁发机构(CA)的需要简化部署,同时仍然提供强大的对等身份验证。
对两个网关设备执行这些步骤。
先决条件
- 两个网络中的路由确保发送到远程网络的流量通过本地 VPN 网关设备进行发送。
流程
如果 Libreswan 尚未安装,请执行以下步骤:
安装
libreswan软件包:dnf install libreswan
# dnf install libreswanCopy to Clipboard Copied! Toggle word wrap Toggle overflow 初始化网络安全服务(NSS)数据库:
ipsec initnss
# ipsec initnssCopy to Clipboard Copied! Toggle word wrap Toggle overflow 命令在
/var/lib/ipsec/nss/目录下创建数据库。启用并启动
ipsec服务:systemctl enable --now ipsec
# systemctl enable --now ipsecCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在防火墙中打开 IPsec 端口和协议:
firewall-cmd --permanent --add-service="ipsec" firewall-cmd --reload
# firewall-cmd --permanent --add-service="ipsec" # firewall-cmd --reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow
创建一个 RSA 密钥对:
ipsec newhostkey
# ipsec newhostkeyCopy to Clipboard Copied! Toggle word wrap Toggle overflow ipsec工具将密钥对存储在 NSS 数据库中。- 指定您的对等服务器。在 IPsec 隧道中,您必须将一个主机指定为 left,将另一个主机指定为 right。这是一个武断的选择。常见的做法是调用您的本地主机 left 和远程主机right。
在左侧和右侧显示证书密钥属性 ID (CKAID):
ipsec showhostkey --list
# ipsec showhostkey --list < 1> RSA keyid: <key_id> ckaid: <ckaid>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 后面步骤中需要两个对等点的 CKAID。
显示公钥:
在左侧对等点中,输入:
ipsec showhostkey --left --ckaid <ckaid_of_left_peer>
# ipsec showhostkey --left --ckaid <ckaid_of_left_peer> # rsakey AwEAAdKCx leftrsasigkey=0sAwEAAdKCxpc9db48cehzQiQD...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在右侧对等点中,输入:
ipsec showhostkey --right --ckaid <ckaid_of_right_peer>
# ipsec showhostkey --right --ckaid <ckaid_of_right_peer> # rsakey AwEAAcNWC rightrsasigkey=0sAwEAAcNWCzZO+PR1j8WbO8X...Copy to Clipboard Copied! Toggle word wrap Toggle overflow
命令显示公钥,以及必须在配置文件中使用的相应参数。
在
/etc/ipsec.d/目录中为连接创建一个.conf文件。例如,创建带有以下设置的/etc/ipsec.d/site-to-site.conf文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意您可以对两个网关设备使用相同的配置文件,Libreswan 使用内部信息识别其在左还是右主机上操作。但是,重要的是
left*参数中的所有值都属于一个对等点,right*参数中的值属于另一个对等点。示例中指定的设置包括:
conn <connection_name>- 定义连接名称。名称是任意的,Libreswan 使用它来识别连接。您必须至少使用一个空格或标签页缩进这个连接中的参数。
auto=<type>-
控制如何发起连接。如果将值设为
start,Libreswan 会在服务启动时自动激活连接。 authby=rsasig- 为此连接启用 RSA 签名身份验证。
left=<ip_address_or_fqdn_of_left_peer>andright=<ip_address_or_fqdn_of_right_peer>- 定义对等点的 IP 地址或 DNS 名称。
leftid=<id>andrightid=<id>-
定义在互联网密钥交换(IKE)协商过程中每个对等点是如何被识别的。这可以是一个完全限定域名(FQDN)、IP 地址或字面字符串。在后一种情况,在字符串前面加上
@符号。 leftrsasigkey=<public_key>andrightrsasigkey=<public_key>-
指定对等点的公钥。使用上一步中
ipsec showhostkey命令显示的值。 leftsubnet=<subnet>andrightsubnet=<subnet>- 定义通过隧道连接的无类别域间路由(CIDR)格式的子网。如果要在一端隧道连接多个子网,请在大括号中指定它们,并使用逗号分隔它们。
启用数据包转发:
echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
# echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf # sysctl -p /etc/sysctl.d/95-IPv4-forwarding.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启
ipsec服务:systemctl restart ipsec
# systemctl restart ipsecCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您在配置文件中使用
auto=start,则连接会自动激活。使用其他方法时,需要执行额外的步骤来激活连接。详情请查看您系统上的ipsec.conf (5)手册页。
验证
显示 IPsec 状态:
ipsec status
# ipsec statusCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果成功建立连接,输出会包含如下行:
互联网密钥交换版本 2 (IKEv2)协商的阶段 1 已成功完成:
#2: "<connection_name>":500 ESTABLISHED_IKE_SA (established IKE SA); REKEY in 28523s; REPLACE in 28793s; newest; idle;
#2: "<connection_name>":500 ESTABLISHED_IKE_SA (established IKE SA); REKEY in 28523s; REPLACE in 28793s; newest; idle;Copy to Clipboard Copied! Toggle word wrap Toggle overflow 安全联盟(SA)现在已准备好协商实际的数据加密隧道,称为子 SA 或阶段 2 SA。
一个子 SA 已建立:
#3: "<connection_name>":500 ESTABLISHED_CHILD_SA (established Child SA); REKEY in 28523s; REPLACE in 28793s; newest; eroute owner; IKE SA #2; idle;
#3: "<connection_name>":500 ESTABLISHED_CHILD_SA (established Child SA); REKEY in 28523s; REPLACE in 28793s; newest; eroute owner; IKE SA #2; idle;Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这是您的数据流量通过的实际隧道。
- 从本地子网中的客户端 ping 远程子网中的客户端。
后续步骤
- 如果您在带有 DHCP 或无状态地址自动配置(SLAAC)的网络中使用此主机,则连接可能很容易被重定向。有关详情和缓解步骤,请参阅 将 VPN 连接分配给专用路由表,以防止连接绕过隧道。