参考了以下资料
Debian下安装配置Ocserv搭建Cisco Anyconnect的开源服务端 post:2014年05月28日
http://aenes.com/post/716.html
上面这篇文章作者说了,参考了下面两篇文章
http://ttz.im/blog/2014/02/1131
ocserv: 兼容Cisco Anyconnect的开源服务端 by 杂物仓库 Mk.II post:2014年2月16日
http://imkevin.me/post/80157872840/anyconnect-iphone AnyConnect
带来 iPhone 上的新生活 by Kevin Blog post:2014年3月20日
另外,我后来还看到这篇文章
https://x.hou.im/2014/04/17/anyconnectda-jian-jiao-cheng/
AnyConnect ( ocserv ) 搭建教程 post:2014年4月17日
v2ex上也有人在讨论,http://www.v2ex.com/t/107696
还有http://www.v2ex.com/t/120985 Kevin Blog的那篇文章就是在这里找到的。
缘起
最初想要搞一个VPN,但不知道现在哪一种VPN方式好,谷歌“不受干扰的VPN”,找到四种翻墙方式 by Felix Yan felixonmars post:2014年6月15日。 从这篇文章第一次知道了Ocserv,他说的四种翻墙方式,shadowsocks我已经搞定了,从shadowsocks这种方式,我觉得他说的话应该是可信的。
然后从谷歌找到ocserv: 兼容Cisco Anyconnect的开源服务端 by 杂物仓库 Mk.II post:2014年2月16日 ,Debian下安装配置Ocserv搭建Cisco Anyconnect的开源服务端 post:2014年05月28日。第二篇文章更详细一点。后来在折腾过程中,又找到AnyConnect 带来 iPhone 上的新生活 by Kevin Blog post:2014年3月20日,我就是参考这三篇文章把ocserv折腾好的。后来又发现AnyConnect ( ocserv ) 搭建教程 post:2014年4月17日。目前来说,中文资料里讲ocserv的就这四篇文章了。感谢这些作者的分享,给出了真实有效的配置实例,让我很容易的就搞好了ocserv,上次我搞StrongSwan,折腾两天最后无功,因为教程太老,与现在的版本相差太大,新手伤不起啊!
教程开始
ocserv使用GnuTLS作为SSL的library,所以编译时需要对应的dev包。Debian stable里面带的版本太老(2.12.20),而ocserv需要的包版本在2.15以上,所以需要从backports安装:
追加软件源
echo "deb http://ftp.debian.org/debian wheezy-backports main contrib non-free" >> /etc/apt/sources.list
更新源:
apt-get update
顺便更新一下linux系统:
apt-get upgrade --show-upgraded
开始安装依赖包
apt-get -t wheezy-backports install libgnutls28-dev
安装后的状态显示:
Setting up libnettle4:amd64 (2.7.1-1~bpo70+1) …
Setting up libhogweed2:amd64 (2.7.1-1~bpo70+1) …
Setting up libp11-kit0:amd64 (0.20.2-1~bpo70+1) …
Setting up libtasn1-6:amd64 (3.6-1~bpo70+1) …
Setting up libgnutls-deb0-28:amd64 (3.2.15-2~bpo70+1) …
Setting up libgnutls-xssl0:amd64 (3.2.15-2~bpo70+1) …
Setting up libgnutlsxx28:amd64 (3.2.15-2~bpo70+1) …
Setting up nettle-dev (2.7.1-1~bpo70+1) …
Setting up libtasn1-6-dev (3.6-1~bpo70+1) …
Setting up libp11-kit-dev (0.20.2-1~bpo70+1) …
Setting up libgnutls28-dev:amd64 (3.2.15-2~bpo70+1) …
再安装别的依赖包
此处据http://aenes.com/post/716.html
apt-get install libgmp3-dev m4 gcc pkg-config make gnutls-bin -y
此处据http://imkevin.me/post/80157872840/anyconnect-iphone
apt-get install build-essential libwrap0-dev libpam0g-dev libdbus-1-dev \ libreadline-dev libnl-route-3-dev libprotobuf-c0-dev libpcl1-dev\ libopts25-dev autogen libgnutls28 libseccomp-dev
安装后的状态显示:
Setting up libgnutls28:amd64 (3.2.15-1~bpo70+1) ... Setting up libdbus-1-3:amd64 (1.6.8-1+deb7u3) ... Setting up libltdl7:amd64 (2.4.2-1.1) ... Setting up libnl-3-200:amd64 (3.2.7-4) ... Setting up libnl-route-3-200:amd64 (3.2.7-4) ... Setting up libseccomp2:amd64 (2.1.1-1~bpo70+1) ... Setting up libsystemd-login0:amd64 (44-11+deb7u4) ... Setting up guile-1.8-libs (1.8.8+1-8) ... Setting up libopts25-dev (1:5.12-0.1) ... Setting up autogen (1:5.12-0.1) ... Setting up dbus (1.6.8-1+deb7u3) ... [ ok ] Starting system message bus: dbus. Setting up libdbus-1-dev (1.6.8- 1+deb7u3) ... Setting up libnl-3-dev (3.2.7-4) ... Setting up libnl-route-3-dev (3.2.7-4) ... Setting up libpcl1 (1.6-1) ... Setting up libpcl1-dev (1.6-1) ... Setting up libprotobuf-c0 (0.14-1+b1) ... Setting up libprotobuf-c0-dev (0.14-1+b1) ... Setting up libtinfo-dev:amd64 (5.9-10) ... Setting up libreadline6- dev:amd64 (6.2+dfsg-0.1) ... Setting up libreadline-dev:amd64 (6.2+dfsg-0.1) ... Setting up libseccomp-dev:amd64 (2.1.1-1~bpo70+1) ... Setting up libwrap0-dev:amd64 (7.6.q-24) ...
下载安装Ocserv,目前最新版为0.8.1
cd /usr/src /usr/src# wget ftp://ftp.infradead.org/pub/ocserv/ocserv-0.8.1.tar.xz /usr/src# tar Jxvf ocserv-0.8.1.tar.xz /usr/src# cd ocserv-0.8.1 /usr/src/ocserv-0.8.1# ./configure --prefix=/usr --sysconfdir=/etc && make && make install
生成CA证书
certtool --generate-privkey --outfile ca-key.pem cat <<_EOF_> ca.tmpl
cn = "luoqkk vpn" organization = "luoqkk" serial = 1 expiration_days = 9999 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 <<_EOF_> server.tmpl
cn = "luoqkk vpn" organization = "luoqkk" serial = 2 expiration_days = 9999 signing_key encryption_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
如果是在root#提示符下操作的,生成的文件在/root文件夹下,生成之后把服务器证书server-cert.pem 放到/etc/ssl/certs,私钥server-key.pem 放到/etc/ssl/private。
cp ca-cert.pem /etc/ssl/certs cp ca-key.pem /etc/ssl/private cp server-cert.pem /etc/ssl/certs cp server-key.pem /etc/ssl/private
这些文件应该是这样的
/etc/ssl/certs/server-cert.pem /etc/ssl/private/server-key.pem /etc/ssl/certs/ca-cert.pem
接下来是配置文件,建立/etc/ocserv并把doc/sample.config拷到该文件夹下,改名为ocserv.conf:
mkdir /etc/ocserv && cp /usr/src/ocserv-0.8.1/doc/sample.config /etc/ocserv/ && mv /etc/ocserv/sample.config /etc/ocserv/ocserv.conf
创建用户
ocpasswd -c /etc/ocserv/ocpasswd username
#username为你要添加的用户名
也可以写成下面这样的,前一个ocpasswd是生成密码的工具,后一个ocpasswd是生成的密码文件。
/usr/bin/ocpasswd -c /etc/ocserv/ocpasswd username
然后会要求你设置密码,密码最好是字母加数字。
修改系统配置,允许转发
vim /etc/sysctl.conf #修改这行 net.ipv4.ip_forward = 1 #保存退出 sysctl -p
其它的各种配置文件,最上面的链接中写得很详细了,而且为了防止链接打不开,我还保存到我的博客中了,到那几篇文章中去复制粘贴吧,我不想再复制了。
重要说明
请使用anyconnect-win-3.0.11042-pre-deploy-k9.iso安装客户端,下载地址:http://frodo.sca.com/downloads/,大家可以跟思科官网的MD5值对比一下,我检查过了,跟官网的MD5值是一样的。
如果你用最新版的3.1.05170,会有下面的提示,不能连接到服务器,新版不支持自签名的证书。
the service provider in your current location is restricting access to the internet. you need to log on with the service provider before you can establish a vpn session. you cantry this by visiting any website with your browser.
================
下面是我的胡言乱语,是我折腾过程中的零碎启示,大家不用看,会看晕头的
================
修改密码后,不能连接,提示:
anyconnect was not able to establish a connection to the specified secure gateway. please try connecting again.
AnyConnect无法建立到指定的安全网关的连接。请尝试重新连接。
这是由于密码中包含特殊字符,改用字母加数字的密码后OK。
还是不行,有上面那个提示,那个提示过后还有一个提示:
an unknown termination error has occurred in the client service.
发生在客户端服务的未知终止错误。
卸载客户端软件,重新安装后OK。
用客户端连接,客户端提示如下,并建议:use a browser to gain access
the service provider in your current location is restricting access to the internet. you need to log on with the service provider before you can establish a vpn session. you can
try this by visiting any website with your browser.
AnyConnect客户端设置中一定要不选中 “Block connections to untrusted servers”,请重启电脑,或重新安装。(http://www.iqlinkus.net/download.action)
重启后再登录,提示:could not connect to server. please verify internet connectivity and server address
Starting OpenConnect VPN Server Daemon: You cannot mix multiple username/password authentication methods
原来是/etc/ocserv/ocserv.conf文件中下面这一行没注释掉。
auth = “plain[/etc/ocserv/ocpasswd]”
然后就可以连接上了,但是不能上网,路由错误,和这个图一模一样:ftp://myvpn.chinacloudapp.cn/a.jpg
route details secured routes(ipv4) 0.0.0.0/0
cp /usr/src/ocserv-0.8.1/doc/profile.xml /etc/ocserv/
chmod 755 /etc/init.d/ocserv update-rc.d ocserv defaults /etc/init.d/ocserv restart
提示:-bash: /etc/init.d/ocserv: /bin/sh^M: bad interpreter: No such file or directory
这是不同系统编码格式引起的:在windows系统中编辑的.sh文件可能有不可见字符,所以在Linux系统下执行会报以上异常信息。 (http://mushme.iteye.com/blog/1486978)
添加nat表(http://blog.51yip.com/linux/1404.html)
iptables -t nat -A POSTROUTING -s 10.10.0.0/24 -j MASQUERADE iptables -t nat -A POSTROUTING -j MASQUERADE
将源地址是 10.10.0.0/24 的数据包进行地址伪装
http://blog.51yip.com/linux/1404.html
iptables -F //清空所有规则 iptables -L -n --line-number//--line-number可以显示规则序号,在删除的时候比较方便 iptables -A FORWARD -s 192.168.20.0/24 -j ACCEPT iptables -t nat -A POSTROUTING -s 192.168.20.0/24 -o eth0 -j MASQUERADE
iptables -A INPUT -i lo -j ACCEPT
添加iptables规则, 允许来自于lo接口的数据包(http://zhidao.baidu.com/link?url=jRCdvFLUmPdkT0OvV1aflKXFGjrGSBIzz7mh2rQtVOqiW0mXKjqxR3yOggMB9qmMNQ38mFJOYFJaWFhcPTbES_)
iptables -A OUTPUT -o lo -j ACCEPT
添加iptables规则, 允许向lo接口发送数据包
查看filter表
iptables -L -n --line-number |grep 21 //--line-number可以显示规则序号,在删除的时候比较方便
查看nat表
iptables -t nat -vnL POSTROUTING --line-number
最后在iptables中打开tcp和udp的443端口即可。ocserv使用tcp的443端口认证,udp用于传输数据。
VPN连接后默认网关通信异常
VPN连接后默认网关通讯异常
路由跟踪-Tracert命令详解
怀疑是没有制作客户端证书,参考官网:http://www.infradead.org/ocserv/manual.html
$ certtool --generate-privkey --outfile user-key.pem $ cat <<_EOF_>user.tmpl
cn = "user" unit = "admins" serial = 1824 expiration_days = 9999 signing_key tls_www_client _EOF_
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
生成可在windows中可导入的p12格式的证书
openssl pkcs12 -export -inkey user-key.pem -in user-cert.pem -name "ocservclient" \ -certfile ca-cert.pem -caname "ocserv CA" -out client.cert.p12
会提示设置证书密码,也可以不设置直接回车即可。
you may need to use a browser to gain access.客户端建议:web authentication required
配置iptables(https://x.hou.im/2014/04/17/anyconnectda-jian-jiao-cheng/)
自动调整MTU
sudo iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
开启 NAT (记得把 eth0 改成自己的网卡名,openvz 的基本是 venet0 )
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
开启 IPv4 的转发
sudo sysctl -w net.ipv4.ip_forward=1
打开 443 端口
iptables -I INPUT -p tcp --dport 443 -j ACCEPT iptables -I INPUT -p udp --dport 443 -j ACCEPT
现在我们可以开启服务器试试了
sudo ocserv -c /etc/ocserv/ocserv.conf -f -d 1
listening (TCP) on 0.0.0.0:443... bind() failed: Address already in use listening (TCP) on [::]:443... bind() failed: Address already in use Could not listen to any TCP ports
我们终端输入命令显示443端口被被那个程序占用(http://blog.chinaunix.net/uid-26804016-id-3413836.html)
#netstat -lnp|grep 443
显示是ocserv,测试是正常的,
转载请注明:一秒钟的梦 » [原创]linode vps debian7.5安装配置ocserv(OpenConnect server)