Opensuse的Wiki中介绍了Ocserv的搭建。
由于良久没有更新,文中的方法已经部分失效,因此在此对wiki中失效的方法作出修改。本文部署基于Leap 42.3,部分内容引用Opensuse的wiki。
背景知识:什么是 Cisco Anyconnect?什么是 ocserv?
Cisco Anyconnect 是思科推出的一款企业级 VPN。其背后的开源技术是OpenConnect。简单来说就是平时使用 UDP 的DTLS协议进行加密,掉线时自动使用 TCP 的 TLS 协议进行备份恢复,因此相对其它 VPN 比较稳定;而且广泛被大企业采用,不容易被误杀;而加之比较小众架设起来不太容易,也吸引不了很多的火力。
ocserv 的安装
ocserv已经包括在了Opensue的官方源中,因此ocserv的安装十分简单,只需要一条命令
linux# zypper in ocserv
ocserv 的初始化配置
修改 server.tmpl 模板
将 ocserv 安装到您的服务器上后,您需要编辑 /etc/ocserv/certificates/server.tmpl,将其中的:
cn = "Your hostname or IP"
改成你服务器的 IP 地址,可以使用:
linux# ifconfig -a
查看您的ip地址
生成证书
linux# cd /etc/ocserv/certificates
linux# certtool --generate-privkey --outfile ca-key.pem
linux# certtool --generate-self-signed --load-privkey ca-key.pem --template ca.tmpl --outfile ca-cert.pem
linux# certtool --generate-privkey --outfile server-key.pem
linux# 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
参考:http://blog.tremily.us/posts/X.509_certificates/
如果你有购买的SSL证书,只需要生成ca-key.pem即可,然后将你的证书和私钥放在/etc/ocserv/certificates下即可
生成密码文件
linux# ocpasswd -c /etc/ocserv/ocpasswd 您要使用的用户名
“您要使用的用户名“是随意的,之后会提示您输入两次密码。
配置防火墙
客户端连上Ocserv后使用的 IP 地址段 192.168.1.0/24 是可以在 /etc/ocserv/ocserv.conf 中配置的,这里用的是默认的。
同样,客户端连接Ocserv时使用的端口也是可以在 /etc/ocserv/ocserv.conf 中配置的,这里用的是tcp 999与udp 1999。
注意: 如果您没有特别设置过,新版 udev 确定的网口可能不是规整的 eth0,您需要 ifconfig -a 看后替换成你的。
使用SuSEfirewall2
修改/etc/sysconfig/SuSEfirewall2
FW_DEV_INT="vpns0"
FW_ROUTE="yes"
FW_MASQUERADE="yes"
FW_MASQ_NETS="192.168.1.0/24"
FW_SERVICES_EXT_TCP="80 999 8080"
FW_SERVICES_EXT_UDP="1999"
FW_FORWARD="192.168.1.0/24,0/0"
之后重新启动防火墙使之生效
linux# rcSuSEfirewall2 restart
使用iptables
如果你习惯使用iptales,你需要在先关闭SuSEfirewall2
linux# systemctl disable SuSEfirewall2
linux# systemctl stop SuSEfirewall2
设置iptables转发规则
linux# echo 1 > /proc/sys/net/ipv4/ip_forward
linux# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
linux# iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT
测试
linux# ocserv -f -d 1
运行不报错的话,可以用客户端连接来测试一下。
启动服务
linux# ocserv -f -c /etc/ocserv/ocserv.conf
客户端证书登录
也可以使用客户端证书而不是用户名密码来登录。
linux# certtool --generate-privkey --outfile user-key.pem
linux# 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
生成 iOS 可用的 pk12 文件
linux# openssl pkcs12 -export -inkey user-key.pem -in user-cert.pem -certfile ca-cert.pem -out user.p12
会提示设置密码。之后可以把 user.p12 放在可以在线下载的地方,用你的 safari 去打开那个 URL 导入证书。
修改 ocserv.conf 配置
把 auth 由
#auth = "certificate"
auth = "plain[/etc/ocserv/ocpasswd]"
变成
auth = "certificate"
#auth = "plain[/etc/ocserv/ocpasswd]"
并注释掉不支持的选项:
listen-clear-file = /var/run/ocserv-conn.socket
然后启用证书验证
ca-cert = /etc/ocserv/certificates/ca-cert.pem
然后重新启动 ocserv.service
linux# systemctl restart ocserv
网友评论