Centos6.7搭建AnyConnect ocserv安装配置全记录

发表时间
评论 没有

未越狱的iOS不能使用SS,而PPTP、L2TP等已经完全被破解根本无法使用,为了科学上网操碎了心。在CENTOS 7上安装OCSERV很简单,可以通过yum安装,也有一键安装包可用。但是试验多次都没能安装成功,只好回到CENTOS 6一步步手动安装。

首先准备编译环境

$ yum install pam-devel readline-devel http-parser-devel unbound gmp-devel
$ yum install tar gzip xz wget gcc make autoconf

然后安装ocserv的相关依赖

注意不要安装其他更新版本,否则会出错需要手动配置

安装nettle

$ wget ftp://ftp.gnu.org/gnu/nettle/nettle-2.7.1.tar.gz
$ tar zxvf nettle-2.7.1.tar.gz
$ cd nettle-2.7.1/
$ ./configure --prefix=/usr/local/nettle
$ make && make install
$ echo '/usr/local/nettle/lib64/' > /etc/ld.so.conf.d/nettle.conf
$ ldconfig

安装unbound

$ yum install expat-devel
$ wget http://unbound.nlnetlabs.nl/downloads/unbound-1.4.22.tar.gz
$ tar zxf unbound-1.4.22.tar.gz && cd unbound-1.4.22
$ ./configure --prefix=/usr --sysconfdir=/etc && make && make install
$ cd ..
$ echo '/usr/local/lib' > /etc/ld.so.conf.d/local-libraries.conf && ldconfig
$ unbound-anchor -a "/etc/unbound/root.key"</code>

安装gnutls

$ export NETTLE_CFLAGS="-I/usr/local/nettle/include/"  
$ export NETTLE_LIBS="-L/usr/local/nettle/lib64/ -lnettle"
$ export HOGWEED_LIBS="-L/usr/local/nettle/lib64/ -lhogweed"
$ export HOGWEED_CFLAGS="-I/usr/local/nettle/include"
$ wget ftp://ftp.gnutls.org/gcrypt/gnutls/v3.3/gnutls-3.3.9.tar.xz
$ tar xvf gnutls-3.3.9.tar.xz
$ cd gnutls-3.3.9/
$ ./configure --prefix=/usr/local/gnutls
$ make && make install 
$ ln -s /usr/local/gnutls/bin/certtool /usr/bin/certtool   
$ echo '/usr/local/gnutls/lib/' > /etc/ld.so.conf.d/gnutls.conf  
$ ldconfig

安装libnl

$ yum install bison flex
$ wget http://www.carisma.slowglass.com/~tgr/libnl/files/libnl-3.2.24.tar.gz
$ tar xvf libnl-3.2.24.tar.gz 
$ cd libnl-3.2.24
$ ./configure --prefix=/usr/local/libnl
$ make && make install
$ echo '/usr/local/libnl/lib/' > /etc/ld.so.conf.d/libnl.conf
$ ldconfig

安装ocserv

$ export LIBNL3_CFLAGS="-I/usr/local/libnl/include/libnl3"
$ export LIBNL3_LIBS="-L//usr/local/libnl/lib/ -lnl-3 -lnl-route-3"
$ export LIBGNUTLS_LIBS="-L/usr/local/gnutls/lib/ -lgnutls"
$ export LIBGNUTLS_CFLAGS="-I/usr/local/gnutls/include/"
$ wget ftp://ftp.infradead.org/pub/ocserv/ocserv-0.9.0.1.tar.xz
$ tar xvf ocserv-0.9.0.1.tar.xz
$ cd ocserv-0.9.0
$ ./configure --prefix=/usr/local/ocserv
$ make && make install 
$ echo 'export PATH=$PATH://usr/local/ocserv/sbin/:/usr/local/ocserv/bin/' >> $HOME/.bashrc
$ source $HOME/.bashrc

准备自签证书

$ mkdir cert
$ cd cert

CA证书生成
创建CA模板 cn 与 organization 随便填写

$ vi ca.tmpl

填入以下内容
cn = "Your CA name"   
organization = "Your fancy name"   
serial = 1  
expiration_days = 3650 
ca 
signing_key  
cert_signing_key  
crl_signing_key

$ certtool --generate-privkey --outfile ca-key.pem  
$ certtool --generate-self-signed --load-privkey ca-key.pem --template ca.tmpl --outfile ca-cert.pem

服务器证书生成
cn必须填写自己服务器的ip或指向该ip的域名

$ vi server.tmpl

填入以下内容
cn = "Your hostname or IP" 
organization = "Your fancy name"  
expiration_days = 3650  
signing_key
encryption_key 
tls_www_server

$ certtool --generate-privkey --outfile server-key.pem 
$ 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

客户端(ios)证书生成

$ vi user.tmpl

填入以下内容
cn = "some random name"
unit = "some random unit"  
expiration_days = 365
signing_key  
tls_www_client

$ certtool --generate-privkey --outfile user-key.pem  
$ certtool --generate-certificate --load-privkey user-key.pem --load-ca-certificate ca-cert.pem --load-ca-privkey ca-key.pem --template user.tmpl --outfile user-cert.pem

将用户证书转换为ios上的p12证书

$ openssl pkcs12 -export -inkey user-key.pem -in user-cert.pem -certfile ca-cert.pem -out user.p12

复制证书到以下文件夹

