爛泥:ubuntu 14.04搭建Open***服務器

本文首發於爛泥行天下

公司分部需要連接公司內部的服務器,但是該服務器只允許公司內部的網絡訪問。

爲了解決這個問題,打算使用***。對於***以前使用最多的是PPTP這個解決方案,但是PPTP相對於open***來說,沒有open***安全,而且PPTP在linux下命令行支持不是很好,穩定性也不如open***。所以最後就選擇open***來搭建***。

PS:本文在ubuntu 14.04上安裝,open***服務器地址爲192.168.1.8。

有關open***在centos6.6 64bit的配置完全可以使用,已經經過驗證。文章後有centos詳細配置命令及步驟。

一、open***原理

open***通過使用公開密鑰(非對稱密鑰,加密解密使用不同的key,一個稱爲Publice key,另外一個是Private key)對數據進行加密的。這種方式稱爲TLS加密

open***使用TLS加密的工作過程是,首先*** Sevrver端和*** Client端要有相同的CA證書,雙方通過交換證書驗證雙方的合法性,用於決定是否建立***連接。

然後使用對方的CA證書,把自己目前使用的數據加密方法加密後發送給對方,由於使用的是對方CA證書加密,所以只有對方CA證書對應的Private key才能解密該數據,這樣就保證了此密鑰的安全性,並且此密鑰是定期改變的,對於竊聽者來說,可能還沒有破解出此密鑰,***通信雙方可能就已經更換密鑰了。

二、安裝open***

open***的安裝我們分爲apt-get方式和源碼方式,下面我們只講解apt-get方式的安裝。有關源碼方式安裝open***,可自行百度。

apt-get方式安裝,我們可以使用如下命令:

sudo apt-get -y install open*** libssl-dev openssl

clip_image001

open***安裝完畢後,我們來查看open***的版本,如下:

open*** --version

clip_image002

通過上圖,我們可以看到open***目前的版本爲2.3.2。這個版本號,建議記住。

我們再來查看下open***安裝時產生的文件,如下:

dpkg -L open*** |more

clip_image003

通過上圖,我們可以很明顯的看出open***已經有相關配置的模版了。

open***安裝完畢後,我們再來安裝easy-rsa。

easy-rsa是用來製作open***相關證書的。

安裝easy-rsa,使用如下命令:

sudo apt-get -y install easy-rsa

clip_image004

查看easy-rsa安裝的文件,如下:

dpkg -L easy-rsa |more

clip_image005

通過上圖,我們可以很明顯的看到easy-rsa已經安裝到/usr/share/easy-rsa/目錄下。

三、製作相關證書

根據第一章節open***的工作原理,我們可以知道open***的證書分爲三部分:CA證書、Server端證書、Client端證書。

下面我們通過easy-rsa分別對其進行製作。

3.1 製作CA證書

open***與easy-rsa安裝完畢後,我們需要在/etc/open***/目錄下創建easy-rsa文件夾,如下:

sudo mkdir /etc/open***/easy-rsa/

clip_image006

然後把/usr/share/easy-rsa/目錄下的所有文件全部複製到/etc/open***/easy-rsa/下,如下:

sudo cp -r /usr/share/easy-rsa/* /etc/open***/easy-rsa/

clip_image007

當然,我們也可以直接在/usr/share/easy-rsa/製作相關的證書,但是爲了後續的管理證書的方便,我們還是把easy-rsa放在了open***的啓動目錄下。

注意:由於我們現在使用的是ubuntu系統,所以我們必須切換到root用戶下才能製作相關證書,否則easy-rsa會報錯。如果是centos系統,則不存在此問題。

切換到root用戶下,使用如下命令:

sudo su

clip_image008

在開始製作CA證書之前,我們還需要編輯vars文件,修改如下相關選項內容即可。如下:

sudo vi /etc/open***/easy-rsa/vars

export KEY_COUNTRY="CN"

export KEY_PROVINCE="HZ"

export KEY_CITY="HangZhou"

export KEY_ORG="ilanni"

export KEY_EMAIL="[email protected]"

export KEY_OU="ilanni"

