这个是逗比根据地的备份镜像站(非官方)。牢记域名: [doubibackup.com]。搜索:标签云
投稿文章 | 广告合作 | Telegram 群组 / 公告频道 / 使用教程
广告

使用Ocserv 手动搭建 Cisco AnyConnect VPN服务端

VPN资源 Toyo 52评论
广告
本文最后更新于 2018年9月20日 20:04 可能会因为没有更新而失效。如已失效或需要修正,请留言!

很早就有人想要我写这个 Cisco AnyConnect VPN 服务端的搭建教程了,不过我一直嫌麻烦没写,这段时间没什么东西写,那么就写个看看吧。

Cisco AnyConnect VPN客户端教程:Cisco AnyConnect VPN Windows/Android 平台客户端使用教程

一键安装脚本:『原创』Ocserv 搭建 Cisco AnyConnect VPN服务端 一键脚本

介绍一下

首先介绍一下Ocserv也就是OpenConnect,即Cisco AnyConnect的兼容服务端。

众所周知,Cisco在网络设备领域处于霸主地位,其开发的AnyConnect作为一种VPN协议,不是想封就能封的。封锁AnyConnect将对大量跨国公司的子公司与母公司的通讯造成灾难性后果。因此,虽然AnyConnect的握手特征很明显,但是依然可以正常使用。

而AnyConnect作为Cisco专有技术,其服务端只能运行在Cisco设备上,即如果没有购买Cisco相关设备,将无法使用AnyConnect服务端。而OpenConnect的出现解决了这一个问题,OpenConnect是一个开源项目,其目标是在相对廉价的linux设备上运行与AnyConnect协议兼容的服务端,以此来使用该协议而不需要购买Cisco专有设备。

AnyConnect目前支持 Windows 7+ / Android / IOS / Mac ,其他设备没有客户端所以无法使用,例如 XP系统。

教程说明

本教程仅在 Debian 7 中测试,理论上 Debian 8 与 Ubuntu 步骤一样。

我也是刚刚了解这个VPN,AnyConnect的优势就是相比其他的VPN协议(OpenVPN、PPTP、L2TP、IKEv2等),AnyConnect并不会被墙封,当然也不代表完全没有干扰,所以如果只是玩游戏的话,用其他的VPN协议容易被墙干掉,这时候就可以使用AnyConnect,如果只是看网页看视频,那还是建议使用ShadowsocksR。

AnyConnect的配置参数很多,大部分我都不明白什么意思,教程里的示例配置文件只是在默认的配置文件中简单改了改,大家可以自己了解后去修改。

本教程仅写出了通过用户名和密码的方式来登陆链接AnyConnect VPN,通过自签SSL证书用于客户端与服务端直接的SSL安全加密。

注意:如果服务器同时安装了 锐速(ServerSpeed/LotServer),那么可能会导致 AnyConnect 连接上后无网络或者速度异常(慢),这时候请关闭锐速,BBR加速无影响

安装步骤

检查PPP/TUN环境

首先要检查VPS的TUN是否开启(OpenVZ虚拟化的服务器很可能默认关闭)。

cat /dev/net/tun
# 返回的必须是:
cat: /dev/net/tun: File descriptor in bad state

如果返回内容不是指定的结果,请与VPS提供商联系开启TUN权限(一般控制面板有开关)。

安装依赖

首先为了确保依赖安装正常、完整,我们需要更换系统 软件包源为最新的稳定源 jessie (本步骤必做,否则很容易出错)。

默认下面的代码是 美国的镜像源,可以更换下面代码 us.sources.list 中的 us ,具体可以看这里

rm -rf /etc/apt/sources.list && wget -N --no-check-certificate -O "/etc/apt/sources.list" "https://raw.githubusercontent.com/ToyoDAdoubiBackup/doubi/master/sources/us.sources.list"

然后我们更新软件包列表,并开始安装依赖:

apt-get install pkg-config build-essential libgnutls28-dev libwrap0-dev liblz4-dev libseccomp-dev libreadline-dev libnl-nf-3-dev libev-dev gnutls-bin -y

