ocserv(Cisco AnyConnect 兼容服务端) 一键安装脚本 for CentOS 7

之前写过 ocserv 在 CentOS 6 下的安装手册
CentOS 6 的 repository 里的 gnutls、nettle 等版本比 ocserv 要求的版本低,自己编译较为麻烦。
RedHat 最近发布了 RHEL 和 CentOS 的最新版本,repository 的 gnutls 和 nettle 均已符合 ocserv 的版本要求,所以部署 ocserv 方便了很多。

这是 ocserv 在 CentOS 7 和 RHEL 7 的一键安装脚本,可以在最小化安装环境的 CentOS 7 和 RHEL 7 下一键部署 ocserv。

已知部分 64M 内存的 VPS 一次 yum 太多软件包会报错,可以修改脚本分多次安装。
OpenVZ 的 VPS 需要开启 tun 支持。
另外建议 Android 使用 Shadowsocks,比 AnyConnect 方便而且防污染做得更好。
AnyConnect 推荐用于 iOS 和需要系统路由的 PC。

须知:

  • 支持自动判断防火墙,请确保 Firewalld 或者 iptables 其中一个是 active 状态;
  • 默认采用用户名密码验证,本安装脚本编译的 ocserv 也支持 pam 验证,只需要修改配置文件即可;
  • 默认配置文件在 /usr/local/etc/ocserv/ 目录,可自行更改脚本里的参数;
  • 安装时会提示你输入端口、用户名、密码等信息,也可直接回车采用默认值,密码是随机生成的;
  • 安装脚本会关闭 SELINUX,不知 SELINUX 是否会影响 ocserv;
  • 自带路由表,只有路由表里的 IP 才会走 VPN,如果你有需要添加的路由表可自行添加,最多支持 200 条路由;
  • 如果你有证书机构颁发的证书,可以把证书放到脚本的同目录下,确保文件名和脚本里的匹配,安装脚本会使用你的证书,客户端连接时不会提示证书错误;
  • 配置文件修改为单 IP 允许 10 个连接,全局 1024 个连接,可修改脚本前面的变量。1024 个连接大约需要 2048 个 IP,所以虚拟接口的 IP 配置了 8 个 C 段。

脚本下载:github

L2TP IPSec VPN 自动安装脚本 for CentOS 7

CentOS 7改变比较大,以前的自动安装脚本不能使用

这个脚本可以在CentOS 7下自动部署IPSec L2TP VPN

  • ppp、openswan、xl2tpd全部使用yum源安装,不再需要自己编译
  • 防火墙使用FirewallD,CentOS 7默认不安装iptables
  • 开机自启动使用systemctl

下载:

https://github.com/travislee8964/L2TP-VPN-installation-script-for-CentOS-7/

在CentOS 6.5上配置Cisco AnyConnect VPN

AnyConnect是思科的安全远程接入解决方案,之前只有思科的设备才支持。
ocserv(OpenConnect server)是一个OpenConnect SSL VPN协议服务端,0.3.0版后兼容使用AnyConnect SSL VPN协议的终端。
官方主页:http://www.infradead.org/ocserv/

在iOS下推荐使用AnyConnect,目前iOS使用VPN存在以下问题:
1、待机会断开
2、不能控制路由表
iOS使用APN存在以下问题:
1、不稳定,有时打不开页面
2、需要墙内墙外均部署服务器

AnyConnect相比有以下优势:
1、待机不会断开
2、能够下发路由表给客户端(未测试)
3、稳定
4、相比APN,只需要1台机器
经测试,从晚上2点多,待机到早上9点多,iPhone电量从18%掉到13%,AnyConnect还保持连接。

环境:CentOS 6.5 x64
ocserv需要3.1版以上的gnutls,gnutls需要2.7版以上的nettle
这两个在repo仓库里均没有,所以我们自己编译
首先保证系统里已安装openssl、gcc、make等常用软件
BTW:Ubuntu上好像可以用apt-get -t wheezy-backports从backports安装这些新版本(未测试)

1、编译nettle
安装gmp
yum install gmp-devel gmp
wget http://ftp.gnu.org/gnu/nettle/nettle-2.7.1.tar.gz
tar zxf nettle-2.7.1.tar.gz && cd nettle-2.7.1
./configure –prefix=/usr && make
make install &&
chmod -v 755 /usr/lib/libhogweed.so.2.5 /usr/lib/libnettle.so.4.7 &&
install -v -m755 -d /usr/share/doc/nettle-2.7.1 &&
install -v -m644 nettle.html /usr/share/doc/nettle-2.7.1

2、编译unbound
安装expat-devel
yum install expat-devel
wget http://unbound.nlnetlabs.nl/downloads/unbound-1.4.22.tar.gz
tar zxf unbound-1.4.22.tar.gz && cd unbound-1.4.22
./configure && make && make install
mkdir -p /etc/unbound && unbound-anchor -a “/etc/unbound/root.key”

