Technology · 2024年4月23日

Newer Cisco servers require a user-agent string that starts with AnyConnect

我一直使用openconnect来连接公司的Cisco VPN。

选用openconnect而不是Cisco自己的Anyconnect VPN的最大原因是:Cisco的Anyconnect VPN太流氓。它不但修改Default Gateway到VPN Gateway,还修改了所有本地网络的路由到VPN(虽然这取决于对端Router或ASA的配置,但很不幸公司的Router/ASA配置了“all traffic”到VPN Gateway……),更流氓的是,Cisco的VPN制止用户添加或者修改本地路由表……

所以当使用Cisco Anyconnect VPN的时候,你发现本地的服务都无法访问。这是不能被接受的。

Openconnect作为开源的VPN,其本身具有轻量化和非常好的兼容性。对于Mac用户,可以通过brew安装,并且通过Openconnect-GUI来图形化来进行管理。

这次遇到的问题的表象是OpenConnect GUI在输入密码后不断提示密码错误。通过GUI的log和CMD下-vvv的log,可以发现密码其实是被接受的,但在做2FA的时候,软件直接提示unknown type 4:

我的第一感觉是OpenConnect对Okta的支持有问题了,但之后怎么也找不到具体原因。网上查询了很多但并没有清晰的思路表明是Okta兼容的问题。

之后我还怀疑过Mac的OpenConnect版本的问题,因为Mac上,OpenConnect的版本显示的是unknown(虽然我知道安装的是9.12,但现实依旧是unknown)。于是我换了Linux,依旧无法报unknown type的错误。

直到今天突然发现一篇文章里给出的命令行格式为:

sudo openconnect –protocol=anyconnect –useragent=AnyConnect <vpn gateway way>

和之前我使用的不同是这里强制指定了user agent。我死马当活马医地尝试了一次,竟然连接成功了!

所以赶紧查询了一下,原来这次Openconnect突然不能连接Cisco VPN Server的原因是:

Newer Cisco servers require a user-agent string that starts with AnyConnect
Newer Cisco servers will refuse XMLPOST-based authentication if the user-agent string does not start with AnyConnect.
OpenConnect’s default user-agent string is Open AnyConnect VPN Agent v$VERSION.

很明显了,Cisco自己加了新的限制条件,导致了第三方的兼容出现了问题。

目前通过Openconnect-GUI无法指定user-agent,因此在新的GUI版本出来之前,或者新的openconnect修改其默认的user-agent之前,我们只能通过手动在命令行指定user-agent的方法来使用openconnect了。


上述问题应该在openconnect GUI 1.6.0中解决了

Send correct/default OpenConnect’s User-Agent string

https://gitlab.com/openconnect/openconnect-gui/-/releases

但是Mac版本依旧只有1.5.3。