使用Strongswan连接Cisco ASA IKEv1 VPN时遇NO_PROPOSAL_CHOSEN错误
我之前帮不少用户排查过这类StrongSwan和Cisco ASA IKEv1的对接问题,结合你提供的环境信息(Debian 9内核4.9、StrongSwan 5.5.1)和ike-scan结果,给你几个针对性的排查和配置调整方向——毕竟没法直接操作ASA设备,咱们只能从客户端侧尽量严格匹配ASA的提案要求。
1. 严格对齐ASA的IKEv1提案参数
从你的ike-scan输出能看到,ASA支持的提案是Enc=3DES Hash=SHA1 Group=2:modp1024 Auth=PSK,这一步必须把StrongSwan的配置死死卡准这个参数,不能让它乱协商别的选项:
修改/etc/ipsec.conf,添加(或修改)你的VPN连接段:
conn cisco-asa-vpn keyexchange=ikev1 # 强制用IKEv1,避免默认走IKEv2 ike=3des-sha1-modp1024! # 末尾的!是强制使用该提案,不协商其他 esp=3des-sha1! left=%defaultroute leftauth=psk right=ASA_IP_ADDRESS # 替换成你的ASA实际IP rightsubnet=0.0.0.0/0 # 如果是全流量走VPN就用这个,否则填实际的VPN子网 rightauth=psk auto=add
2. 检查PSK预共享密钥的配置
打开/etc/ipsec.secrets,确保格式完全正确:
ASA_IP_ADDRESS : PSK "你的预共享密钥内容"
注意:如果密钥里有特殊字符(比如!@#$),一定要用双引号括起来,不要有多余的空格或者换行,否则认证会直接失败。
3. 调整兼容性参数适配ASA
Debian 9的4.9内核和StrongSwan 5.5.x与ASA对接时,有时候会因为生命周期、DPD检测的默认值不匹配导致连接失败,你可以给conn段加上这些参数:
ikelifetime=86400s # ASA默认IKE SA生命周期是24小时 lifetime=3600s # ASA默认ESP SA生命周期是1小时 dpddelay=30s dpdtimeout=120s dpdaction=restart
这些参数能提升连接的稳定性,避免因为超时或者心跳检测问题导致断开。
4. 开启详细日志定位具体错误
如果还是连不上,必须通过日志找问题!修改/etc/strongswan.conf开启详细日志:
charon { log { file=/var/log/strongswan.log time_format=%b %e %T default=1 ike=2 cfg=2 } }
重启服务:systemctl restart strongswan,尝试连接后查看/var/log/strongswan.log,重点关注这些关键词:
NO_PROPOSAL_CHOSEN:说明提案不匹配,需重新检查ike/esp参数INVALID_KEY_INFORMATION:PSK密钥错误或格式不正确AUTH_FAILED:如果是XAUTH认证场景,大概率是用户名密码错误
5. 额外排查:XAUTH扩展认证场景
有些ASA配置了XAUTH(需要用户名+密码的二次认证),如果你的VPN是这种情况,还要在ipsec.conf的conn段添加:
leftauth2=xauth rightauth2=xauth
然后在ipsec.secrets里补充认证信息:
你的VPN用户名 : XAUTH "你的VPN密码"
最后检查防火墙与路由
- 确保Debian主机的防火墙允许UDP 500和4500端口的流量(IKEv1和NAT-T穿越必需)
- 如果你的主机在NAT网络后方,记得在conn段添加
leftsourceip=%config,让ASA分配VPN客户端IP - 连接成功后用
ip route show确认,VPN子网的路由是否已被正确添加
内容的提问来源于stack exchange,提问作者patok

