背景
为了方便远程办公,在此搭建了ocserv vpn服务器,ocserv兼容CiscoAnyConnect VPN。
因搭建该系统颇为曲折,在此记录。
环境:
System:Ubuntu 18.04
编译安装ocserv:
由于写文章时Ubuntu 使用apt安装ocserv的版本只是ocserv0.11.9,该版本存在otp+ocpasswd混淆认证的bug,导致验证失败。
详情: https://gitlab.com/openconnect/ocserv/-/issues/137
所以不得不重新编译安装 在此选择ocserv1.1.0版本 ftp://ftp.infradead.org/pub/ocserv/
下载解压后编译安装 相关依赖安装参考官方存储库文档:https://gitlab.com/openconnect/ocserv
和 https://ocserv.gitlab.io/www/recipes-ocserv-installation-generic.html
1 | ./configure --sysconfdir=/etc/ && make && make install1 |
依赖是ubuntu/centos的依赖,请选择对应系统的依赖进行安装
编译时出现一些bug,gnults notfound等,应该是相关依赖未安装
解决方法 apt list | grep gnults 从存储库中查找相关lib依赖,安装后请再次尝试
配置:
由于我是默认编译安装方式 软件安装好后执行ocserv失败
1 | find / -name ocserv #确定下安装位置 |
我的ocserv默认的安装位置是 /usr/local/sbin/ocserv
把它link到path环境变量里的目录
1 | ln -s /usr/local/sbin/ocserv /usr/sbin/ocserv |
再执行ocserv执行成功
配置ocserv服务
1 | find / -name ocserv.service |
如上,第一个是socket-activated服务 第二个是standelong服务,选择自己想要的那个,我这选择独立的
1 | cp /home/test/ocserv-1.1.0/doc/systemd/standalone/ocserv.service /etc/systemd/system/ocserv.service |
查看下/etc/ocserv/ocserv.conf 有没有配置文件没有的话
复制一份 cp /home/wuyun/ocserv-1.1.0/tests/docker-ocserv/ocserv.conf /etc/ocserv/
编辑配置文件
基本配置
注 pam验证方式为linux 用户验证
请参考 https://ocserv.gitlab.io/www/recipes-ocserv-configuration-basic.html
双因素验证参考 https://ocserv.gitlab.io/www/recipes-ocserv-2fa.html
这里采用ocpasswd的方式
OATH: One-time passwords with ocserv’s password file
需要注意的是
HOTP/T30 格式为totp
HOTP 格式为HOTP
我遇到的问题及解决方法
客户端连接一会就断开
这里修改了
dpd = 30
try-mtu-discovery = true
mtu = 1380
ps:TOTP客户端我用的是微信小程序 Authenticator
设置了arp代理 https://ocserv.gitlab.io/www/recipes-ocserv-pseudo-bridge.html
此时设置ocserv ip段设置应小于lan段。
iptables nat设置
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -A INPUT -p tcp –dport 443 -j ACCEPT
iptables-save /etc/iptables.rules