做个笔记,Debian上面装ocserv(AnyConnect服务器端)
转载自 http://www.dreamsafari.info/2015/02/ocserv_on_debian/
比情人节一个人过更杯具的就是一大早起床然后收到一封邮件,RIJX说不好意思我们要跑路了,请尽快申请退款和备份你的资料。。。太坑爹了吧。。。我去哪里找那么便宜的还提供2个ip的VPS啊。。。看了看手头还有100刀DigitalOcean给的券,勉为其难用一下吧。。。然后发现上海电信连DO的网络真是各种酸爽,新加坡节点ping值平均350ms丢包率58%。。。三藩和纽约的节点更加无语。。。于是只好上LEB看了一眼,买了个5刀一年的达拉斯的白菜。。。8G硬盘+128M内存+128M swap+250G流量。。。好吧反正就是用作VPN,应该够了。。。
考虑到自己之前各种摸索也没有记录啥东西,索性整理一下,万一以后被封掉什么的。。。省得再到处找。。。
系统:Debian x86
上来先搞libgnutls28-dev:
1
2
3
|
echo "deb http://ftp.debian.org/debian wheezy-backports main contrib non-free" >> /etc/apt/sources .list apt-get update && apt-get dist-upgrade -y && apt-get autoremove -y apt-get -t wheezy-backports install libgnutls28-dev -y |
安装各种依赖。。。
1
|
apt-get install libgmp3-dev m4 gcc pkg-config make gnutls-bin build-essential libwrap0-dev libpam0g-dev libdbus-1-dev libreadline-dev libnl-route-3-dev libprotobuf-c0-dev libpcl1-dev libopts25-dev autogen libseccomp-dev liblz4-dev git build-essential -y |
关于freeradius,有了freeradius之后增减用户很方便,而且也可以统计流量,但缺点在于freeradius不支持一个用户对应多个组,而我是打算在连接的时候选择全局还是区分流量的,如下图:
所以freeradius的部分就掠过吧,有兴趣的网上教程一搜一大把,照做就行了。至于LZ4,目前只有openconnect客户端支持,AnyConnect还是LZS压缩,所以作为懒人我也跳过吧。。。
为了避免出现烦人的不受信任服务器的提醒,强烈建议搞一个SSL的证书,startssl有免费的,教程也是一搜一大把,略过不表。假设现在从startssl那里搞来的证书是cert.crt,私钥是cert.key。首先新建一个文件夹:
1
|
mkdir /etc/ocserv |
然后把cert.crt和cert.key上传到那个文件夹中去。然后生成证书链。话说之前没搞证书链,AnyConnect一直提示不受信任的服务器,但是用FF打开却显示证书正确。。。一直到看了文末的那篇文章才知道问题的根源。。。
1
2
3
4
5
6
|
cd /etc/ocserv wget http: //cert .startssl.com /certs/ca .pem wget http: //cert .startssl.com /certs/sub .class1.server.ca.pem cat cert.crt > server-cert.pem cat sub.class1.server.ca.pem >> /etc/ocserv/server-cert .pem cat ca.pem >> /etc/ocserv/server-cert .pem |
所以再接下来就是安装ocserv了,目前最新版是0.9.0.1,采用下载源码然后编译的方式,我偏好把源码放在/usr/src/下面。
1
2
3
4
5
6
|
cd /usr/src wget ftp : //ftp .infradead.org /pub/ocserv/ocserv-0 .9.0.1. tar .xz tar xf ocserv-0.9.0.1. tar .xz rm ocserv-0.9.0.1. tar .xz cd ocserv-0.9.0 . /configure --prefix= /usr --sysconfdir= /etc -- enable -linux-namespaces |
看一眼,有没有啥出错的提示,一般来说,应该没有。。。然后再看看有啥想要的功能显示了no。。。
1
2
3
4
|
make && make install cp doc /sample .config /etc/ocserv/ocserv .conf cd /etc/ocserv vim ocserv.conf |
然后就修改配置文件吧,一行行来。。。
第37行,auth = “plain[./sample.passwd]”,修改为auth = “plain[/etc/ocserv/ocpasswd]”
第44行,isolate-workers = true,改为false
第104行,try-mtu-discovery = false,改成true
第116和117行,按照实际证书位置修改,如果是按照我的操作的话就改成这样:
server-cert = /etc/ocserv/server-cert.pem
server-key = /etc/ocserv/cert.key
第162行,#compression = true,去掉开始的#
第168行,#no-compress-limit = 256,同样是去掉#
第205行,cookie-timeout = 300,鉴于肾机关屏断VPN解锁重连的特性,建议这里设置大一点,省得每次都要手动重连。如果2小时话,就写7200
第268行,run-as-group = daemon改为run-as-group = nogroup
第275行,#net-priority = 3,删掉#,然后把优先级提高,我自己设置了5
第290行,predictable-ips = true,设为false
第305行,dns = 192.168.1.2改为8.8.8.8
第345,346行,route = **************,都在最前面加上#,注释掉
第354行,#select-group = group1,改为select-group = global
第355行,#select-group = group2[My special group],改为select-group = routed
第379行,#config-per-group = /etc/ocserv/config-per-group/,去掉一开始的#
第384行,#default-group-config = /etc/ocserv/defaults/group.conf,去掉一开始的#
第414行,#cisco-client-compat = true,去掉一开始的#
保存退出。
然后建立分组的配置文件:
1
2
|
mkdir defaults vim defaults /group .conf |
写入一下内容:
1
2
|
route = 0.0.0.0 /128 .0.0.0 route = 128.0.0.0 /128 .0.0.0 |
然后,新建推送的路由表:
1
2
3
4
|
mkdir config-per-group cd config-per-group wget https: //github .com /rankjie/anyconnect-gfw-list/raw/master/gfwiplist .txt -O routed cd .. |
接下来是新建用户了。我们将会定义2个组,一个组是global,所有流量都经过服务器转发,而另一个组叫routed,只有部分流量通过服务器转发,可以保证国内网站的速度,节约VPN的流量。假设用户名是user。注意不同用户组用英文逗号隔开。
1
|
ocpasswd -g global,routed -c /etc/ocserv/ocpasswd user |
输入2遍密码。以后新增用户也这么进行即可。
搞一个自动脚本,并设置开机自动启动:
1
2
3
|
wget https: //gist .github.com /kevinzhow/9661623/raw/9d2c80e7a86eed514165bf7c9fce777bfe775f37/ocserv -O /etc/init .d /ocserv chmod 755 /etc/init .d /ocserv update-rc.d ocserv defaults |
打开端口转发:
sed -i ‘s/#net\.ipv4\.ip_forward=1/net.ipv4.ip_forward=1/’ /etc/sysctl.conf
sysctl -p
设置iptables。linode的这篇文章的确不错,可以按照他的设置,但是记得要把-A FORWARD -j DROP这一行删掉,以及在最后的COMMIT之前加下面一句:
1
2
|
-A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu -A INPUT -p udp --dport 443 -j ACCEPT |
然后在COMMIT之后再加下面这一段:
1
2
3
|
*nat -A POSTROUTING -j MASQUERADE COMMIT |
接下来,就可以运行一下,看看是不是正常,可以debug了。。。
1
|
ocserv -c /etc/ocserv/ocserv .conf -f -d 1 |
如无意外,大功告成~
参考的文章:
http://aenes.com/post/716.html
http://www.infradead.org/ocserv/manual.html
http://imkevin.me/post/80157872840/anyconnect-iphone