export KEY_NAME="***ilanni"

clip_image009

vars文件主要用於設置證書的相關組織信息,紅色部分的內容可以根據自己的實際情況自行修改

其中export KEY_NAME="***ilanni"這個要記住下,我們下面在製作Server端證書時,會使用到。

注意:以上內容,我們也可以使用系統默認的,也就是說不進行修改也是可以使用的。

然後使用source vars命令使其生效,如下:

source vars

./clean-all

clip_image010

注意:執行clean-all命令會刪除,當前目錄下的keys文件夾。

現在開始正式製作CA證書,使用如下命令:

./build-ca

clip_image011

一路按回車鍵即可。製作完成後,我們可以查看keys目錄。如下:

ll keys/

clip_image012

通過上圖,我們可以很明顯的看到已經生成了ca.crt和ca.key兩個文件,其中ca.crt就是我們所說的CA證書。如此,CA證書製作完畢。

現在把該CA證書的ca.crt文件複製到open***的啓動目錄/etc/open***下,如下:

cp keys/ca.crt /etc/open***/

ll /etc/open***/

clip_image013

3.2 製作Server端證書

CA證書製作完成後,我們現在開始製作Server端證書。如下:

./build-key-server ***ilanni

clip_image014

clip_image015

注意:上述命令中***ilanni,就是我們前面vars文件中設置的KEY_NAME

查看生成的Server端證書,如下:

ll keys/

clip_image016

通過上圖,可以很明顯的看到已經生成了***ilanni.crt、***ilanni.key和***ilanni.csr三個文件。其中***ilanni.crt和***ilanni.key兩個文件是我們要使用的。

現在再爲服務器生成加密交換時的Diffie-Hellman文件,如下:

./build-dh

clip_image017

查看生成的文件,如下:

ll keys/

clip_image018

通過上圖,我們可以很明顯的看出已經生成了dh2048.pem,這個文件。

以上操作完畢後,把***ilanni.crt、***ilanni.key、dh2048.pem複製到/etc/open***/目錄下,如下:

cp keys/***ilanni.crt keys/***ilanni.key keys/dh2048.pem /etc/open***/

clip_image019

如此,Server端證書就製作完畢。

3.3 製作Client端證書

Server端證書製作完成後,我們現在開始製作Client端證書,如下:

./build-key ilanni

clip_image020

clip_image021

注意:上述命令中的ilanni,是客戶端的名稱。這個是可以進行自定義的。

如果你想快速生成用戶證書不需要手工交互的話,可以使用如下命令:

./build-key --batch test1

clip_image022

clip_image023

查看生成的證書,如下:

ll keys/

clip_image024

通過上圖,我們可以很明顯的看出已經生成了ilanni.csr、ilanni.crt和ilanni.key這個三個文件。其中ilanni.crt和ilanni.key兩個文件是我們要使用的。

如此,Client端證書就製作完畢。

四、配置Server端

所有證書製作完畢後,我們現在開始配置Server端。Server端的配置文件,我們可以從open***自帶的模版中進行復制。如下:

cp /usr/share/doc/open***/examples/sample-config-files/server.conf.gz /etc/open***/

cd /etc/open***/

clip_image025

解壓server.conf.gz 文件,使用如下命令:

gzip -d server.conf.gz

clip_image026

注意:上述命令的意思是解壓server.conf.gz文件後,然後刪除原文件。

現在我們來修改server.conf文件,如下:

grep -vE "^#|^;|^$" server.conf

port 1194

proto tcp

dev tun

ca ca.crt

cert ***ilanni.crt

key ***ilanni.key

dh dh2048.pem

server 10.8.0.0 255.255.255.0

ifconfig-pool-persist ipp.txt

keepalive 10 120

comp-lzo

persist-key

persist-tun

status open***-status.log

verb 3

clip_image027

與原模版文件相比,在此我修改幾個地方。

第一、修改了open***運行時使用的協議,由原來的UDP協議修改爲TCP協議。生成環境建議使用TCP協議。

第二、修改了open***服務器的相關證書,由原來的server.csr、server.key修改爲***ilanni.crt、***ilanni.key。

