目前Cisco的AnyConnect似乎是唯一可行的iOS非越狱翻墙客户端,为了看油管和其他内容大家也是操碎了心。这里就放一下在CentOS 7下配置ocserv(OpenConnect Server)的过程和笔记。由于OpenConnect采用的是SSL的方式,所以一般来说采用的是443端口,迫使防火墙不好封端口。所以只要能正常访问https,都可以正常访问oc server。
安卓客户端推荐OpenConnect,AnyConnect会有问题,而且不能保存密码。
我用的是账户密码登陆的形式,使用证书的配置请找找别的资料。
以下所有操作都在root用户下进行。
0. 申请SSL证书
可参考这个https://www.d0z.net/?s=ssl找到一家便宜的证书提供商,或者自己签。这里不阐述。
把私钥、证书和公钥放在/etc/ocserv/ssl/
下,分别命名为server.key
、server.crt
以及ca.crt
。
1. 安装EPEL源。
yum install epel-release -y
2. 安装ocserv
yum install ocserv -y
通过以下命令生成强dhparam,当然文件夹要事先建立好。
openssl dhparam -out /etc/ocserv/dhparam.pem 2048
3. 配置ocserv
/etc/ocserv/ocserv.conf
auth = "plain[passwd=/etc/ocserv/ocpasswd]" tcp-port = 443 udp-port = 443 run-as-user = ocserv run-as-group = ocserv socket-file = ocserv.sock chroot-dir = /var/lib/ocserv isolate-workers = true max-clients = 64 max-same-clients = 5 keepalive = 32400 dpd = 1800 mobile-dpd = 1800 try-mtu-discovery = true server-cert = /etc/ocserv/ssl/server.crt server-key = /etc/ocserv/ssl/server.key dh-params = /etc/ocserv/ssl/dhparam.pem ca-cert = /etc/ocserv/ssl/ca.crt cert-user-oid = 0.9.2342.19200300.100.1.1 tls-priorities = "NORMAL:%SERVER_PRECEDENCE:%COMPAT:-VERS-SSL3.0" auth-timeout = 40 min-reauth-time = 300 max-ban-score = 50 ban-reset-time = 300 cookie-timeout = 32400 deny-roaming = false rekey-time = 172800 rekey-method = ssl use-occtl = true pid-file = /var/run/ocserv.pid device = vpns predictable-ips = true default-domain = your-domain.com ipv4-network = 192.168.238.0 ipv4-netmask = 255.255.255.0 dns = 8.8.8.8 dns = 8.8.4.4 ping-leases = false no-route = 192.168.0.0/255.255.0.0 no-route = 172.16.0.0/255.240.0.0 no-route = 169.254.0.0/255.255.0.0 no-route = 10.0.0.0/255.0.0.0 no-route = 127.0.0.0/255.0.0.0 cisco-client-compat = true
4. 增加用户
ocpasswd -g groupname user1
记得改变groupname 和 username,接下来会要敲两遍密码。
5. 配置防火墙
把以下内容保存为/etc/firewalld/services/ocserv.xml
ocserver Cisco AnyConnect
增加防火墙规则:
firewall-cmd --permanent --add-service=ocserv firewall-cmd --permanent --add-masquerade firewall-cmd --reload
通过firewall-cmd --list-all-zones
检查是否正确开启ocserv服务。
6. 启动ocserv
systemctl enable ocserv systemctl start ocserv
7. 查看是否报错:
systemctl status ocserv
如果有一个绿色的running那就赶快连接吧!
8. 自动部署
https://github.com/hlx98007/deployment-scripts/blob/master/ocserv/setup.sh
echo “password” | sudo openconnect -u username –passwd-on-stdin –no-cert-check server_url
至于no-route国内IP直接访问的规则,请参考github.com/CNMan的相关配置。