注意:这个更换 镜像源的步骤,Debian 8、Debian 9 不需要执行,可以直接跳过,Debian 7 必须执行!

编译安装

然后我们新建一个文件夹,并下载和编译安装 ocserv,此处用的 ocserv 可能不是最新的,最新的请看:ocserv

mkdir ocserv && cd ocserv
wget ftp://ftp.infradead.org/pub/ocserv/ocserv-0.11.8.tar.xz
tar -xJf ocserv-0.11.8.tar.xz && cd ocserv-0.11.8
./configure

./configure 命令执行后,过一会就会出现如下信息,正常情况下应该跟我的差不多。

点击展开 查看更多

然后我们继续安装:

make
make install
# 安装后的文件可以不删除,卸载的时候还需要用到。

最后我们新建一个配置文件的文件夹:

mkdir /etc/ocserv
wget -N --no-check-certificate -P "/etc/ocserv" https://raw.githubusercontent.com/ToyoDAdoubiBackup/doubi/master/other/ocserv.conf

上面下载的是我根据 ocserv 默认配置文件稍微改了改以适应教程的配置文件。

如果你想要自己改配置文件可以去看源码默认自带的配置文件: ocserv-0.11.8/doc/sample.config

配置参数解释

因为这些参数很多我也不明白,所以只挑我清楚的解释一下,有错误欢迎指出或补充。

点击展开 查看更多

添加 VPN用户

假设你要添加的账号用户名为 doubi ,那么命令如下:

ocpasswd -c /etc/ocserv/ocpasswd doubi

输入后,服务器会提示你输入两次密码(不会显示,盲输),如下:

# === 服务器输出示例 === #
[email protected]:~/ocserv/ocserv-0.11.8# ocpasswd -c /etc/ocserv/ocpasswd doubi
Enter password:
Re-enter password:
# === 服务器输出示例 === #

删除 VPN用户

注意:删除/锁定/解锁 VPN用户都没有任何提示!
ocpasswd -c /etc/ocserv/ocpasswd -d doubi

锁定 VPN用户

ocpasswd -c /etc/ocserv/ocpasswd -l doubi

解锁 VPN用户

ocpasswd -c /etc/ocserv/ocpasswd -u doubi

自签SSL证书

首先在当前目录新建一个文件夹(要养成不把文件乱扔的习惯)。

mkdir ssl && cd ssl

生成 CA证书

然后用下面的命令代码(8行一起复制一起粘贴一起执行),其中的两个 doubi 可以随意改为其他内容,不影响。

echo -e 'cn = "doubi"
organization = "doubi"
serial = 1
expiration_days = 365
ca
signing_key
cert_signing_key
crl_signing_key' > ca.tmpl

然后我们生成证书和密匙:

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

生成 服务器证书

继续用下面的命令代码(6行一起复制一起粘贴一起执行),其中的 1.1.1.1 请改为你的服务器IP,而 doubi 可以随意改为其他内容,不影响。

echo -e 'cn = "1.1.1.1"
organization = "doubi"
expiration_days = 365
signing_key
encryption_key
tls_www_server' > server.tmpl

然后我们生成证书和密匙:

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

最后我们在ocserv的目录中新建一个ssl文件夹用于存放证书。

mkdir /etc/ocserv/ssl

把刚才生成的证书和密匙都移过去:

mv ca-cert.pem /etc/ocserv/ssl/ca-cert.pem
mv ca-key.pem /etc/ocserv/ssl/ca-key.pem
mv server-cert.pem /etc/ocserv/ssl/server-cert.pem
mv server-key.pem /etc/ocserv/ssl/server-key.pem

现在刚才在当前文件夹新建的 ssl 文件夹就没用了,你可以删除它: cd .. && rm -rf ssl/

安装服务

下载我写好的服务脚本并赋予执行权限:

