1、Open***簡介
node
Open*** 是一個基於 OpenSSL 庫的應用層 *** 實現。和傳統 *** 相比,它的優勢是簡單易用。linux
Open***容許參與創建***的單點使用共享金鑰,電子證書,或者用戶名/密碼來進行身份驗證。它大量使用了OpenSSL加密庫中的SSLv3/TLSv1 協議函式庫。Open***能在Solaris、Linux、OpenBSD、FreeBSD、NetBSD、Mac OS X與Windows 2000/XP/Vista上運行,幷包含了許多安全性的功能。它並非一個基於Web的***軟件,也不與IPsec及其餘***軟件包兼容。git
Open***2.0後引入了用戶名/口令組合的身份驗證方式,它能夠省略客戶端證書,可是仍有一份服務器證書須要被用做加密。 Open***全部的通訊都基於一個單一的IP端口, 默認且推薦使用UDP協議通信,同時TCP也被支持。Open***鏈接能經過大多數的代理服務器,而且可以在NAT的環境中很好地工做。服務端具備向客 戶端「推送」某些網絡配置信息的功能,這些信息包括:IP地址、路由設置等。Open***提供了兩種虛擬網絡接口:通用Tun/Tap驅動,經過它們, 能夠創建三層IP隧道,或者虛擬二層以太網,後者能夠傳送任何類型的二層以太網絡數據。傳送的數據可經過LZO算法壓縮。在選擇協議時候,須要注意2個加密隧道之間的網絡情況,若有高延遲或者丟包較多的狀況下,請選擇TCP協議做爲底層協議,UDP協議因爲存在無鏈接和重傳機制,致使要隧道上層的協議進行重傳,效率很是低下。github
2、Open***的安裝算法
Open***服務器
vim
內外地址:10.0.0.41安全
外網地址:211.152.xx.xxbash
本地客戶端
服務器
網段:192.168.0.0網絡
本機IP:192.168.0.125
一、安裝前的準備工做
請關閉防火牆和selinux,簡單的安裝方法就是使用yum安裝,首先咱們應該先安裝epel軟件倉庫。
service iptables stop setenforce 0 rpm -ivh http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
二、開啓服務器端路由轉發功能
sysctl -w net.ipv4.ip_forward=1
三、設置nat轉發
注:保證***地址池可路由出外網
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
四、安裝open***,他會自動解決依賴關係
我使用的open***版本是2.3.7,建議你們也使用這個版本,附件有
yum install open*** -y
五、安裝好以後咱們查看安裝了哪些文件,其中標記紅色的部分的是咱們後面配置須要的
[root@*** ~]# rpm -ql open***
……
……
/usr/share/doc/open***-2.3.7/sample/sample-config-files
/usr/share/doc/open***-2.3.7/sample/sample-config-files/README
/usr/share/doc/open***-2.3.7/sample/sample-config-files/client.conf
/usr/share/doc/open***-2.3.7/sample/sample-config-files/firewall.sh
/usr/share/doc/open***-2.3.7/sample/sample-config-files/home.up
/usr/share/doc/open***-2.3.7/sample/sample-config-files/loopback-client
/usr/share/doc/open***-2.3.7/sample/sample-config-files/loopback-server
/usr/share/doc/open***-2.3.7/sample/sample-config-files/office.up
/usr/share/doc/open***-2.3.7/sample/sample-config-files/open***-shutdown.sh
/usr/share/doc/open***-2.3.7/sample/sample-config-files/open***-startup.sh
/usr/share/doc/open***-2.3.7/sample/sample-config-files/roadwarrior-client.conf
/usr/share/doc/open***-2.3.7/sample/sample-config-files/roadwarrior-server.conf
/usr/share/doc/open***-2.3.7/sample/sample-config-files/server.conf
下面兩行是運行在預共享的靜態密鑰下的示例配置文件
/usr/share/doc/open***-2.3.7/sample/sample-config-files/static-home.conf
/usr/share/doc/open***-2.3.7/sample/sample-config-files/static-office.conf
下面兩行是運行在SSL/TLS模式下的示例配置文件
/usr/share/doc/open***-2.3.7/sample/sample-config-files/tls-home.conf
/usr/share/doc/open***-2.3.7/sample/sample-config-files/tls-office.conf
/usr/share/doc/open***-2.3.7/sample/sample-config-files/xinetd-client-config
/usr/share/doc/open***-2.3.7/sample/sample-config-files/xinetd-server-config
/usr/share/doc/open***-2.3.7/sample/sample-keys
/usr/share/doc/open***-2.3.7/sample/sample-keys/.gitignore
/usr/share/doc/open***-2.3.7/sample/sample-keys/README
/usr/share/doc/open***-2.3.7/sample/sample-keys/ca.crt
/usr/share/doc/open***-2.3.7/sample/sample-keys/ca.key
/usr/share/doc/open***-2.3.7/sample/sample-keys/client-ec.crt
/usr/share/doc/open***-2.3.7/sample/sample-keys/client-ec.key
/usr/share/doc/open***-2.3.7/sample/sample-keys/client-pass.key
/usr/share/doc/open***-2.3.7/sample/sample-keys/client.crt
/usr/share/doc/open***-2.3.7/sample/sample-keys/client.key
/usr/share/doc/open***-2.3.7/sample/sample-keys/client.p12
/usr/share/doc/open***-2.3.7/sample/sample-keys/dh2048.pem
/usr/share/doc/open***-2.3.7/sample/sample-keys/gen-sample-keys.sh
/usr/share/doc/open***-2.3.7/sample/sample-keys/openssl.cnf
/usr/share/doc/open***-2.3.7/sample/sample-keys/server-ec.crt
/usr/share/doc/open***-2.3.7/sample/sample-keys/server-ec.key
/usr/share/doc/open***-2.3.7/sample/sample-keys/server.crt
/usr/share/doc/open***-2.3.7/sample/sample-keys/server.key
/usr/share/doc/open***-2.3.7/sample/sample-plugins
……
……
3、Open***的配置
首先把主要配置文件複製到/etc/open***
cp /usr/share/doc/open***-2.3.7/sample/sample-config-files/server.conf /etc/open***/
網上有不少是編譯安裝的***,也主要講解了如何生成證書,我這裏就不演示證書建立的過程了,由於咱們安裝的open***裏面自帶了測試的證書(上面紅色部分)等等,若是想自建證書的話請看本篇附錄,爲了簡便,我這裏運行open***的權限是root,若是要使用open***權限運行的話,務必修改一些文件的權限,好比證書等等。
vim /etc/open***/server.conf
port 1194 proto tcp dev tun ca /usr/share/doc/open***-2.3.7/sample/sample-keys/ca.crt cert /usr/share/doc/open***-2.3.7/sample/sample-keys/server.crt key /usr/share/doc/open***-2.3.7/sample/sample-keys/server.key dh /usr/share/doc/open***-2.3.7/sample/sample-keys/dh2048.pem server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt push "route 10.0.0.0 255.255.255.0" push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 114.114.114.114" topology subnet client-to-client keepalive 10 120 comp-lzo persist-key persist-tun status /var/log/open***/open***-status.log log-append /var/log/open***/open***.log verb 3
注:可按照默認模板配置,本例爲自定義配置文件,";"還有"#"開頭的是註釋
--------------------------
# 設置監聽IP,默認是監聽全部IP
;local a.b.c.d
# 設置監聽端口,必需要對應的在防火牆裏面打開
port 1194
# 設置用TCP仍是UDP協議?(用UDP會比較快些)
;proto tcp
proto tcp
# 設置建立tun的路由IP通道,仍是建立tap的以太網通道路,因爲IP容易控制,因此推薦使用tun;但若是IPX等必須使用第二層才能經過的通信,則能夠用tap方式,tap也就是以太網橋接
;dev tap
dev tun
# Windows服務端須要給網卡一個名稱,linux不須要
;dev-node MyTap
# 這裏是重點,必須指定SSL/TLS root certificate (ca),certificate(cert), and private key (key),ca文件是服務端和客戶端都必須使用的,但不須要ca.key,服務端和客戶端指定各自的.crt和.key,請注意路徑,可使用以配置文件開始爲根的相對路徑,也可使用絕對路徑,請當心存放.key密鑰文件
ca /usr/share/doc/open***-2.3.7/sample/sample-keys/ca.crt
cert /usr/share/doc/open***-2.3.7/sample/sample-keys/server.crt
key /usr/share/doc/open***-2.3.7/sample/sample-keys/server.key
# 指定Diffie hellman parameters.
dh /usr/share/doc/open***-2.3.7/sample/sample-keys/dh2048.pem
# 配置服務器模式和***使用的網段,Open***會自動提供基於該網段的DHCP服務,但不能和任何一方的局域網段重複,***服務器將會把10.8.0.1留給本身,其他的分配給***客戶端,每個客戶端都會從10.8.0.1這個IP到達Open***服務端,若是使用dev tap模式,則須要註釋掉該指令。
server 10.8.0.0 255.255.255.0
# 維持一個客戶端和virtual IP的對應表,以方便客戶端從新鏈接能夠得到一樣的IP
ifconfig-pool-persist ipp.txt
# 配置爲以太網橋模式(dev tap),但須要使用系統的橋接功能,這裏不須要使用
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100
# 爲客戶端建立對應的路由,以另其通達公司網內部服務器,但記住,公司網內部服務器也須要有可用路由返回到客戶端,這裏主要填寫open***所在局域網的網段,個人open***所在的局域網是10.0.0.0,若是你的open***所在的局域網是其餘的網段,下面請填寫其餘網段,能夠填寫多個網段。
;push "route 192.168.20.0 255.255.255.0"
push "route 10.0.0.0 255.255.255.0"
# 若客戶端但願全部的流量都經過***傳輸,則可使用該語句,其會自動改變客戶端的網關爲***服務器,推薦關閉,一旦設置,請當心服務端的DHCP設置問題,若是須要抓取因此鏈接***客戶端的流量信息,須要開啓,這就是網絡上面所說的***。
;push "redirect-gateway def1 bypass-dhcp" 全部數據都經過***
# 用Open***的DHCP功能爲客戶端提供指定的DNS、WINS等
push "dhcp-option DNS 114.114.114.114"
;push "dhcp-option WINS 10.8.0.1"
# 默認客戶端之間是不能直接通信的,除非把下面的語句註釋掉
client-to-client
# 若是您但願有相同Common Name的客戶端均可以登錄,也能夠註釋下面的語句,推薦每一個客戶端都使用不用的Common Name,開啓的話,一個證書能夠多個客戶端鏈接
;duplicate-cn
# 設置服務端檢測的間隔和超時時間
keepalive 10 120
# 使用lzo壓縮的通信,服務端和客戶端都必須配置
comp-lzo
# 設置最大用戶數
;max-clients 100
# 讓Open***以nobody用戶和組來運行(安全)
;user nobody
;group nobody
#持續選項會盡可能避免訪問某些資源的從新啓動可能不能夠由於特權的降級。
persist-key
persist-tun
# 輸出短日誌,每分鐘刷新一次,以顯示當前的客戶端
status /var/log/open***/open***-status.log
# 缺省日誌會記錄在系統日誌中,但也能夠導向到其餘地方建議調試的使用先不要設置,調試完成後再定義,只能使用其中的一個,log會每次啓動前先清楚日誌,log-append會對數據追加
;log /var/log/open***/open***.log
log-append /var/log/open***/open***.log
# 設置日誌的級別
verb 3
--------------------------
其中咱們只須要修改一下紅色的部分,不少其餘不經常使用的參數並無列舉出來,若是須要能夠查閱配置文件。
4、Open***的啓動
service open*** start
[root@*** ~]# netstat -tlnp
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 2381/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1425/master tcp 0 0 0.0.0.0:1194 0.0.0.0:* LISTEN 12947/open***
5、客戶端的安裝
1.下載客戶端,並默認安裝:
如何你不能夠下載的話,能夠經過個人附件下載,在最下面
http://***tech.googlecode.com/files/open***-2.1.1-gui-1.0.3-install-cn-64bit.zip
2.將服務端內ca.crt、client.crt、client.key、client.conf複製到客戶端C:\Program Files (x86)\Open***\config下。
3.把client.conf更名爲client.o***
client dev tun proto tcp remote 211.152.x.x 1194 resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert client.crt key client.key comp-lzo verb 3
# 定義是一個客戶端
client
# 定義使用路由IP模式,與服務端一致
;dev tap
dev tun
# 定義Windows下使用的網卡名稱,linux不須要
;dev-node MyTap
# 定義使用的協議,與服務端一致
;proto tcp
proto tcp
# 指定服務端地址和端口,能夠用多行指定多臺服務器實現負載均衡高可用(從上往下嘗試)
remote 211.152.x.x 1194
;remote my-server-2 1194
# 若上面配置了多臺服務器,讓客戶端隨機鏈接,以便實現負載均衡
;remote-random
# 解析服務器域名
resolv-retry infinite
# 客戶端不須要綁定端口
nobind
# Try to preserve some state across restarts.
persist-key
persist-tun
# 重點,就是指定ca和客戶端的證書
ca ca.crt
cert client.crt
key client.key
# 使用lzo壓縮,與服務端一致
comp-lzo
# Set log file verbosity.
verb 3
-----------------------
client裏面能夠只填寫上面紅色的參數,其餘的參數能夠所有刪掉。
五、鏈接
在右下角的open***圖標上右擊,選擇「Connect」,若能正常分配IP,則鏈接成功。
我獲取的IP是10.8.0.6
先去看一下咱們的路由信息
由於咱們使用了push "route 10.0.0.0 255.255.255.0" ,因此open***給咱們推送了一條路由信息,咱們在查看一下open***上面的IP信息
那咱們去ping一下服務器的內外IP,還有服務器內外外的另外一臺設備,看看是否能夠連入機房內網。
事實證實咱們的配置是成功的!
目前咱們使用的是證書登陸,若是須要修改爲帳號密碼登陸,請查看本博客下一篇文章,謝謝!
6、客戶端IP地址的使用
在--topology mode選項中,mode有三種取值,即net30、subnet和p2p。
當運行在--dev tun模式下時,能夠經過--topology mode選項來配置虛擬地址的拓撲結構。而對於--dev tap而言,該選項沒有任何意義,由於在--dev tap模式下,老是使用子網拓撲若是在服務器端設置了--topology mode選項,那麼--server和--server-bridge選項將會很好地自動地把拓撲模式推送到客戶端。該選項也能夠被手動的推送到客戶端,相似於--dev選項,另外,還要求服務器端和客戶端必須支持該選項。
一、net30
Open***默認的子網掩碼是/30,也就是255.255.225.252。在這樣的狀況下,每組網絡四個地址,只有兩個地址可使用,一個給服務端,一個給客戶端,另一個是網絡地址,一個是廣播地址,這樣地址是很浪費的,這是Open*** 2.0的默認模式。
在Open***的2.0版本中,Open***能經過虛擬一個TUN虛擬接口處理多個客戶端,要處理這種技術,能夠把服務器上看到的PtP鏈接看做是一個操做系統和Open***之間的鏈接,而在Open***內部還須要爲每個客戶端建立另外一個PtP。如何全部的O/S在TUN接口上真正的支持PtP鏈接,那麼這將會是的Open***服務器僅使用一個IP地址,而且一個客戶端也使用一個IP地址。
在OS系統和Open***之間首先要有一個10.8.0.1<->10.8.0.2的PtP鏈接。
因而Open***爲每個鏈接的客戶端指定一個/30的子網,第一個可使用的/30的子網是:
10.8.0.4:網絡地址;
10.8.0.5:在Open***中的「虛擬」IP地址;
10.8.0.6:指定給客戶端的IP地址;
10.8.0.7:廣播地址。
而後將路由推到客戶端,這樣便使全部IP地址爲10.8.0.5的流量都必須經過「網關」10.8.0.5才能夠出去或者進入。
因爲10.8.0.5僅是Open***內部的一個虛擬IP地址,它被用做末端路由,對應這個地址,Open***不會接受ping,而10.8.0.6對於服務器的操做系統來講倒是一個真正的IP地址,所以它能夠接受ping,咱們讓客戶端鏈接查看一下。
以此類推,第二個客戶端鏈接分配的IP地址對就是10.8.0.9<->10.8.0.10,從這個IP分配來看,對IP的使用形成的浪費。可是對於Open***服務器端僅使用一個配置來爲全部類型的客戶端分配地址來講這是最好的一種方式。
二、subnet
subnet經過配置TUN接口的本地IP地址和子網掩碼來使用一個子網,而不是點對點的拓撲結構,相似於使用--dev tap和以太網橋模式的拓撲結構。這種模式爲每一個客戶端分配單個IP地址。
三、p2p
p2p模式使用點對點拓撲,僅適用於Windows系統下,如今已經再也不同意使用。
附錄
下載密鑰製做工具easy_rsa 2:
wget https://github.com/Open***/easy-rsa/archive/release/2.x.zip
解壓easy_rsa並拷貝到/etc/open***:
unzip 2.x.zip
mv easy-rsa-release-2.x/ /etc/open***/
編輯easy-rsa的vars文件,設定相關變量信息:
cd /etc/open***/easy-rsa-release-2.x/easy-rsa/2.0
vim vars
export KEY_COUNTRY="CN"
export KEY_PROVINCE="Shanghai"
export KEY_CITY="Shanghai"
export KEY_ORG="Comratings"
export KEY_EMAIL="ADMIN@Comratings.COM"
export KEY_OU="MyOpen***"
編輯完以後,保存退出。
將剛纔編輯的vars文件,執行以下命令:
source vars
./clean-all
./build-ca
建立服務器的證書和密鑰:
./build-key-server Open***_Server
[root@cloud 2.0]# ./build-key-server Open***_Server
Generating a 2048 bit RSA private key
.................................+++
............+++
writing new private key to 'Open***_Server.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [CN]:
State or Province Name (full name) [BEIJING]:
Locality Name (eg, city) [BEIJING]:
Organization Name (eg, company) [XIAOCUI]:
Organizational Unit Name (eg, section) [MyOpen***]:
Common Name (eg, your name or your server's hostname) [Open***_Server]:
Name [EasyRSA]:
Email Address [ADMIN@ XIAOCUI.COM]:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /etc/open***/easy-rsa-release-2.x/easy-rsa/2.0/openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'CN'
stateOrProvinceName :PRINTABLE:'BEIJING'
localityName :PRINTABLE:'BEIJING'
organizationName :PRINTABLE:' XIAOCUI '
organizationalUnitName:PRINTABLE:'MyOpen***'
commonName :T61STRING:'Open***_Server'
name :PRINTABLE:'EasyRSA'
emailAddress :IA5STRING:'ADMIN@ XIAOCUI.COM'
Certificate is to be certified until May 2 07:49:13 2025 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
建立客戶端的證書和密鑰:
./build-key client-user-test1
[root@cloud 2.0]# ./build-key client-user-test1
Generating a 2048 bit RSA private key
....................+++
...............................................................................+++
writing new private key to 'client-user-cuiyuanrong.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [CN]:
State or Province Name (full name) [BEIJING]:
Locality Name (eg, city) [BEIJING]:
Organization Name (eg, company) [XIAOCUI]:
Organizational Unit Name (eg, section) [MyOpen***]:
Common Name (eg, your name or your server's hostname) [client-user-test1]:
Name [EasyRSA]:
Email Address [ADMIN@XIAOCUI.COM]:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /etc/open***/easy-rsa-release-2.x/easy-rsa/2.0/openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'CN'
stateOrProvinceName :PRINTABLE:'BEIJING'
localityName :PRINTABLE:'BEIJING'
organizationName :PRINTABLE:'XIAOCUI'
organizationalUnitName:PRINTABLE:'MyOpen***'
commonName :PRINTABLE:'client-user-test1'
name :PRINTABLE:'EasyRSA'
emailAddress :IA5STRING:'ADMIN@XIAOCUI.COM'
Certificate is to be certified until May 2 07:53:17 2025 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
建立Diffie Hellman 參數:
./build-dh