爛泥:ubuntu 14.04搭建OpenVPN伺服器,14.04openvpn

來源:互聯網
上載者:User

爛泥:ubuntu 14.04搭建OpenVPN伺服器,14.04openvpn

本文由秀依林楓提供友情贊助,首發於爛泥行天下

公司分部需要串連公司內部的伺服器,但是該伺服器只允許公司內部的網路訪問。

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

PS:本文在ubuntu 14.04上安裝,openvpn伺服器位址為192.168.1.8。

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

一、openvpn原理

openvpn通過使用公開密鑰(非對稱金鑰,加密解密使用不同的key,一個稱為Publice key,另外一個是Private key)對資料進行加密的。這種方式稱為TLS加密

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

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

二、安裝openvpn

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

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

sudo apt-get -y install openvpn libssl-dev openssl

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

openvpn --version

通過,我們可以看到openvpn目前的版本為2.3.2。這個版本號碼,建議記住。

我們再來查看下openvpn安裝時產生的檔案,如下:

dpkg -L openvpn |more

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

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

easy-rsa是用來製作openvpn相關認證的。

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

sudo apt-get -y install easy-rsa

查看easy-rsa安裝的檔案,如下:

dpkg -L easy-rsa |more

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

三、製作相關認證

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

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

3.1 製作CA認證

openvpn與easy-rsa安裝完畢後,我們需要在/etc/openvpn/目錄下建立easy-rsa檔案夾,如下:

sudo mkdir /etc/openvpn/easy-rsa/

然後把/usr/share/easy-rsa/目錄下的所有檔案全部複製到/etc/openvpn/easy-rsa/下,如下:

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

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

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

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

sudo su

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

sudo vi /etc/openvpn/easy-rsa/vars

export KEY_COUNTRY="CN"

export KEY_PROVINCE="HZ"

export KEY_CITY="HangZhou"

export KEY_ORG="ilanni"

export KEY_EMAIL="ilanni@ilanni.com"

export KEY_OU="ilanni"

export KEY_NAME="vpnilanni"

vars檔案主要用於設定認證的相關組織資訊,紅色部分的內容可以根據自己的實際情況自行修改。

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

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

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

source vars

./clean-all

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

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

./build-ca

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

ll keys/

通過,我們可以很明顯的看到已經產生了ca.crt和ca.key兩個檔案,其中ca.crt就是我們所說的CA認證。如此,CA認證製作完畢。

現在把該CA認證的ca.crt檔案複製到openvpn的啟動目錄/etc/openvpn下,如下:

cp keys/ca.crt /etc/openvpn/

ll /etc/openvpn/

3.2 製作Server端認證

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

./build-key-server vpnilanni

注意:上述命令中vpnilanni,就是我們前面vars檔案中設定的KEY_NAME

查看產生的Server端認證,如下:

ll keys/

通過,可以很明顯的看到已經產生了vpnilanni.crt、vpnilanni.key和vpnilanni.csr三個檔案。其中vpnilanni.crt和vpnilanni.key兩個檔案是我們要使用的。

現在再為伺服器產生加密交換時的Diffie-Hellman檔案,如下:

./build-dh

查看產生的檔案,如下:

ll keys/

通過,我們可以很明顯的看出已經產生了dh2048.pem,這個檔案。

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

cp keys/vpnilanni.crt keys/vpnilanni.key keys/dh2048.pem /etc/openvpn/

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

3.3 製作Client端認證

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

./build-key ilanni

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

如果你想快速產生使用者認證不需要手工互動的話,可以使用如下命令:

./build-key --batch test1

查看產生的認證,如下:

ll keys/

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

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

四、配置Server端

所有認證製作完畢後,我們現在開始配置Server端。Server端的設定檔,我們可以從openvpn內建的模版中進行複製。如下:

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

cd /etc/openvpn/

解壓server.conf.gz 檔案,使用如下命令:

gzip -d server.conf.gz

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

現在我們來修改server.conf檔案,如下:

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

port 1194

proto tcp

dev tun

ca ca.crt

cert vpnilanni.crt

key vpnilanni.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 openvpn-status.log

verb 3

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

第一、修改了openvpn運行時使用的協議,由原來的UDP協議修改為TCP協議。產生環境建議使用TCP協議。

第二、修改了openvpn伺服器的相關認證,由原來的server.csr、server.key修改為vpnilanni.crt、vpnilanni.key。

第三、修改了Diffie-Hellman檔案,由原來的dh1024.pem修改為dh2048.pem。

注意:上述server.conf檔案中vpnilanni.crt、vpnilanni.key、dh2048.pem要與/etc/openvpn/目錄下的相關檔案一一對應。

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

設定檔修改完畢後,我們現在來啟動openvpn,使用如下命令:

/etc/init.d/openvpn start

netstat -tunlp |grep 1194

通過,我們可以很明顯的看出openvpn已經在此啟動,而且也確實使用的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結尾的檔案。如下:

先把這幾個檔案複製到/home/ilanni/目錄下,然後再把openvpn用戶端的設定檔模版也複製到/home/ilanni/目錄下。如下:

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

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

修改以上幾個檔案的使用者屬性,如下:

chown ilanni:ilanni ilanni.*

chown ilanni:ilanni ca.crt

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

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

下載完畢後,把client.conf檔案重新命名為client.ovpn,然後進行編輯,如下:

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

Client設定檔client.ovpn,我修改了幾個地方:

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

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

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

以上修改完畢後,我們要把這個幾個檔案放在同一個檔案夾中,並且一定要保持client.ovpn這個檔案名稱是唯一的。否則在openvpn用戶端串連時,會報錯。如下:

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

注意:下載的用戶端版本號碼一定要與伺服器端openvpn的版本一直,否則可能會出現無法串連伺服器的現象。

我們現在伺服器端的openvpn版本是2.3.2,所以用戶端也建議使用2.3.2的版本。

下載並安裝後,把testilanni這個檔案夾複製到openvpn用戶端安裝的config檔案夾。如下:

現在我們來啟動openvpn用戶端串連Server,如下:

注意:中的client就是根據client.ovpn,這個檔案名稱來的。

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

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

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

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

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

5.2 在Linux OS上

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

要在ubuntu上串連openvpnServer端,我們需要先安裝openvpn軟體,如下:

sudo apt-get -y install openvpn

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

注意:上傳完畢後,我們不需要修改任何設定檔。因為這幾個檔案在Windows下已經可以正確串連openvpn Server端。

注意:在串連Server端之前,一定要切換到root使用者下。因為在串連Server端時,openvpn會在本機建立一個虛擬網卡,如果使用普通使用者的話,是沒有許可權建立虛擬網卡的。

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

sudo su

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

openvpn --config client.ovpn

如果出現的資訊,說明已經正確串連Server端。

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

ifconfig

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

如果想讓ubuntu開機啟動並後台啟動並執行話,可以把這條命令寫入rc.local檔案中。如下:

/usr/sbin/openvpn --config /home/ilanni/testilanni/client.ovpn >/var/log/openvpn.log &

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

同時這個時候,client.ovpn檔案中有關認證的配置一定要寫成絕對路徑,要不然系統會報錯。如下:

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

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

yum -y install openvpn

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

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

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

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

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

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

yum -y install openvpn

rpm -ql openvpn

cat /usr/share/doc/openvpn-2.3.7/sample/sample-config-files/README

http://openvpn.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="ilanni@ilanni.com"

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 /etc/openvpn/

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

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

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

伺服器端設定檔:

vim /etc/openvpn/server.conf

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

port 1194

proto udp

dev tun

ca ca.crt

cert ilanni.crt

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 openvpn-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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.