最新消息:

[原创]linode vps debian7.5安装配置ocserv(OpenConnect server)

VPN 林夕 82617浏览 23评论

参考了以下资料

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)

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (23)

  1. 思科 anyconnect VPN 只能用思科硬件设备搭建么?有没有可以替代的软件搭建的?比如可以装在 linux vps 上面的替代品? http://www.v2ex.com/t/107696 >>在CentOS 6.5上配置Cisco AnyConnect VPN这个是源码安装依赖包
    luoqkk4年前 (2014-07-20)回复
  2. 在Windows(3.0.11042)和iOS(3.0.09266)上测试AnyConnect客户端成功。
    ocserv: 兼容Cisco Anyconnect的开源服务端 [杂物仓库 Mk.II] http://ttz.im/blog/2014/02/1131
    luoqkk4年前 (2014-07-20)回复
  3. 安卓不root能用吗,速度怎么样?看起来这个不错
    tennfy4年前 (2014-07-28)回复
    • Anyconnect安卓自带客户端就可以用。听人说现在也就四种翻墙方式比较好。
      目前 openvpn-obfs, openconnect 和 tinc 都是比较好使的 vpn 翻墙方案, 结合前面猫推荐的 shadowsocks, 这就是今晚猫会继续推荐的四种翻墙方式啦
      https://gist.github.com/felixonmars/e0e543b71238dc65bf58
      luoqkk4年前 (2014-07-29)回复
  4. ocpasswd 添加用户那部分总是提示ocpasswd: command not found ?望指教!
    nickw4年前 (2014-11-05)回复
    • /usr/bin/ocpasswd这个是密码工具的路径,就好比windows下exe文件的路径。 /etc/ocserv/ocpasswd是生成的密码文件,是一个配置文件。你看一下你vps上/usr/bin/目录下有ocpasswd这个文件没有。 /usr/bin/ocpasswd -c /etc/ocserv/ocpasswd username
      luoqkk4年前 (2014-11-06)回复
      • 多谢回复,又被虐了几次,我查了下usr/bin下没有找到ocpasswd这个文件,不知道啥原因还是ocpasswd:command not found 实在太奇怪了。
        nickw4年前 (2014-11-21)回复
        • 有可能我没编译好ocserv?我再试试
          nickw4年前 (2014-11-21)回复
        • 不一定是这个路径,你可以搜索一下试试,# find / -name 'ocpasswd' 在命令行下执行find / -name 'ocpasswd'来全盘搜索一下这个文件。
          luoqkk4年前 (2014-11-24)回复
  5. 执行到 libopts25-dev autogen libgnutls28 libgnutls28-dev libseccomp-dev后显示 E: Unable to locate package libpcl1-devlibopts25-dev E: Unable to locate package libgnutls28 这怎么解决,谢谢了。
    olfred4年前 (2014-11-20)回复
    • 那一段从apt-get install 开始把三行全部输入,如果你一行一行输入的话,每一行前面都要加apt-get install
      luoqkk4年前 (2014-11-21)回复
  6. 请问出现如下信息时什么情况? root@unknown:~# apt-get -t wheezy-backports install libgnutls28-dev Reading package lists... Done Building dependency tree Reading state information... Done Some packages could not be installed. This may mean that you have requested an impossible situation or if you are using the unstable distribution that some required packages have not yet been created or been moved out of Incoming. The following information may help to resolve the situation: The following packages have unmet dependencies: libgnutls28-dev : Depends: libgnutls-deb0-28 (= 3.3.8-4~bpo70+1) but 3.3.8-5 is to be installed Depends: libgnutlsxx28 (= 3.3.8-4~bpo70+1) but it is not going to be installed Depends: nettle-dev (>= 2.5) but it is not going to be installed Depends: libtasn1-6-dev (>= 3.9) but it is not going to be installed Depends: libp11-kit-dev (>= 0.20.7) but it is not going to be installed E: Unable to correct problems, you have held broken packages.
    hot4年前 (2014-12-12)回复
    • 明显是依赖包的支持环境没安装好,你试一下,这个先不装,把教程中下面两段依赖包先安装了,再安装这个。
      luoqkk4年前 (2014-12-15)回复
      • 运行到这里的时候出了点问题: 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 提示如下: /usr/src/ocserv-0.8.1# 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 configFileLoad: No such file or directory Error loading template: server.tmpl
        hot4年前 (2014-12-18)回复
        • server.tmpl的路径对吗?不能载入这个server.tmpl
          luoqkk4年前 (2014-12-19)回复
  7. Unable to locate package libgnutls28 硬是出这个不知道怎么搞了
    anycon_14年前 (2015-04-04)回复
    • 基础环境没安装好,再把这个libgnutls28安装一遍。
      luoqkk4年前 (2015-04-04)回复
      • 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 libseccomp-dev apt-get install libgnutls28-dbg 安装的 还是没成功ocserv -c /etc/ocserv/ocserv.conf -f -d 1 Configuration option socket-file is mandatory.
        anycon_14年前 (2015-04-04)回复
        • sudo ocserv -c /etc/ocserv/ocserv.conf -f -d 1 出Configuration option socket-file is mandatory.是什么意思 ocserv -v 有版本信息
          anycon_14年前 (2015-04-05)回复