某人一直叫嚣IOS没法很好的使用影梭,于是准备替其上Ocserv,尽量简化设置 使用plain认证
手里可用的一个系统用的Gentoo Base System release 2.2,ocserv比较新,所以源里都没有,只能自己编译安装,这货同时依赖最新版本的gnutls,截止到今天,里面的gnutls版本才2.12.23-r6 太老了,而最新的OCS 0.81需要gnutls >= 3.1.10,咱们需要进行手动编译。如果升级到unstable的gnutls,会替换一大堆系统组件到unstable版本(包括glibc,我可不敢承受这个代价)。后续源里面对东西升级以后都跟上的话 问题就不大了 直接源里面就能装
我的情况是,这个系统里面,除了gnutls,其他依赖都齐全,gnutls依赖nettle 2.7,好在源里面nettle的版本不太老 emerge安装之
emerge nettle
自己编译也不是很麻烦,主要就是要注意编译的时候要安装好相关gmp的开发包 启用hogweed支持
然后我们开始编译最gnutls
下载最新版本的gnutls源代码
wget ftp://ftp.gnutls.org/gcrypt/gnutls/v3.3/gnutls-3.3.6.tar.xz
解包 进入目录 比如我保存到 /usr/src/ocserv-0.8.1
./configure --enable-shared make -j2 make install
回到ocs的目录 告诉pkg-config到哪里去找.pc文件
LIBGNUTLS_LIBS="-L/usr/local/lib -lgnutls" LIBGNUTLS_CFLAGS=-I/usr/local/include ./configure
PKG_CONFIG_PATH=/usr/src/ocserv-0.8.1/gnutls-3.3.6/lib/ ./configure make -j 2 make install
由此编译安装完成
生成证书的方法网上一大堆 官方文档也有很多 这里就不复制粘贴了 这里给大家一个参考链接,记得改下证书里面的名称 别都一样的 闹笑话了。
现在假设我现在在我自己新建的/data/ihipop/ocs目录下 证书也都在这个目录下
配置部分 拷贝源代码目录里面的示例文件到ocs目录
cp /usr/src/ocserv-0.8.1/doc/sample.config ./ocserv.conf vim ./ocserv.conf
主要修改如下几项
auth = "plain[./sample.passwd]" 我们默认使用plain模式,PAM和证书认证各位有兴趣的可以自己去检索 sample.password就是密码文件
#同一个用户最多同时登陆数
max-same-clients = 2#整个系统最大用户数
max-clients = 16#DPD配置:配置Dead Peer检测频率
dpd = 90 #默认#mobile-dpd是配置给移动设备用的 只要发送了X-AnyConnect-Identifier-DeviceType这个头里面说了了移动设备 ocs就会发送这个dpd 关于DPD的问题 下文会详述
mobile-dpd = 1800 #默认注释#服务器证书路径
server-cert = ./server-cert.pem
server-key = ./server-key.pem#配置运行用户组 咱们可不能让其用root运行
run-as-user = nobody
run-as-group = daemon# 设置VPN的设备名称 后面做策略的时候可能用到
device = ocs_vpn#私有IP段配置
ipv4-network = 10.99.99.1
ipv4-netmask = 255.255.255.0#DNS配置
dns = 8.8.8.8#推送的路由配置
#route = 192.168.1.0/255.255.255.0
#route = 192.168.5.0/255.255.255.0
#注意 这里推送路由条数限制据说只有64条 而且不能指定是走还是不走路由 这点没有openVPN灵活我这里全部把它注释了 走全局了
#如果要推全局路由 我建议使用如下两条记录 原因看文末
route = 0.0.0.0/128.0.0.0
route = 128.0.0.0/128.0.0.0
iptables和系统ip包转发的配置这里不多说了 和正常VPN的配置没有太大的区别 配置的时候如果有forward规则就把『ocs_vpn+』全部放过就好了
我贴一下我的几个iptables规则
iptables -A FORWARD -o ocs_vpn+ -j ACCEPT iptables -A FORWARD -i ocs_vpn+ -j ACCEPT iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -j MASQUERADE #假设你的OCS跑在443端口 我们开放TCP和UDP是443 其他情况请自己修改 iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT iptables -A INPUT -p udp -m udp --dport 443 -j ACCEPT
有趣的是配置过程中发现这货原生支持IPv6 后面有空来研究下
进入刚才的目录(我都是用的相对路径)
ocserv -c ocserv.conf -f -d 1
其中 -f 表示程序在前台运行 保证你能看到调试信息 -d后面的数字表示调试级别 数字越大 信息越详细。
设置开机启动也一切从简 我就直接放到gentto的local服务下进行管理了,直接创建/etc/local.d/ocsserv.start 然后写入如下内容然后赋予可执行权限即可
/usr/bin/screen -S ihipop.ocs.anyconnect -dm bash -c "cd /data/ihipop/ocs/ && ocserv -c ocserv.conf -f -d 1"
debian用户直接写到rc.local里面即可 无需多虑
自带一个ocpasswd工具 使用起来和apache的htpasswd没啥差别
ocpasswd -c sample.passwd username
sample.passwd 是配置文件里面定义的plain认证文件地址 根据自己的情况修改 这工具同样也能修改密码和删除用户,具体看帮助,不在本文讨论范畴
0.0.0.0/128.0.0.0 = 0.0.0.0/1 = 128.0.0.0 TO 255.255.255.255
128.0.0.0/128.0.0.0 = 128.0.0.0/1 = 0.0.0.0 TO 127.255.255.255
正好覆盖了所有的IPV4地址 而且OpenVPN也是这么做的:)真是聪明的家伙们啊。