wget -N --no-check-certificate -O "/etc/init.d/ocserv" https://raw.githubusercontent.com/ToyoDAdoubiBackup/doubi/master/other/ocserv_debian
chmod +x /etc/init.d/ocserv

设置开机启动(可选)

update-rc.d -f ocserv defaults

防火墙配置

首先我们打开 防火墙的NAT:

我们需要先查看我们的主网卡是什么:

ifconfig

输出结果可能如下,那么我们的主网卡默认是 eth0 ,如果你是 OpenVZ,那么主网卡默认是 venet0

如果是 Debian9 系统,则默认网卡名为 ens3,CentOS Ubuntu 最新版本的系统可能为 enpXsX(X代表数字或字母)

# === 服务器输出示例 === #
[email protected]:~# ifconfig
eth0      Link encap:Ethernet  HWaddr xx:xx:00:00:a8:a0  
          inet addr:xxx.xxx.xxx.xxx  Bcast:xxx.xxx.225.255  Mask:255.255.255.0
          inet6 addr: xxx::xxx:ff:fe00:xxx/64 Scope:Link
          ......

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          ......
# === 服务器输出示例 === #
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# 如果是 OpenVZ就执行下面这个:
iptables -t nat -A POSTROUTING -o venet0 -j MASQUERADE

然后我们需要打开 ipv4防火墙转发:

echo -e "net.ipv4.ip_forward=1" >> /etc/sysctl.conf && sysctl -p

最后,我们就需要开放防火墙端口了,教程中示例文件的默认TCP/UDP端口都是 443,如果你改了 那么改为其他端口即可。

iptables -I INPUT -p tcp --dport 443 -j ACCEPT
iptables -I INPUT -p udp --dport 443 -j ACCEPT
# 如果你以后要删除规则,那么把 -I 改成 -D 即可。
iptables -D INPUT -p tcp --dport 443 -j ACCEPT
iptables -D INPUT -p udp --dport 443 -j ACCEPT

配置防火墙开启启动读取规则

一般默认 iptbales 关机后并不会保存规则,这样开机后 防火墙规则也全都清空了,所以需要设置一下。

Debian/Ubuntu 系统:

iptables-save > /etc/iptables.up.rules
echo -e '#!/bin/bash\n/sbin/iptables-restore < /etc/iptables.up.rules' > /etc/network/if-pre-up.d/iptables
chmod +x /etc/network/if-pre-up.d/iptables

以后需要保存防火墙规则只需要执行:

iptables-save > /etc/iptables.up.rules

最后测试

最后我们需要运行下面这个命令来测试 ocserv 是否没有问题了。

ocserv -f -d 1
# 如果没有问题,那么我们就按 Ctrl + C 键退出。

VPS输出 正常情况如下:

点击展开 查看更多

使用说明

/etc/init.d/ocserv start
# 启动 ocserv 
/etc/init.d/ocserv stop
# 停止 ocserv 
/etc/init.d/ocserv restart
# 重启 ocserv 
/etc/init.d/ocserv status
# 查看 ocserv 运行状态 
/etc/init.d/ocserv log
# 查看 ocserv 运行日志
/etc/init.d/ocserv test
# 测试 ocserv 配置文件是否正确

配置文件:/etc/ocserv/ocserv.conf

卸载方法

假设你一开始源码编译安装的目录是:/root/ocserv/ocserv-0.11.8 ,那么这么做:

cd /root/ocserv/ocserv-0.11.8
# 进入源码编辑安装目录

make uninstall
# 执行卸载命令

cd .. && cd ..
rm -rf ocserv/
# 回到 /root 文件夹,删除 ocserv 源码自身

rm -rf /etc/ocserv/
# 删除配置文件目录

如果你还下载了系统服务脚本并设置开机启动了,那么需要:

rm -rf /etc/init.d/ocserv
update-rc.d -f ocserv remove

其他说明

注意:如果服务器同时安装了 锐速(ServerSpeed/LotServer),那么可能会导致 AnyConnect 连接上后无网络或者速度异常(慢),这时候请关闭锐速,BBR加速无影响