3、编译gnutls
wget ftp://ftp.gnutls.org/gcrypt/gnutls/v3.2/gnutls-3.2.12.1.tar.xz
xz -c -d gnutls-3.2.12.1.tar.xz | tar x
cd gnutls-3.2.12
./configure –prefix=/usr && make && make install

4、编译ocserv
wget ftp://ftp.infradead.org/pub/ocserv/ocserv-0.3.2.tar.xz
xz -c -d ocserv-0.3.2.tar.xz | tar x
cd ocserv-0.3.2
./configure && make && make install
如果nettle和gnutls安装在/usr/local目录,需要运行以下命令设置系统变量,再运行./configure。同时要把这些命令加进系统启动里。
32bit
export LD_LIBRARY_PATH=/usr/local/lib/:/usr/local/lib64/ NETTLE_CFLAGS=”-I/usr/local/include/” NETTLE_LIBS=”-L/usr/local/lib64/ -lnettle” HOGWEED_CFLAGS=”-I/usr/local/include” HOGWEED_LIBS=”-L/usr/local/lib64/ -lhogweed”
export LD_LIBRARY_PATH=/usr/local/lib/:/usr/local/lib64/ LIBGNUTLS_CFLAGS=”-I/usr/local/include/” LIBGNUTLS_LIBS=”-L/usr/local/lib/ -lgnutls” LIBNL3_CFLAGS=”-I/usr/local/include” LIBNL3_LIBS=”-L/usr/local/lib/ -lnl-3 -lnl-route-3″

64bit
export LD_LIBRARY_PATH=/usr/lib/:/usr/lib64/ NETTLE_CFLAGS=”-I/usr/include/” NETTLE_LIBS=”-L/usr/lib64/ -lnettle” HOGWEED_CFLAGS=”-I/usr/include” HOGWEED_LIBS=”-L/usr/lib64/ -lhogweed”
export LD_LIBRARY_PATH=/usr/lib/:/usr/lib64/ LIBGNUTLS_CFLAGS=”-I/usr/include/” LIBGNUTLS_LIBS=”-L/usr/lib/ -lgnutls” LIBNL3_CFLAGS=”-I/usr/include” LIBNL3_LIBS=”-L/usr/lib/ -lnl-3 -lnl-route-3″

