安装使用OpenConnect

OpenConnect是Cisco AnyConnect SSL VPN的一个开源客户端,支持Cisco多个系列IOS 12.4(9)T及更高版本的Cisco SR500, 870, 880, 1800, 2800, 3800, 7200 Series 和 Cisco 7301,以及ASA 5500系列。

OpenConnnect也可以配合OpenConnect VPN Server - ocserv来实现便捷的翻墙。

Linux使用openconnect

  • Gentoo安装

可以安装 openconnect 以及 networkmanager-openconnect,然后就可以通过nm-applet(network manager的托盘图标)来配置。注意,安装以后需要重启 NetworkManager.service

emerge --ask net-misc/openconnect
  • Ubuntu安装

sudo apt-get install openconnect

连接

openconnect vpnserver

然后输入帐号和密码就可以。

注意:VPN需要使用 tun 设备,内核需要支持,否则会报错 Failed to open tun device: No such device Set up tun device failed

    Device Drivers ->  Network device support
        <*>   Universal TUN/TAP device driver support

Mac上使用OpenConnect

通过homebrew安装OpenConnect

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew update
brew install openconnect

要升级openconnect,则使用 brew upgrade openconnect

以前需要安装Mac OS X TUN/TAP ?:当前tuntap已经不支持最新macOS。不过,现在macOS包含了utun设备,所以你应该不需要再安装tun/tap设备,当前openconnect应该是直接使用macOS提供的原生utun设备。

请参考 []

如果已经安装了Mac OS X TUN/TAP,参考其安装文档可以卸载:

sudo rm -rf /Library/Extensions/tap.kext
sudo rm -rf /Library/Extensions/tun.kext
sudo rm -rf /Library/LaunchDaemons/net.sf.tuntaposx.tap.plist
sudo rm -rf /Library/LaunchDaemons/net.sf.tuntaposx.tun.plist

运行openconnect需要sudo,因为它需要修改DNS,可以通过以下方法加上无需密码的sudo权限

sudo visudo -f /etc/sudoers

添加

%admin  ALL=(ALL) NOPASSWD: /usr/local/bin/openconnect

为避免访问自签名服务器出现的告警,可以通过将服务器证书导出存放到客户端~/.ssh/<certificate name>.pem,然后通过命令访问

sudo openconnect --user=<VPN username> --cafile=<.pem file from step 4.3> <your vpn hostname>

macOS连接OpenConnect报错

  • 连接成功,但是一会就显示操作无效

DTLS handshake failed: Resource temporarily unavailable, try again.
Failed to connect utun unit: Operation not permitted
Failed to open tun device: Operation not permitted
Set up tun device failed
Unknown error; exiting.

这个问题是因为访问 utun 设备需要root权限,虽然 sudo 可以执行,但是在后续应该还有访问 utun 设备,此时似乎后台没有使用root身份。最终我的解决方法是,先切换到root身份,然后再执行 openconnect 就不再报错:

# FIRST switch to root
sudo su -
# THEN create vpn as root
openconnect vpn.example.com

我把这个方法comment到了 OpenConnect VPN on Mac OS X

参考

Last updated