运行优化说明

建议在运行 ocserv前,执行一下这个命令,作用是提高系统的文件符同时打开数量,对于TCP连接过多的时候系统默认的 1024 就会成为速度瓶颈。

ulimit -n 51200

这个命令只有临时有效,重启后失效,如果想要永久有效,请执行:

echo "* soft nofile 51200
* hard nofile 51200" >> /etc/security/limits.conf

然后最后再执行一下 ulimit -n 51200 即可。

提示 wget: command not found 的错误

这是你的系统精简的太干净了,wget都没有安装,所以需要安装wget。

# CentOS系统:
yum install -y wget

# Debian/Ubuntu系统:
apt-get install -y wget

参考资料:https://blog.uuz.moe/2016/04/02/cisco-anyconnect-deployment/
https://mark1998.com/anyconnect-on-debian-and-ubuntu/

转载请超链接注明:逗比根据地 » 使用Ocserv 手动搭建 Cisco AnyConnect VPN服务端
责任声明:本站一切资源仅用作交流学习,请勿用作商业或违法行为!如造成任何后果,本站概不负责!

赞 (57)
发表我的评论
取消评论
表情

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

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(52)个小伙伴在吐槽
  1. 在安装服务脚本命令wget -N --no-check-certificate -O "/etc/init.d/ocserv" https://raw.githubusercontent.com/ToyoDAdoubiBackup/doubi/master/other/ocserv_debian
    执行后,出现错误:
    WARNING: timestamping does nothing in combination with -O. See the manual
    for details.
    
    --2018-10-19 01:31:25--  https://raw.githubusercontent.com/ToyoDAdoubiBackup/doubi/master/other/ocserv_debian
    Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.120.133
    Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.120.133|:443... connected.
    HTTP request sent, awaiting response... 404 Not Found
    2018-10-19 01:31:25 ERROR 404: Not Found.
    是不是源被删了啊?
    
    jameslxj2018-10-19 09:37 回复
    • 请更新最新版脚本。你用的是旧版脚本。
      Toyo2018-10-19 11:08 回复
      • 最新版脚本地址是多少啊?
        jameslxj2018-10-19 11:19 回复
        • 就是以前逗比云脚本地址下面写的 Github 备用连接,自己去相关脚本文章看。
          Toyo2018-10-19 11:27 回复
  2. 网站多少
    方法2018-09-27 22:46 回复
  3. 大佬好!我之前配置了SSR,我想请问大佬两个问题: 1.这个AnyConnect VPN可以跟SSR同时存在于一台VPS上吗(没装锐速)? 2.教程中没提到客户端的VPN设置(但偏偏我没用过VPN,比较陌生),那客户端连接这个VPN服务器时需要选择哪种类型呢(PPTP、L2TP之类)?以及客户端VPN名称是随便填吗?
    tanshy2018-09-04 22:37 回复
    • 1. 不冲突,只要端口不一样。(思科VPN默认 443端口)
      2. AnyConnect VPN 是自己的协议,不是PPTP L2TP协议,直接用思科VPN客户端链接就行了(IP、端口、证书)。
      Toyo2018-09-04 23:25 回复
  4. 楼主你好,如果想要所有流量都走代理是不是把配置文件中的no-route全部删掉就可以了。
    x-men2018-08-05 17:32 回复
    • 是的,考虑到大部分人都需要国内外分流,所以特地前段时间加上了路由表,不需要的话删掉就行(记得重启服务端)。
      Toyo2018-08-06 00:16 回复
  5. 大大,anyconnect服务端不支持centos安装吗 [[email protected] ~]# rm -rf /etc/apt/sources.list && wget -N --no-check-certificate -O "/etc/apt/sources.list" "https://softs.host/Bash/sources/us.sources.list" WARNING: timestamping does nothing in combination with -O. See the manual for details. /etc/apt/sources.list: No such file or directory [[email protected] ~]# apt-get install pkg-config build-essential libgnutls28-dev libwrap0-dev liblz4-dev libseccomp-dev libreadline-dev libnl-nf-3-dev libev-dev gnutls-bin -y -bash: apt-get: command not found 这是安装依赖的时候出现的
    Tesla2018-07-19 21:59 回复
    • 开头写了:本教程仅在 Debian 7 中测试,理论上 Debian 8 与 Ubuntu 步骤一样。
      我的 Anyconnect 手动安装教程和一键脚本都只支持 Debian 或 Ubuntu 系统。
      Toyo2018-07-20 11:22 回复
      • 大大,我把centos6重装换成了debian7,然后装了ocserv那个一键脚本,里边的TCP端口和UDP端口可以随便改吗,像1 2 3 4那样的,便于区分。
        Tesla2018-07-21 19:02 回复
        • 可以改。否则也不会写到配置文件里了。
          Toyo2018-07-22 01:18 回复
  6. 能不能在多个IP的VPS配置多个连接
    急求助2018-05-29 16:43 回复
  7. 最近好像逗比云的anyconnect mac端最新版4.4不能正常使用了(多了一个roaming security),旧版本4.1可以使用,麻烦逗比看一下。
    jackzhang2018-03-21 17:35 回复
  8. [email protected]:~# ocserv -f -d 1 note: setting 'plain' as primary authentication method note: setting 'file' as supplemental config option 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 or UNIX ports 这个是什么原因
    xnian2018-03-09 13:27 回复
    • 443端口被占用,查看是哪个程序占用了,关掉它:
      netstat -lntp
      
      Toyo2018-03-10 15:34 回复
  9. 几个月以前就发现了,用ocserv, 南方电信和移动,很多地方会BAN掉,装上也被搞了,怀疑是用机器学习的方式学习特征。再然后用SSR,又被干掉。最近搞了个V2RAY + websocket + nginx , 看看这次能活多久。麻蛋的简直是丧心病狂了。
    哇哇2018-03-05 00:08 回复
    • 不是吧!我在南方好吧,你一个人就代表了&……南方?
      小男生2018-04-15 00:15 回复
  10. 大佬,我用这个一键脚本搭建之后,4g能够正常连上,但是用WiFi确秒断,。是怎么回事
    leee2018-02-27 21:02 回复
  11. 请问 ipv6 隧道如何设置
    hellowordSteven2018-02-18 19:37 回复
  12. 老大,我用CADDY自动签发了证书,可以不手动生成证书而使用CADDY的吗?
    M2018-01-25 22:45 回复
  13. 你好。我在客户端连接后无法上网,服务器的外网IP和内网IP都是ping通,但DNS(8.8.8.8)不能ping通,请问怎么解决这个问题?
    yong2018-01-16 17:01 回复
  14. 为什么我到make这一步就报错?google vps
    掘井山人2018-01-03 01:05 回复
    • 那你连报错内容也不贴出来就跑来问,仔细对比文章内的 # === 服务器输出示例 === # ,make 报错基本都是依赖缺失的问题。
      Toyo2018-01-03 13:19 回复
    • 这是我看过大约七个不同文章写openConnect VPN最简单详细清楚的,GCE可以用,vutrl可以用,V上的要换源,GCE上的不用,(提示dibian7,8,9的区别写在安装依赖上就没事了)但是要安装依赖apt-get install pkg-config build-essential libgnutls28-dev libwrap0-dev liblz4-dev libseccomp-dev libreadline-dev libnl-nf-3-dev libev-dev gnutls-bin -y 没这个就会make时出错,有了只有警告,不影响使用。感谢作者,目前这个确实非常稳定好使,安装比SSR有难度,复杂。也不能搞飞机场(无法大批量的人用)。应该可以用好久。认真读教程一步步来可以成功的,我已经用这个在几个VPS上用了。debian9没问题。
      算是小白吧2018-02-05 21:45 回复
  15. 大佬,为什么我把证书替换成了trustasia的ssl证书,还是会有证书警告?难道一定要在本地设备安装证书才行吗?
    IFmeet2017-12-25 00:27 回复
    • 没有补全证书链
      chrica2018-10-18 14:17 回复
  16. OpenVPN、PPTP、anyconnect等VPN软件能加快文件的传输速度吗?例如:我的服务器在国外,延时高,文件传输速度很慢,这类VPN能降低延迟,加快文件传输吗?
    yong2017-12-16 16:05 回复
    • 并不能降低延迟,是否加快文件传输速度,你试试就知道了,你问我 我也无法给你一个准确的答案。
      Toyo2017-12-17 15:53 回复
  17. 请问老哥,搭建anyconnect需要多大的内存呀?
    小哥十足2017-11-22 09:25 回复
    • 256MB 内存应该够了。
      Toyo2017-11-22 13:02 回复
    • 测试128M可行!日常占用不会超过100M
      小男生2018-04-14 16:54 回复
  18. 我按你的脚本运行了,然后按8配置设置的时候,出现./ocserv.sh: line 198: vim: command not found,请问我是哪里出了问题?我是小白啊,麻烦了
    秋水2017-09-06 20:22 回复
  19. 速度不快,关闭UDP端口也没有BBR加速的效果,不知道是不是BBR对ocserv不能加速?是我的设置不对吗?希望博主能指导下
    york2017-08-15 10:31 回复
  20. 请教如何设置才能同时开启 密码验证 和 证书验证 呢?
    Tony2017-08-01 17:13 回复
  21. 你好,请问服务器已安装 SS+bbr,有什么办法可以再加上ocserv?现在安装之后发现无法连接。
    os2017-07-01 12:07 回复
  22. 楼主可以补充下ARM架构的编译 (能同时改写一键脚本就更好了) 刚刚在树梅派编译失败后google原因 configure那里要加参数: ./configure --disable-seccomp 否则编译会失败 折腾到上天
    rv2017-06-24 00:37 回复
    • 我没有树莓派设备,无法测试,所以也不会去写。
      Toyo2017-06-24 23:15 回复
    • 不用加什么乱七八糟的东西,我用树莓派按照教程直接就OK了
      John2018-06-04 14:34 回复
  23. 如何免密码 用证书登录呢? 如果 VPS的网络质量比较差, 很容易断开. 然后就提示需要重新输入帐号密码登录..
    小八2017-05-30 02:10 回复
  24. 终于出教程了,炒鸡感谢大佬
    tom2017-05-29 18:08 回复
  25. 贴一个很早的一键包,https://www.fanyueciyuan.info/fq/ocserv-debian.html
    baymin2017-05-27 23:44 回复
  26. 偷油老大,整个一键包吧:) :arrow:
    Bob2017-05-27 17:13 回复
  27. 已经不想折腾这种没什么用的麻烦东东了
    南琴浪2017-05-27 16:40 回复
    • 目前国内大部分地区根本无法连接 PPTP L2TP IKEV2等VPN协议了,比如我这里,而AnyConnect没事,连干扰都很少,用着不断线,适合于玩游戏的人使用。普通科学上网用ShadowsocksR就行了。
      Toyo2017-05-27 18:18 回复
      • 路由器能用么?这个比SSR快么?看youtube
        1232017-05-27 20:18 回复
        • 路由器自己看是否支持。
          我也是刚刚了解这个VPN,AnyConnect的优势就是相比其他的VPN协议(OpenVPN、PPTP、L2TP、IKEv2等),AnyConnect并不会被墙封,当然也不代表完全没有干扰,所以如果只是玩游戏的话,用其他的VPN协议容易被墙干掉,这时候就可以使用AnyConnect,如果只是看网页看视频,那还是建议使用ShadowsocksR。
          
          Toyo2017-05-27 21:56 回复
          • 估计没有支持,以后没准有人会开发,不折腾了
            1232017-05-28 07:59 回复
            • openwrt和lede都有客户端
              siam2017-05-28 17:07 回复
  28. 非常不错的教程,很多跨国公司都在用这种VPN。
    Yovan2017-05-27 15:14 回复