第三、修改了Diffie-Hellman文件,由原來的dh1024.pem修改爲dh2048.pem。

注意:上述server.conf文件中***ilanni.crt、***ilanni.key、dh2048.pem要與/etc/open***/目錄下的相關文件一一對應。

同時,如果上述文件如果沒有存放在/etc/open***/目錄下,在server.conf文件中,我們要填寫該文件的絕對路徑。如下所示:

clip_image028

配置文件修改完畢後,我們現在來啓動open***,使用如下命令:

/etc/init.d/open*** start

netstat -tunlp |grep 1194

clip_image029

通過上圖,我們可以很明顯的看出open***已經在此啓動,而且也確實使用的TCP協議的1194端口。

五、配置Client端

Server端配置並啓動後,我們現在來配置Client端。Client端根據操作系統的不同,又分爲Linux OS上和Windows OS上。以下我們對此一一驚醒講解。

5.1 在Windows OS上

無論是在Windows OS還是在Linux OS上Client端的配置,我們都需要把Client證書、CA證書以及Client配置文件下載下來。

先來下載Client證書和CA證書,Client證書我們主要使用crt和key結尾的兩個文件,而CA證書我們主要使用crt結尾的文件。如下:

clip_image030

先把這幾個文件複製到/home/ilanni/目錄下,然後再把open***客戶端的配置文件模版也複製到/home/ilanni/目錄下。如下:

cp ilanni.crt ilanni.key ca.crt /home/ilanni/

cp /usr/share/doc/open***/examples/sample-config-files/client.conf /home/ilanni/

clip_image031

修改以上幾個文件的用戶屬性,如下:

chown ilanni:ilanni ilanni.*

chown ilanni:ilanni ca.crt

clip_image032

修改完畢後,退出root用戶,回到ilanni用戶的家目錄下,然後使用sz命令把這幾個文件下載下來。如下:

sz -y ilanni.crt ilanni.key ca.crt client.conf

clip_image033

clip_image034

下載完畢後,把client.conf文件重命名爲client.o***,然後進行編輯,如下:

client

dev tun

proto tcp

remote 192.168.1.8 1194

resolv-retry infinite

nobind

persist-key

persist-tun

ca ca.crt

cert ilanni.crt

key ilanni.key

ns-cert-type server

comp-lzo

verb 3

clip_image035

Client配置文件client.o***,我修改了幾個地方:

第一、使用的協議,由原來的UDP修改爲TCP,這個一定要和Server端保持一致。否則Client無法連接

第二、remote地址,這個地址要修改爲Server端的地址。

第三、Client證書名稱,這個要和我們現在使用的Client證書名稱保持一直。

以上修改完畢後,我們要把這個幾個文件放在同一個文件夾中,並且一定要保持client.o***這個文件名稱是唯一的。否則在open***客戶端連接時,會報錯。如下:

clip_image036

安裝open*** for windows客戶端,我們可以從這個地址下載,如下:http://build.open***.net/downloads/releases/

注意:下載的客戶端版本號一定要與服務器端open***的版本一直,否則可能會出現無法連接服務器的現象。

我們現在服務器端的open***版本是2.3.2,所以客戶端也建議使用2.3.2的版本。

下載並安裝後,把testilanni這個文件夾複製到open***客戶端安裝的config文件夾。如下:

clip_image037

現在我們來啓動open***客戶端連接Server,如下:

clip_image038

注意:上圖中的client就是根據client.o***,這個文件名來的。

點擊connect,會出現如下的彈窗:

clip_image039

如果配置都正確的話,會出現如下的提示:

clip_image040

通過上圖,我們可以很明顯的看到Client已經正確連接Server端,並且獲得的IP地址是10.8.0.6。

下面我們在本機查看下,該IP地址,如下:

clip_image041

通過上圖,我們可以看到本機確實已經連接到Server端,而且獲得的IP地址也確實爲10.8.0.6。

5.2 在Linux OS上

在Windows OS上測試完畢後,我們現在在切換到linux系統。在此我們以ubuntu14.04爲例。

