CentOS7 安装Cisco anyconnect VPN

AnyConnect 有以下优势:
待机不会断开 能够下发路由表给客户端 稳定 耗电量较低

安装 ocserv (OpenConnect server) ocserv 是一个 OpenConnect SSL VPN 协议服务端,0.3.0 版后兼容使用 AnyConnect SSL VPN 协议的终端。
官方主页:http://www.infradead.org/ocserv/

ocserv 已经在 epel 仓库中提供了,所以可以直接通过 yum 安装
yum install epel-release yum install ocserv

一.生成证书 1.创建工作文件夹
mkdir anyconnect cd anyconnect

2.生成 CA 证书
certtool --generate-privkey --outfile ca-key.pem
cat >ca.tmpl < cn = "Leif CA"
organization = "Leif"
serial = 1
expirationdays = 3650
ca
signing
key
cert_signing_key
crl_signing_key
EOF
certtool --generate-self-signed --load-privkey ca-key.pem --template ca.tmpl --outfile ca-cert.pem
把生成的 ca-cert.pem 放到 /etc/ocserv/ 中 cp ca-cert.pem /etc/ocserv/

3.生成本地服务器证书
certtool --generate-privkey --outfile server-key.pem
cat >server.tmpl < cn = "leif.inc"
organization = "Leif"
serial = 2
expirationdays = 3650
encryption
key
signing_key
tls_www_server
EOF
certtool --generate-certificate --load-privkey server-key.pem --load-ca-certificate ca-cert.pem --load-ca-privkey ca-key.pem --template server.tmpl --outfile server-cert.pem
把生成的 server-cert.pem 和 server-key.pem 放到 /etc/ocserv/ 中 cp server-cert.pem server-key.pem /etc/ocserv/

4.生成客户端证书创建 gen-client-cert.sh 如下
#!/bin/bash

USER=$1
CADIR=$2
SERIAL=date +%s
certtool --generate-privkey --outfile $USER-key.pem
cat << _EOF
>user.tmpl
cn = "$USER"
unit = "users"
serial = "$SERIAL"
expirationdays = 9999
signing
key
tls_www_client
EOF
certtool --generate-certificate --load-privkey $USER-key.pem --load-ca-certificate $CADIR/ca-cert.pem --load-ca-privkey $CADIR/ca-key.pem --template user.tmpl --outfile $USER-cert.pem
openssl pkcs12 -export -inkey $USER-key.pem -in $USER-cert.pem -name "$USER VPN Client Cert" -certfile $CA_DIR/ca-cert.pem -out $USER.p12

5.创建用户文件夹并调用 gen-client-cert.sh 生成证书
mkdir user
cd user
user 指的是用户名,.. 指的是 ca 证书所在的目录 ../gen-client-cert.sh user ..

按提示设置证书使用密码,或直接回车不设密码 最后,通过 http 服务器或其他方式将 user.p12 传输给客户端导入即可

6 配置 ocserv /etc/ocserv/ocserv.conf如下 no-route表示国内路由不走VPN
auth = "plain[passwd=/etc/ocserv/ocpasswd]"
enable-auth = "certificate"
server-cert = /etc/ocserv/server-cert.pem
server-key = /etc/ocserv/server-key.pem
ca-cert = /etc/ocserv/ca-cert.pem
cert-user-oid = 2.5.4.3
max-clients = 16
max-same-clients = 10

run-as-user = nobody
run-as-group = nobody
try-mtu-discovery = true

server-cert = /etc/ocserv/server-cert.pem
server-key = /etc/ocserv/server-key.pem
dns = 8.8.8.8

socket-file = /var/run/ocserv-socket
device = eth-vpn

ipv4-network = 192.168.100.0
ipv4-netmask = 255.255.255.0

tcp-port = 443
udp-port = 443

6.创建用户
username为你要添加的用户名
sudo ocpasswd -c /etc/ocserv/ocpasswd leif

7.配置系统设置
开启内核转发 sed -i 's/net.ipv4.ipforward = 0/net.ipv4.ipforward = 1/g' /etc/sysctl.conf

sysctl -p
配置 iptables NAT转发规则

iptables -t nat -A POSTROUTING -j MASQUERADE

8.测试
现在我们可以开启服务器试试了 ocserv -c /etc/ocserv/ocserv.conf -f -d 1
拿起你的 iOS 设备,下载思科的 AnyConnect 客户端,连接你的服务器(IP和端口)。 出现问题可以看debug的返回信息,如果信息不详细,可以把 1 改成 10。

如果没有问题,那么就可以配置成开机运行了

systemctl enable ocserv;systemctl start ocserv