5、配置ocserv
创建ca证书和服务器证书(参考http://www.infradead.org/ocserv/manual.html#heading5)
certtool –generate-privkey –outfile ca-key.pem
cat << _EOF_ >ca.tmpl
cn = “stunnel.info VPN”
organization = “stunnel.info”
serial = 1
expiration_days = 365
ca
signing_key
cert_signing_key
crl_signing_key
_EOF_
certtool –generate-self-signed –load-privkey ca-key.pem –template ca.tmpl –outfile ca-cert.pem

certtool –generate-privkey –outfile server-key.pem
cat << _EOF_ >server.tmpl
cn = “stunnel.info VPN”
o = “stunnel”
serial = 2
expiration_days = 365
signing_key
encryption_key #only if the generated key is an RSA one
tls_www_server
_EOF_
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

把证书复制到ocserv的配置目录
mkdir -p /usr/local/etc/ocserv/ ; cp server-cert.pem /usr/local/etc/ocserv/ && cp server-key.pem /usr/local/etc/ocserv/</code>
复制配置文件样本
<code>cp doc/sample.config /usr/local/etc/ocserv/ocserv.conf</code>
编辑配置文件
<code>vim /usr/local/etc/ocserv/ocserv.conf

修改如下:
auth = “plain[/usr/local/etc/ocserv/ocpasswd]”
#ocserv支持多种认证方式,这是自带的密码认证,使用ocpasswd创建密码文件
#ocserv还支持证书认证,可以通过Pluggable Authentication Modules (PAM)使用radius等认证方式
server-cert = /usr/local/etc/ocserv/server-cert.pem
server-key = /usr/local/etc/ocserv/server-key.pem
#证书路径
max-same-clients = 10
#同一个用户最多同时登陆数
run-as-group = nobody
ipv4-network = 192.168.10.0
#分配给VPN客户端的IP段
dns = 8.8.8.8
dns = 8.8.4.4
#route = 192.168.1.0/255.255.255.0
#route = 192.168.5.0/255.255.255.0
#注释掉这两行。route参数留空表示所有流量均走VPN。
#ocserv可以给客户端下发路由表。比如可以把公司内网IP段、所有国外IP走VPN出去。
#default-domain = example.com
#注释掉这行。

创建认证用的用户文件
ocpasswd -c /usr/local/etc/ocserv/.passwd <username>

修改系统配置,允许转发
注意把网卡接口名称改成你服务器上对应的接口
sed -i ‘s/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/g’ /etc/sysctl.conf
sysctl -p
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o venet0 -j MASQUERADE
iptables -A FORWARD -s 192.168.10.0/24 -j ACCEPT
#IP段和venet0接口要根据自己的情况修改

最后运行服务
/usr/local/sbin/ocserv -c /usr/local/etc/ocserv/ocserv.conf
在iOS上安装Cisco AnyConnect即可连接服务器
Android上也有Cisco AnyConnect(需要root),不过Android可选择的太多,推荐Shadowsocks
Windows、MAC OS也有Cisco的官方客户端

参考:
http://www.infradead.org/ocserv/manual.html
http://ttz.im/blog/2014/02/1131
http://www.cisco.com/web/CN/solutions/trends/byod_smart_solution/pdf/at_a_glance_c45_578609.pdf
http://botu.me/entry/install-ocserv-on-centos6.html

iOS下安装stunnel,实现GFW全透明

本文需要你有一定的Linux命令行基础。
很久前写的一篇文章,没公开发布过,发布出来跟大家分享。

一、为什么用Stunnel
以前一直采用Socks和SSH的方法,但Socks和SSH都存在明显的缺陷。

Socks/http的缺陷在于非加密性,容易被关键词过滤,可能会被监听;
SSH解决了Socks/http不能加密的问题,但SSH容易出现“断流”的现象,主要是访问连接数多了后,部分连接出现长时间传输数据为0,造成大量连接无法访问。而且SSH需要保持不间断连接(移动设备上这点更为明显,会造成设备耗电过快或者休眠后需要重新连接);
VPN没有上述问题,但VPN的缺陷在于其全局性,会造成访问国内网站速度过慢,修改路由表使国内IP走默认网关也很麻烦。

stunnel介绍:

Stunnel (https://www.stunnel.org/) 是一款可以加密网络数据的TCP连接,并可工作在Unix和Windows平台上,它采用Client/Server模式,将Client端的网络数据采 用SSL(Secure Sockets Layer)加密后,安全的传输到指定的Server端再进行解密还原,然后再发送到访问的服务器。在加密传输过程中,可充分确保数据的安全性,我们只要 把Server端程序安装在局域网外面的一台服务器上,即可保证传输的数据在局域网内是安全的,如图所示。
2_16_a0dc528ac8a9202
摘自51CTO技术博客(http://32631.blog.51cto.com/22631/328307

二、安装方法:
1、服务器的http代理、Stunnel安装及生成证书
这方面已经有相当多文章,具体可参考这篇文章:http://www.cnblogs.com/eleganthqy/archive/2010/01/24/1655329.html,在此不再介绍服务器的Stunnel安装,着重介绍iOS上的安装及配置。

2、在iOS上安装Stunnel并配置
在Cydia添加这个源:http://apt.saurik.com
搜索并安装Stunnel,OpenSSH
SSH登陆iOS
cd /usr/etc/stunnel
复制stunnel.conf-sample为stunnel.conf
修改stunnel.conf
注释掉这行;chroot = /usr/var/lib/stunnel/
pid改为pid = /tmp/stunnel.pid ,不知为何设为/var/run/stunnel.pid运行时会提示没有权限
注释掉原有的[pop3s]、[imaps]、[ssmtp]和[https]所有的参数
加上以下几行(IP改为你stunnel的服务器IP或域名,或者直接使用本站提供的stunnel服务器):

client = yes
sslVersion = TLSv1

[stunnel.info]
accept = 1080
connect = s01.stunnel.info:60080

这段配置的意思是在本机开一个http代理:1080,连接到服务器s01.stunnel.info的60080端口。Stunnel会把这个端口所有接收到的数据使用证书加密然后转发到服务器上。
保存

3、设置Stunnel为自启动
cd /Library/LaunchDaemons
创建com.apple.stunnel.plist,内容为(如果在电脑上创建再上传,注意其换行方式是LF Only(UNIX),编码是不带BOM的UTF-8):

<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE plist PUBLIC “-//Apple Computer//DTD PLIST 1.0//EN” “http://www.apple.com/DTDs/PropertyList-1.0.dtd”>
<plist version=”1.0″>

<dict>
<key>Label</key>
<string>com.apple.stunnel</string>

<key>OnDemand</key>
<false/>

<key>ProgramArguments</key>
<array>
<string>/usr/bin/stunnel</string>
</array>

<key>StandardErrorPath</key>
<string>/dev/null</string>
</dict>

</plist>

运行launchctl load -w /Library/LaunchDaemons/com.apple.stunnel.plist
运行后stunnel就会启动,并且即使重启iOS,stunnel也会自动启动。

4、配置iOS的网络连接
配置iOS的网络连接,使用pac自动代理即可,这和使用SSH的方式是一样的。
pac文件可参考http://sites.google.com/site/yangyiliang/proxy.pac
下载后需要修改一个地方
改为
return “PROXY 127.0.0.1:1080”;
修改后把文件上传至iOS的/var/mobile/http.pac
然后修改Wi-Fi网络的代理为
file://localhost/var/mobile/http.pac
1

3G网络使用pac的方法:修改preferences.plist这个文件,加入(来自xD@DRL):

<key>Proxies</key>
<dict>
<key>ProxyAutoConfigEnable</key>
<integer>1</integer>
<key>ProxyAutoConfigURLString</key>
<string>file://localhost/var/mobile/proxy.pac</string>
</dict>

全部配置完毕。
开机连上网络后,不需任何设置即可翻墙,pac里的网站会通过Stunnel(即墙外代理,不过中间经过stunnel加密)访问,未被封禁的网站会直接访问。

附:
1、如果是在家里,可以在家里的电脑或者路由器上安装Stunnel,然后修改pac文件的代理为电脑或者路由器的IP。这样可以节省iPad的电池(SSL加密要耗点资源),而且不越狱也可使用。
2、Android不支持pac代理,可以root后使用ProxyDroid。

最后上张效果图。同时访问两个网站,分别是不同的IP。不用开VPN或者任何程序,GFW完全透明鸟

2

美国stunnel代理

本站提供测试用的的https(stunnel)代理。

采用https(stunnel)而不是SSH、VPN的原因

Socks/http的缺陷在于非加密性,容易被关键词过滤,可能会被监听;
SSH解决了Socks/http不能加密的问题,但SSH容易出现“断流”的现象,主要是访问连接数多了后,部分连接出现长时间传输数据为0,造成大量连接无法访问。而且SSH需要保持不间断连接(移动设备上这点更为明显,会造成设备耗电过快或者休眠后需要重新连接);
VPN没有上述问题,但VPN的缺陷在于其全局性,会造成访问国内网站速度过慢,修改路由表使国内IP走默认网关也很麻烦。

另外,GFW近几个月已经具备封锁VPN和SSH的能力,比如:

中国限制VPN使用:http://internet.solidot.org/article.pl?sid=11/05/14/1248221
中国加紧VPN控制:http://www.solidot.org/story?sid=32718
VPN服务遭到干扰:http://www.solidot.org/story?sid=23029
SSH翻墙方式疑似遭到中国政府封锁:http://www.solidot.org/story?sid=32755

stunnel的原理是在普通的http代理上加上SSL,因此其连接和普通的https网页浏览非常相似。目前还没有迹象表明GFW具有封锁https代理的能力。

stunnel介绍:

Stunnel (http://www.stunnel.org/) 是一款可以加密网络数据的TCP连接,并可工作在Unix和Windows平台上,它采用Client/Server模式,将Client端的网络数据采 用SSL(Secure Sockets Layer)加密后,安全的传输到指定的Server端再进行解密还原,然后再发送到访问的服务器。在加密传输过程中,可充分确保数据的安全性,我们只要 把Server端程序安装在局域网外面的一台服务器上,即可保证传输的数据在局域网内是安全的,如图所示。
2_16_a0dc528ac8a9202
摘自51CTO技术博客(http://32631.blog.51cto.com/22631/328307

服务器地址:

s01.stunnel.info
端口 60080
每月总流量500G,请勿用于下载等大流量应用。超出流量将造成服务器无法访问。

stunnel的安装和配置:

stunnel是开源软件,采用GPL协议,有Windows、Linux、iOS、Android等版本,以下仅说明在Windows下的安装方法。

1、到https://www.stunnel.org/downloads.html下载stunnel-4.54-installer.exe
2、安装后,编辑stunnel.conf,内容为
options = NO_SSLv2
sslVersion = TLSv1
client = yes
[stunnel.info]
accept = 60080
connect = s01.stunnel.info:60080
3、在安装目录的命令行(Vista及其后的系统需要管理员权限的命令行)运行stunnel.exe -install & net start stunnel
4、设置浏览器或者其他软件的代理为127.0.0.1,端口60080,类型是http

声明:

本站所提供的https代理仅用于测试,用户使用本代理请遵守您所在国家的法律法规。用户使用本代理产生的法律或财务纠纷,本站不承担任何责任。
本站不监控不记录代理服务器相关的日志、访问记录以及传输的内容。
stunnel仅在服务器和您的计算机之间建立加密的SSL连接,将内容加密后传输,不会修改您访问网站服务器的证书。因此访问https的网站时,会经过两次加密,网站的证书不会被修改,本代理无法获取传输的原始内容(goagent会破坏https,因此通过goagent访问https不可靠)。如果通过本代理访问https网站出现证书错误的提醒,请终止访问,确认您的网络和计算机安全,并告知本站。