今天是: 收藏本站 设为主页
网站首页 >  技术专栏  >  linux  > 

在 CentOS 7 上搭建 Cisco AnyConnect VPN

日期:2016-07-04  点击率:548


因为最近的干扰力度变大,考虑到 AnyConnect 是思科的安全远程接入解决方案,隐蔽性要好一些,所以决定在服务器上搭建 AnyConnect 以提供给 iOS 设备使用,原来的 Cisco IPSec VPN 废弃,Shadowsocks 保留用于安卓和PC的连接。

AnyConnect 有以下优势:

待机不会断开
能够下发路由表给客户端(未测试)
稳定
耗电量较低
1. 安装 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
2. 生成证书

这里你需要先仔细阅读官方文档,简单的来说,如下几步

创建工作文件夹
$ mkdir CA
$ cd CA
生成 CA 证书

$ certtool --generate-privkey --outfile ca-key.pem
$ cat >ca.tmpl <cn = "VPN CA"
organization = "Big Corp"
serial = 1
expiration_days = 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
生成本地服务器证书

$ certtool --generate-privkey --outfile server-key.pem
$ cat >server.tmpl <cn = "www.example.com"
organization = "MyCompany"
serial = 2
expiration_days = 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 放到 /etc/ssl/certs,server-key.pem 放到 /etc/ssl/private

3. 配置 ocserv

1
$ sudo vim /etc/ocserv/ocserv.conf
主要修改以下部分


#ocserv支持多种认证方式,这是自带的密码认证,使用ocpasswd创建密码文件
#ocserv还支持证书认证,可以通过Pluggable Authentication Modules (PAM)使用radius等认证方式
auth = "plain[/etc/ocserv/ocpasswd]"

#证书路径
server-cert = /etc/ssl/certs/server-cert.pem
server-key = /etc/ssl/private/server-key.pem

#最大用户数量
max-clients = 16

#同一个用户最多同时登陆数
max-same-clients = 10

#tcp和udp端口
tcp-port = 4433
udp-port = 4433

#运行用户和组
run-as-user = ocserv
run-as-group = ocserv

#分配给VPN客户端的IP段
ipv4-network = 10.12.0.0
ipv4-netmask = 255.255.255.0

#DNS
dns = 8.8.8.8
dns = 8.8.4.4

#注释掉route的字段,这样表示所有流量都通过 VPN 发送
#route = 192.168.1.0/255.255.255.0
#route = 192.168.5.0/255.255.255.0
4. 创建用户


#username为你要添加的用户名
$ sudo ocpasswd -c /etc/ocserv/ocpasswd username
5. 配置系统设置

开启内核转发

$ sudo sed -i 's/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/g' /etc/sysctl.conf
$ sudo sysctl -p
配置 iptables 规则
你可以参考Linode 的文章来配置 iptables


#IP段和venet0接口要根据自己的情况修改
$ sudo iptables -t nat -A POSTROUTING -s 10.12.0.0/24 -o venet0 -j MASQUERADE
$ sudo iptables -A FORWARD -s 10.12.0.0/24 -j ACCEPT
$ sudo iptables-save > /etc/sysconfig/iptables
6. 测试

现在我们可以开启服务器试试了

1
$ sudo ocserv -c /etc/ocserv/ocserv.conf -f -d 1
拿起你的 iOS 设备,下载思科的 AnyConnect 客户端,连接你的服务器。

出现问题可以看debug的返回信息,如果信息不详细,可以把 1 改成 10。

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


$ sudo systemctl enable ocserv
$ sudo systemctl start ocserv
a. 下发路由

我想这个功能是最激动人心的,因为我们手机如果长期连接,那么肯定是某些服务走 VPN,而国内的网站可以走手机自己的网络体验最好。

但是这里的一个问题是,AnyConnect 有下发路由表的 64 条数限制。

所以我们只能保证下某几个常用的服务是可用的,比如 Google Facebook 以及 Twitter

编辑配置文件


$ sudo vim /etc/ocserv/ocserv.conf
添加 route = 的字段即可




下一篇:Win10 下Cisco AnyConnect Secure Mobility Client问题   上一篇:linux kvm 利用nat方式共享上网