在Opensuse Leap上部署Ocserv(Anyconnect)

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

 

评论 在此处输入想要评论的文本。

标题和URL已复制