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="[email protected]"
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***