Open***是一个用于创建虚拟专用网络(Virtual Private Network)加密通道的免费开源软件。使用Open***可以方便地在家庭、办公场所、住宿酒店等不同网络访问场所之间搭建类似于局域网的专用网络通道。
使用Open***配合特定的代理服务器,可用于访问Youtube、FaceBook、Twitter等受限网站,也可用于突破公司的网络限制。
Open***架构图
Open***服务器端安装
安装前准备
关闭selinux
$ setenforce 0 $ sed -i '/^SELINUX=/c\SELINUX=disabled' /etc/selinux/config
安装EPEL扩展库
$ yum install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
安装所需依赖软件包
$ yum install -y openssl openssl-devel lzo lzo-devel pam pam-devel automake pkgconfig
安装Open***和Easy-Rsa
$ yum -y install open*** easy-rsa #EPEL源
启动Open***并设置为开机启动
$ service open*** start $ chkconfig open*** on
Open***服务器端配置
配置Easy-Rsa Vars
修改vars文件
$ cd /usr/share/easy-rsa/2.0/ $ vim vars #修改注册信息,比如公司地址、公司名称、部门名称等。 export KEY_COUNTRY="CN" export KEY_PROVINCE="ChongQing" export KEY_CITY="ChongQing" export KEY_ORG="jinke" export KEY_EMAIL="jinke@qq.com" export KEY_OU="P2P_TECH"
初始化环境变量
$ source vars NOTE: If you run ./clean-all, I will be doing a rm -rf on /usr/share/easy-rsa/2.0/keys
清除keys目录下所有与证书相关的文件
下面步骤生成的证书和密钥都在/usr/share/easy-rsa/2.0/keys目录里 $ ./clean-all
生成服务器端CA证书根证书ca.crt和根密钥ca.key,由于在vars文件中做过缺省设置,在出现交互界面时,直接一路回车即可
$ ./build-ca
为服务端生成证书和密钥(一路按回车,直到提示需要输入y/n时,输入y再按回车,一共两次)
$ ./build-key-server server
创建迪菲·赫尔曼(DH)密钥,会生成dh2048.pem文件(生成过程比较慢,在此期间不要去中断它)
$ ./build-dh
生成TLS私密文件ta.key(防DDos***、UDP淹没等恶意***)
$ open*** --genkey --secret keys/ta.key
每一个登陆的***客户端需要有一个证书,每个证书在同一时刻只能供一个客户端连接,下面建立2份
为客户端生成证书和密钥(一路按回车,直到提示需要输入y/n时,输入y再按回车,一共两次) $ ./build-key client1 $ ./build-key client2
注意:进行证书制作工作时,仍旧需要进行初始化,但只需要进入easy-rsa目录,运行source vars
就可以了,不需要./clean-all 步骤,它会清除一切证书文件,这一点一定要注意!!!
查看keys目录下生成的文件
$ ls keys/ 01.pem 02.pem 03.pem ca.crt ca.key client1.crt client1.csr client1.key client2.crt client2.csr client2.key dh2048.pem index.txt index.txt.attr index.txt.attr.old index.txt.old serial serial.old server.crt server.csr server.key ta.key
配置Open***服务端
在Open***的配置目录下新建一个keys目录
$ mkdir /etc/open***/keys
将需要用到的Open***证书和密钥复制一份到刚创建好的keys目录中
$ cp /usr/share/easy-rsa/2.0/keys/{ca.crt,server.{crt,key},dh2048.pem,ta.key} /etc/open***/keys/
复制一份服务器端配置文件模板server.conf到/etc/open***/
$ cp /usr/share/doc/open***-2.3.9/sample/sample-config-files/server.conf /etc/open***/
编辑server.conf配置文件
$ vim /etc/open***/server.conf #本机要侦听使用的IP地址 local 192.168.1.201 #使用的端口,默认1194 port 1194 #改成tcp,默认使用udp,如果使用HTTP Proxy,必须使用tcp协议 proto tcp #使用的设备可选tap和tun,tap是二层设备,支持链路层协议。 #tun是ip层的点对点协议,限制稍微多一些,建议使用tun,如果使用桥接的话,就必须要使用tap dev tun #路径前面加keys,全路径为/etc/open***/keys/ca.crt #Open***使用的ROOT CA,使用build-ca生成的,用于验证客户是证书是否合法 ca keys/ca.crt #Server使用的证书文件 cert keys/server.crt #Server使用的证书对应的key,注意文件的权限,防止被盗 key keys/server.key # This file should be kept secret dh keys/dh2048.pem #注销用户需要增加 #crl-verify /usr/share/easy-rsa/2.0/keys/crl.pem #默认虚拟局域网网段,不要和实际的局域网冲突即可 server 10.8.0.0 255.255.255.0 #用于记录某个Client获得的IP地址,类似于dhcpd.lease文件, #防止open***重新启动后“忘记”Client曾经使用过的IP地址 ifconfig-pool-persist ipp.txt #通过*** Server往Client push路由,client通过pull指令获得Server push的所有选项并应用 #10.0.0.0/8是我这台***服务器所在的内网的网段,读者应该根据自身实际情况进行修改 push "route 10.0.0.0 255.0.0.0" #配置客户端dns push "dhcp-option DNS 114.114.114.114" push "dhcp-option DNS 8.8.4.4" #可以让客户端之间相互访问直接通过open***程序转发,根据需要设置 #不用发送到tun或者tap设备后重新转发,优化Client to Client的访问效率 client-to-client #如果客户端都使用相同的证书和密钥连接***,一定要打开这个选项,否则每个证书只允许一个人连接***,建议一人一个证书。 duplicate-cn #定义最大连接数 max-clients 10 #NAT后面使用***,如果***长时间不通信,NAT Session可能会失效, #导致***连接丢失,为防止之类事情的发生,keepalive提供一个类似于ping的机制, #下面表示每10秒通过***的Control通道ping对方,如果连续120秒无法ping通, #认为连接丢失,并重新启动***,重新连接 #(对于mode server模式下的open***不会重新连接)。 keepalive 10 120 tls-auth keys/ta.key 0 # This file is secret #对数据进行压缩,注意Server和Client一致 comp-lzo #通过keepalive检测超时后,重新启动***,不重新读取keys,保留第一次使用的keys persist-key #通过keepalive检测超时后,重新启动***,一直保持tun或者tap设备是linkup的, #否则网络连接会先linkdown然后linkup persist-tun #Open***的状态日志,默认为/etc/open***/open***-status.log status open***-status.log #Open***的运行日志,默认为/etc/open***/open***.log,和log一致,每次重新启动open***后保留原有的log信息,新信息追加到文件最后 log-append /var/log/open***/open***.log #相当于debug level verb 3
配置内核和防火墙
开启路由转发功能
$ sed -i '/net.ipv4.ip_forward/s/0/1/' /etc/sysctl.conf $ sysctl -p
配置防火墙
$ iptables -I INPUT -p tcp --dport 1194 -m comment --comment "open***" -j ACCEPT $ iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE $ service iptables save
Open***客户端安装及配置
生成客户端配置文件
复制一份client.conf模板命名为client.o***
$ cp /usr/share/doc/open***-2.3.9/sample/sample-config-files/client.conf client.o***
编辑client.o***
$ vim client.o*** client dev tun #改为tcp proto tcp #Open***服务器的外网IP和端口 remote xxx.xxx.xxx.xxx 1194 resolv-retry infinite nobind persist-key persist-tun ca ca.crt #client1的证书 cert client1.crt #client1的密钥 key client1.key ns-cert-type server #去掉前面的注释 tls-auth ta.key 1 comp-lzo verb 3
Linux客户端
安装客户端
$ yum -y install open*** #EPEL源
配置客户端
将Open***服务器上的client.o***
、ca.crt
、client1.crt
、client1.key
、ta.key
上传到Linux客户端/etc/open***/keys/
文件夹
连接Open***
$ open*** --daemon --config /etc/open***/keys/client.o***
Windows客户端
下载并安装客户端
Open***版本:Open*** 2.3.3 Windows 64位
Open*** Windows 32位安装文件: https://swupdate.open***.org/community/releases/open***-install-2.3.10-I601-i686.exe
Open*** Windows 64位安装文件: https://swupdate.open***.org/community/releases/open***-install-2.3.10-I601-x86_64.exe
配置客户端
将Open***服务器上的client.o***
、ca.crt
、client1.crt
、client1.key
、ta.key
上传到Windows客户端安装目录下的config文件夹(C:\Program Files\Open***\config
)
启动Open*** GUI
在电脑右下角的open***图标上右击,选择”Connect”。正常情况下应该能够连接成功,分配正常的IP。
MAC客户端
Tunnelblick: https://tunnelblick.net/
Android客户端
Open*** Connect: https://play.google.com/store/apps/details?id=net.open***.open***