要在ubuntu上連接open***Server端,我們需要先安裝open***軟件,如下:

sudo apt-get -y install open***

clip_image042

安裝完畢後,把我們剛剛在Windows系統配置的文件上傳到ubuntu系統中。如下:

clip_image043

注意:上傳完畢後,我們不需要修改任何配置文件。因爲這幾個文件在Windows下已經可以正確連接open*** Server端。

注意:在連接Server端之前,一定要切換到root用戶下。因爲在連接Server端時,open***會在本機創建一個虛擬網卡,如果使用普通用戶的話,是沒有權限創建虛擬網卡的。

切換到root用戶,使用sudo su命令,如下:

sudo su

clip_image044

現在開始連接Server端,使用如下命令:

open*** --config client.o***

clip_image045

如果出現上圖的信息,說明已經正確連接Server端。

現在我們在本機使用ifconfig進行查看,在此建議重新開啓一個新的ssh窗口,如下:

ifconfig

clip_image046

通過上圖,我們可以很明顯的看出,本機已經正確連接Server端,並且也在本機虛擬出一個叫tun0的虛擬網卡。

如果想讓ubuntu開機啓動並後臺運行的話,可以把這條命令寫入rc.local文件中。如下:

/usr/sbin/open*** --config /home/ilanni/testilanni/client.o*** >/var/log/open***.log &

clip_image047

注意,命令末尾的&符號不能省略,否則將可能阻塞系統的正常啓動。

同時這個時候,client.o***文件中有關證書的配置一定要寫成絕對路徑,要不然系統會報錯。如下:

clip_image048

如果是centos系統的話,我們首先需要安裝epel源,然後安裝open***軟件包。如下:

rpm -ivh http://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm

yum -y install open***

以上安裝完畢後,把Windows已經成功連接的Client相關文件上傳到centos系統中,然後連接方法和ubuntu系統上一樣。

注意:如果在centos系統要開機啓動的話,也是和ubuntu系統是一樣的,但是有一點需要指出就是Client相關配置文件不能放在/root目錄下。

給一個正確配的例子,如下:

clip_image049

clip_image050

clip_image051

因爲centos的open*** server配置和unubutn基本一樣,所以就不再單獨寫一篇有關centos下安裝配置open*** sever的文章。

但是附上在centos下,所有執行的命令。如下:

rpm -ivh http://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm

yum -y install open***

rpm -ql open***

cat /usr/share/doc/open***-2.3.7/sample/sample-config-files/README

http://open***.net/howto.html

yum -y install easy-rsa

rpm -ql easy-rsa

cd /usr/share/easy-rsa/2.0/

vim vars

export KEY_COUNTRY="CN"

export KEY_PROVINCE="HangZhou"

export KEY_CITY="HZ"

export KEY_ORG="ilanni"

export KEY_EMAIL="[email protected]"

export KEY_OU="MyOrganizationalUnit"

export KEY_NAME="ilanni"

source vars

./clean-all

./build-ca

./build-key-server ilanni

./build-dh

./build-key centos

cd  keys

cp ca.crt ilanni.key ilanni.crt dh2048.pem /etc/open***/

cp ca.crt centos.key centos.crt /root/

cp /usr/share/doc/open***-2.3.7/sample/sample-config-files/client.conf /root

cp /usr/share/doc/open***-2.3.7/sample/sample-config-files/server.conf /etc/open***/

服務器端配置文件:

vim /etc/open***/server.conf

grep -vE ";|#|^$" /etc/open***/server.conf

port 1194

proto udp

dev tun

ca ca.crt

cert ilanni.crt

key ilanni.key

dh dh2048.pem

server 10.8.0.0 255.255.255.0

ifconfig-pool-persist ipp.txt

keepalive 10 120

comp-lzo

persist-key

persist-tun

status open***-status.log

verb 3

客戶端配置文件:

grep -vE ";|#|^$" centos.conf

client

dev tun

proto udp

remote 182.254.223.140 1194

resolv-retry infinite

nobind

persist-key

persist-tun

ca ca.crt

cert centos.crt

key centos.key

remote-cert-tls server

comp-lzo

verb 3

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章