6.3. 手动配置具有原始 RSA 密钥身份验证的 IPsec 主机到主机的 VPN
主机到主机 VPN 在两个设备之间建立一个直接、安全和加密的连接,允许应用程序通过不安全的网络(如互联网)安全地进行通信。
对于身份验证,RSA 密钥比预共享密钥(PSK)更安全,因为其非对称加密消除了共享 secret 的风险。使用 RSA 密钥还通过避免对证书颁发机构(CA)的需求,并提供强大的对等身份验证来简化部署。
在两个主机上执行步骤。
流程
如果 Libreswan 尚未安装,请执行以下步骤:
安装
libreswan软件包:# dnf install libreswan初始化 Network Security Services (NSS)数据库:
# ipsec initnss命令在
/var/lib/ipsec/nss/目录中创建数据库。启用并启动
ipsec服务:# systemctl enable --now ipsec在防火墙中打开 IPsec 端口和协议:
# firewall-cmd --permanent --add-service="ipsec" # firewall-cmd --reload
创建一个 RSA 密钥对:
# ipsec newhostkeyipsec工具将密钥对存储在 NSS 数据库中。- 指定您的同级主机。在 IPsec 隧道中,您必须将一个主机指定为 left,另一个主机指定为 right。这是一个任意选择。常见的做法是调用您的本地主机 left 和远程主机 right。
在左和右对等主机上显示证书密钥属性 ID (CKAID):
# ipsec showhostkey --list < 1> RSA keyid: <key_id> ckaid: <ckaid>在下一步中需要两个对等主机上的 CKAID。
显示公钥:
在左对等主机上,输入:
# ipsec showhostkey --left --ckaid <ckaid_of_left_peer> # rsakey AwEAAdKCx leftrsasigkey=0sAwEAAdKCxpc9db48cehzQiQD...在右对等主机上,输入:
# ipsec showhostkey --right --ckaid <ckaid_of_right_peer> # rsakey AwEAAcNWC rightrsasigkey=0sAwEAAcNWCzZO+PR1j8WbO8X...
命令会显示公钥,以及您必须在配置文件中使用的相应参数。
在
/etc/ipsec.d/目录中为连接创建一个.conf文件。例如,使用以下设置创建/etc/ipsec.d/host-to-host.conf文件:conn <connection_name> # General setup and authentication type auto=start authby=rsasig # Peer A left=<ip_address_or_fqdn_of_left_peer> leftid=@peer_a leftrsasigkey=<public_key_of_left_peer> # Peer B right=<ip_address_or_fqdn_of_right_peer> rightid=@peer_b rightrsasigkey=<public_key_of_right_peer>注意您可以在两个主机上使用同样的配置文件,Libreswan 使用内部信息决定在左还是右主机上操作。但是,务必确保
left*参数中的所有值都属于一个对等主机,且right*参数中的值属于另一个主机。示例中指定的设置包括:
conn <connection_name>- 定义连接名称。名称是任意名称,Libreswan 使用它来识别连接。您必须在这个连接中缩进参数,至少使用一个空格或标签页。
auto=<type>-
控制如何发起连接。如果将值设为
start,Libreswan 会在服务启动时自动激活连接。 authby=rsasig- 为此连接启用 RSA 签名身份验证。
left=<ip_address_or_fqdn_of_left_peer>和right=<ip_address_or_fqdn_of_right_peer>- 定义对等点主机的 IP 地址或 DNS 名称。
leftid=<id>和rightid=<id>-
定义在互联网密钥交换(IKE)协商过程中是如何识别每个对等主机的。这可以是完全限定域名(FQDN)、IP 地址或字面字符串。在后一种情况下,在字符串前面加上
@符号。 leftrsasigkey=<public_key>andrightrsasigkey=<public_key>-
指定对等点主机的公钥。使用上一步中
ipsec showhostkey命令显示的值。
重启
ipsec服务:# systemctl restart ipsec如果您在配置文件中使用
auto=start,则连接会自动激活。使用其他方法时,需要执行额外的步骤来激活连接。详情请查看您系统上的ipsec.conf (5)手册页。
验证
显示 IPsec 状态:
# ipsec status如果连接成功建立,输出会包含如下行:
互联网密钥交换版本 2 (IKEv2)协商的阶段 1 已成功完成:
#1: "<connection_name>":500 ESTABLISHED_IKE_SA (established IKE SA); REKEY in 28523s; REPLACE in 28793s; newest; idle;Security Association(SA)现在已准备好协商实际数据加密隧道,称为子 SA 或阶段 2 SA。
子 SA 已建立:
#2: "<connection_name>":500 ESTABLISHED_CHILD_SA (established Child SA); REKEY in 28523s; REPLACE in 28793s; newest; eroute owner; IKE SA #1; idle;这是您的数据流量通过的实际隧道。
故障排除
如果连接无法建立,请检查两个对等点上的 IPsec 日志:
# journalctl -u ipsec -n 50如果防火墙阻止 IPsec 流量,请验证是否启用了 IPsec 服务:
# firewall-cmd --list-services | grep ipsec防火墙必须允许 ESP 协议(IP 协议 50)和 UDP 端口 500 和 4500。
-
如果身份验证因为密钥不匹配而失败,请验证配置文件中的公钥是否与每个对等点上的
ipsec showhostkey的输出匹配。一个 peer 上的leftrsasigkey值必须与另一个对等点上的rightrsasigkey值匹配。 如果 NSS 数据库有权限问题,请验证数据库文件是否具有正确的所有权和 SELinux 上下文:
# ls -lZ /var/lib/ipsec/nss/ -rw-r--r--. root root system_u:object_r:ipsec_key_file_t:s0 cert9.db -rw-r--r--. root root system_u:object_r:ipsec_key_file_t:s0 key4.db
后续步骤
- 如果您在具有 DHCP 或无状态地址自动配置(SLAAC)的网络中使用此主机,则连接可能容易被重定向。有关详情和缓解步骤,请参阅 将 VPN 连接分配给专用的路由表,以防止连接绕过隧道。