晚上好🌙🌙🌙
本答案参考通义千问
根据你的描述,ipsec 远程连接失败的问题可能与 libreswan 的配置或系统环境有关。以下是问题的分析和解决方案:
问题分析
从错误信息来看:
initial Main Mode message received but no connection has been authorized with authby=PSK and xauth=no
表明 IKE 协商阶段出现问题,可能是由于以下原因导致:
- IKE 协商失败:可能是
ike 或 esp 参数不匹配。 - PSK 验证失败:
authby=secret 使用预共享密钥(PSK)验证,但可能存在格式或内容问题。 - 防火墙或网络配置问题:未开放必要的端口(如 UDP 500 和 4500)。
- 系统时间不同步:IKE 协商对系统时间敏感,时间偏差可能导致验证失败。
解决方案
1. 检查并修正 ipsec.conf 配置
确保 ipsec.conf 配置文件中的参数正确无误。以下是推荐的配置示例:
conn L2TP-PSK
authby=secret
pfs=no
auto=add
keyingtries=3
rekey=no
ikelifetime=8h
keylife=1h
type=transport
left=<服务器公网IP>
leftprotoport=17/1701
right=%any
rightprotoport=17/%any
ike=aes256-sha256-modp2048!
esp=aes256-sha256!
dpddelay=10
dpdtimeout=20
dpdaction=clear
rightid=%any
重点调整:
- 使用更强的加密算法(如
aes256-sha256-modp2048),避免使用旧的加密算法(如 3des)。 - 确保
ike 和 esp 参数中包含强制算法(末尾加 !)。
2. 检查并修正 ipsec.secrets 文件
确保 ipsec.secrets 文件中的 PSK 密钥格式正确。以下是推荐的配置示例:
<服务器公网IP> %any : PSK "your_pre_shared_key"
重点调整:
- 替换
your_pre_shared_key 为实际的预共享密钥。 - 确保密钥长度足够强(至少 16 个字符)。
3. 开启必要的端口
确保服务器的防火墙允许以下端口通信:
- UDP 500 (IKE)
- UDP 4500 (NAT-T)
运行以下命令打开端口:
firewall-cmd --add-port=500/udp --permanent
firewall-cmd --add-port=4500/udp --permanent
firewall-cmd --reload
4. 检查系统时间同步
IKE 协商对系统时间敏感,建议检查并同步系统时间:
timedatectl set-ntp true
timedatectl status
如果时间偏差较大,手动同步时间:
ntpdate pool.ntp.org
5. 启动并检查 ipsec 服务
确保 ipsec 服务正常运行,并加载配置:
systemctl start ipsec
systemctl enable ipsec
ipsec restart
检查日志以排查问题:
journalctl -u ipsec
6. 测试连接
使用 ping 命令测试服务器是否可达,并尝试通过 L2TP/IPSec 客户端连接。
完整配置示例
ipsec.conf
conn L2TP-PSK
authby=secret
pfs=no
auto=add
keyingtries=3
rekey=no
ikelifetime=8h
keylife=1h
type=transport
left=<服务器公网IP>
leftprotoport=17/1701
right=%any
rightprotoport=17/%any
ike=aes256-sha256-modp2048!
esp=aes256-sha256!
dpddelay=10
dpdtimeout=20
dpdaction=clear
rightid=%any
ipsec.secrets
<服务器公网IP> %any : PSK "your_strong_pre_shared_key"
总结
按照上述步骤逐一排查和调整配置,问题通常可以解决。如果仍有问题,请提供完整的 ipsec.conf、ipsec.secrets 文件内容以及 journalctl 日志,以便进一步分析。