$ cp ca-cert.pem /etc/ssl/certs/my-ca-cert.pem
$ cp server-cert.pem /etc/ssl/certs/my-server-cert.pem 
$ cp server-key.pem /etc/ssl/private/my-server-key.pem

配置ocserv

$ mkdir /etc/ocserv
$ cp doc/sample.config /etc/ocserv/ocserv.conf
编辑ocserv.conf文件按以下内容进行配置,注意参数末尾不要加空格
$ vim /etc/ocserv/ocserv.conf
登陆方式,目前先用密码登录
auth = "plain[/etc/ocserv/ocpasswd]"
max-clients = 10
限制同一客户端的并行登陆数量
max-same-clients = 10
服务监听的IP(服务器IP,可不设置)
#listen-host = 1.2.3.4
服务监听的TCP/UDP端口
tcp-port = 9200
udp-port = 9201
自动优化VPN的网络性能
try-mtu-discovery = true
确保服务器正确读取用户证书(后面会用到用户证书)
#cert-user-oid = 2.5.4.3
服务器证书与密钥
server-cert = /etc/ssl/certs/server-cert.pem
server-key = /etc/ssl/private/server-key.pem
客户端连上vpn后使用的dns
dns = 8.8.8.8
dns = 8.8.4.4
注释掉所有的route,让服务器成为gateway
#route = 192.168.1.0/255.255.255.0
启用cisco客户端兼容性支持
cisco-client-compat = true
开着这个会报错:error: ‘isolate-workers’ is set to true, but not compiled with seccomp or Linux namespaces support 好像是内核不支持,反正自己看着办
#isolate-workers = false
device = vpns
session-control = true
keepalive = 32400
dpd = 90
auth-timeout = 40
cookie-timeout = 300
deny-roaming = false
rekey-time = 172800
rekey-method = ssl
use-utmp = true
use-occtl = true
pid-file = /var/run/ocserv.pid
socket-file = /var/run/ocserv-socket
run-as-user = nobody
run-as-group = nobody
predictable-ips = true
ipv4-network = 192.168.10.0
ipv4-netmask = 255.255.255.0
ping-leases = false

创建一个登陆用的用户名与密码

$ ocpasswd -c /etc/ocserv/ocpasswd username

如报错: -bash: ocpasswd: command not found,则
$ cd /usr/local/src/ocserv-0.9.0.1/src
$ cp ocpasswd /usr/bin

再运行
$ ocpasswd -c /etc/ocserv/ocpasswd username

修改系统配置,允许转发

$ vim /etc/sysctl.conf
#修改这行
net.ipv4.ip_forward = 1</code>

保存退出
$ sysctl -p

其他行的报错不用管

防火墙设置

$ iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o venet0 -j MASQUERADE
$ iptables -A FORWARD -s 192.168.10.0/24 -j ACCEPT
$ iptables -A INPUT -p tcp -m state --state NEW --dport 443 -j ACCEPT
$ iptables -A INPUT -p udp -m state --state NEW --dport 443 -j ACCEPT
$ service iptables save

IP段和venet0接口要根据自己的情况修改

最后运行服务

$ ocserv -c /etc/ocserv/ocserv.conf

测试OCserv

在服务器端启动OpenConnect Server。

$ ocserv -f -d 1

如果服务没错误退出,是时候来测测客户端了。假设你使用iOS,下载Cisco AnyConnect。

在Connections下加入新的VPN配置,在服务器地址栏目上填入对应的IP/Hostname和TCP端口

然后到设置标签页下暂时禁用“阻止不信任的服务器”选项。首次连接,AnyConnect会提示你这是不信任证书,如果你之前的服务器证书模板的cn没写错的话,你可以接受并导入该证书(可在诊断标签页的证书菜单里的服务器证书列表看到)。以后即便启用“阻止不信任的服务器”选项,也不会报错了(和SSH首次登陆类似)。

确定VPN连接正常并可以科学上网后,我们可以接着提高网络生活质量。

自动化OCserv

配置开机启动

$ vi /etc/rc.d/rc.local

添加:
/usr/local/sbin/ocserv -c /usr/local/etc/ocserv/ocserv.conf

注意修改安装路径

然后我们要通过URL将客户端证书user.p12文件导入AnyConnect,具体位置在诊断标签页的证书栏目下。如果你的服务器已经有Nginx/Apache服务,只要传到一个可以访问的URL路径下即可。如果没有,请参照Nginx官网或Linode的Nginx入门教程。

导入成功之后,将对应的VPN设置的高级设置部分的证书栏目,改为导入的这张证书。

最后我们要调整下OCserv的配置——

$ vim /etc/ocserv/ocserv.conf

修改以下内容
改为证书登陆,注释掉原来的登陆模式
auth = "certificate"

证书认证不支持这个选项,注释掉这行
#listen-clear-file = /var/run/ocserv-conn.socket

启用证书验证
ca-cert = /etc/ssl/certs/my-ca-cert.pem

证书方式下需要设置为false,如报错可注释掉
isolate-workers = false

重启OCserv服务,确认VPN无需密码就可以正常登陆。

参考文章
Centos6上搭建翻墙服务 CentOS6配置AnyConnec 在 CentOS 6.7 上配置 Cisco AnyConnect VPN

推荐阅读
CentOS 7系统管理与运维实战

作者
分类 网站建设

评论

本文评论功能已关闭。

← 较早的 较新的 →

相关文章