ocserv(Openconnect VPN Server)是一款开源的、兼容Cisco Anyconnect VPN的VPN服务端软件。由于思科在网络设备中的特殊地位,思科的VPN一直未被特殊照顾(其实这个VPN握手过程特征应该是较为明显的)。目前状况下通讯较为稳定,干扰较小。主要优势是多平台的支持,Windows、Android、iOS都能找到它的客户端。往往可以作为shadowsocks等代理的补充。
下面简要介绍一下部署过程,以在Ubuntu系统中的部署为例。
Ubuntu 18.04 可以直接使用apt-get install ocserv 安装,不是最新版本,不过够用,需要使用最新版本,或者系统是16.04或更早版本的可以参考以下从源码编译安装的步骤。
主页:http://www.infradead.org/ocserv/
下载页面:ftp://ftp.infradead.org/pub/ocserv/
首先在上面的下载页面中找到最新的Release后下载并解压:
1 2 3 |
wget ftp://ftp.infradead.org/pub/ocserv/ocserv-0.11.8.tar.xz tar -Jxf ocserv-0.11.8.tar.xz cd ocserv-0.11.8 |
必选依赖包:
1 |
sudo apt-get install libgnutls28-dev libev-dev libsystemd-dev |
可选依赖包:
1 |
sudo apt-get install libwrap0-dev libpam0g-dev liblz4-dev libseccomp-dev libreadline-dev libnl-route-3-dev libkrb5-dev liboath-dev libradcli-dev libgeoip-dev |
编译工具:
1 |
sudo apt-get install build-essential |
编译安装:
1 2 3 4 5 6 7 |
./configure --prefix=/usr make && make check sudo make install # 添加service到systemd 开机自启 sudo cp ./doc/systemd/standalone/ocserv.service /lib/systemd/system sudo systemctl enable ocserv.service sudo systemctl start ocserv.service |
接下来是配置,建立 /etc/ocserv 文件夹来存储相关的配置文件(改完记得重启ocserv):
1. 下载下来的ocserv中的 doc 文件夹中有 sample.config 这一例子文件,将其拷贝至 /etc/ocserv ,命名为 ocserv.conf ,用来存储ocserv的配置信息;
2. 新建 /etc/ocserv/ocpasswd 文件用来存储用户名密码
3. 将PEM格式的服务器证书,存储至 /etc/ocserv/server-cert.pem 文件中(包含证书链中的中级证书)
4. 将PEM格式的服务器私钥,存储至 /etc/ocserv/server-key.pem 文件中
5. 将PEM格式的根证书,存储至 /etc/ocserv/ca-cert.pem 文件中
(PS:如果有域名,建议申请一个 Let’s Encrypt 的免费证书。)
接着修改 /etc/ocserv/ocserv.conf 文件:
设置认证方式为plain,存储文件改成刚才设置的 /etc/ocserv/ocpasswd 文件:
1 |
auth = "plain[/etc/ocserv/ocpasswd]" |
可以修改允许同时连接的最大客户端数:
1 |
max-clients = 16 |
同一个账号能连接的最大客户端数:
1 |
max-same-clients = 2 |
修改ocserv使用的端口(客户端连接时候不填写端口的话默认使用443 使用非443端口时候,服务器填写:域名:端口号 这样的形式):
1 2 |
tcp-port = 443 udp-port = 443 |
修改服务器证书和私钥配置:
1 2 |
server-cert = /etc/ocserv/server-cert.pem server-key = /etc/ocserv/server-key.pem |
修改根证书配置:
1 |
ca-cert = /etc/ocserv/ca-cert.pem |
建议将dpd和cookie-timeout改大,避免客户端网络波动时候总是掉线以及无法及时自动重连:
1 2 |
dpd = 600 cookie-timeout = 32400 |
配置VPN子网的的网段:
1 2 |
ipv4-network = 10.250.250.0 ipv4-netmask = 255.255.255.0 |
配置DNS服务器:
1 2 |
dns = 8.8.8.8 dns = 8.8.4.4 |
将其他私有地址排除,不路由:
1 2 3 4 5 6 7 |
no-route = 0.0.0.0/255.0.0.0 no-route = 127.0.0.0/255.0.0.0 no-route = 169.254.0.0/255.255.0.0 no-route = 172.16.0.0/255.240.0.0 no-route = 192.168.0.0/255.255.0.0 no-route = 224.0.0.0/240.0.0.0 no-route = 240.0.0.0/240.0.0.0 |
添加用户,例:用户名testuser,密码test,用户组vpnusers:
1 |
ocpasswd -c /etc/ocserv/ocpasswd -g vpnusers testuser |
然后连续两次键入密码即可。
修改 /etc/sysctl.conf 打开ipv4_forward:
1 |
net.ipv4.ip_forward = 1 |
执行以下命令使其生效:
1 |
sysctl -p |
配置iptables转发,注意和前面配置的网段保持一致(注意第二行,有的vps可能网卡名字不是eth0是别的,注意ifconfig查看一下):
1 2 3 4 5 |
iptables -A FORWARD -s 10.250.250.0/24 -j ACCEPT iptables -t nat -A POSTROUTING -s 10.250.250.0/24 -o eth0 -j MASQUERADE iptables -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu iptables -A FORWARD -o vpns+ -j ACCEPT iptables -A FORWARD -i vpns+ -j ACCEPT |
参考文章:http://ttz.im/2014/02/1131
引用: Openconnect VPN 服务端 ocserv 的部署 – 飞羽博客 | CurryFish
引用: VPN – OCServer for Cisco AnyConnect on Ubuntu 14.04 x64 – Yang