在Opensuse Leap上部署Ocserv(Anyconnect)

    技术教程 vpnxxw 来源:一夏天的风S 152次浏览 0个评论

    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

     

    anyShare分享到:

    VPN信息网 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明-VPN信息网-在Opensuse Leap上部署Ocserv(Anyconnect)
    喜欢 (0)
    发表我的评论
    取消评论

    表情 贴图 加粗 删除线 居中 斜体 签到

    Hi,您需要填写昵称和邮箱!

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址