CentOS 6.5下OpenVPN的搭建

一、openvpn原理

二、安裝openvpn

三、制作相關證書

    3.1 制作CA證書

    3.2 制作Server端證書

    3.3 制作Client端證書

四、配置Server端

五、配置Client端

一、openvpn原理

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

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

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

二、安裝openvpn

yum方式安裝,此處統一使用aliyun中centos和epel源

# rm /etc/yum.repos.d/* -fr

# vim /etc/yum.repos.d/ali.repo

[centos6]

name=centeros6 base

baseurl=http://mirrors.aliyun.com/centos/6/os/x86_64/

gpgcheck=0

 

[epel]

name=epel base

baseurl=http://mirrors.aliyun.com/epel/6/x86_64

gpgcheck=0

blob.png

為避免出現錯誤,關閉selinux

# setenforce 0;sed -i 's/SELINUX=.*/SELINUX=permissive/' /etc/selinux/config

blob.png

我們可以使用如下命令:

# yum install -y openvpn openssl pkcs11-helper

 

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

# openvpn –version

blob.png

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

easy-rsa是用來制作openvpn相關證書的。

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

[root@localhost keys]# yum install -y easy-rsa

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

[root@localhost keys]# rpm -ql easy-rsa

blob.png

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

三、制作相關證書

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

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

3.1 制作CA證書

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

[root@localhost keys]# mkdir /etc/openvpn/easy-rsa/

 

然后把/usr/share/easy-rsa/目錄下的所有文件全部復制到/etc/openvpn/easy-rsa/下,如下:

[root@localhost keys]# cp -r /usr/share/easy-rsa/2.0/* /etc/openvpn/easy-rsa/

[root@localhost keys]# ll /etc/openvpn/easy-rsa/

blob.png

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

 

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

[root@localhost keys]# vim /etc/openvpn/easy-rsa/vars

export KEY_COUNTRY=”CN

export KEY_PROVINCE=”BJ

export KEY_CITY=”Chaoyang

export KEY_ORG=”TEST

export KEY_EMAIL=”TEST@TEST.com

export KEY_OU=”TEST

export KEY_NAME=”TEST”

blob.png

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

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

[root@localhost easy-rsa]# source vars.

[root@localhost easy-rsa]# ./clean-all

blob.png

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

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

[root@localhost easy-rsa]# ./build-ca

blob.png

 

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

[root@localhost easy-rsa]# ll keys/

blob.png

 

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

現在把該CA證書的ca.crt文件復制到openvpn的啟動目錄/etc/openvpn下,如下:

[root@localhost easy-rsa]# cp keys/ca.crt /etc/openvpn

[root@localhost easy-rsa]# ll /etc/openvpn/

blob.png

3.2 制作Server端證書

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

[root@localhost easy-rsa]# ./build-key-server vpnserver

blob.png

 

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

[root@localhost easy-rsa]# ll keys/

blob.png

 

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

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

[root@localhost easy-rsa]# ./build-dh

查看生成的文件,如下:

[root@localhost easy-rsa]# ll keys/

blob.png

 

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

以上操作完畢后,把vpnserver.crt、vpnserver.key、dh2048.pem復制到/etc/openvpn/目錄下,如下:

[root@localhost easy-rsa]# cp keys/vpnserver.crt keys/vpnserver.key keys/dh2048.pem /etc/openvpn/

[root@localhost easy-rsa]# ll /etc/openvpn/

blob.png

至此,Server端證書就制作完畢。

3.3 制作Client端證書

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

[root@localhost easy-rsa]# ./build-key user1

blob.png

 

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

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

[root@localhost easy-rsa]# ./build-key –batch user2

blob.png

查看生成的證書,如下:

[root@localhost easy-rsa]# ll keys/

blob.png

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

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

 

四、配置Server端

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

[root@localhost easy-rsa]# cp /usr/share/doc/openvpn-2.3.10/sample/sample-config-files/server.conf /etc/openvpn/server.conf.bak

[root@localhost easy-rsa]# cd /etc/openvpn/

blob.png

現在我們通過修改server.conf.bak文件來生成server.conf文件,如下:

[root@localhost openvpn]# grep -vE "^#|^;|^$" server.conf.bak > server.conf

[root@localhost openvpn]# vim server.conf

port 1194

proto tcp

dev tun

ca ca.crt

cert vpnserver.crt

key vpnserver.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

blob.png

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

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

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

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

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

blob.png

配置文件修改完畢后,我們現在來啟動openvpn,使用如下命令:

[root@localhost openvpn]# service openvpn start

[root@localhost openvpn]# ss -tnlp |grep 1194

blob.png

通過上圖,我們可以的看出openvpn已經在此啟動,使用的TCP協議的1194端口。

 

五、配置Client端

Server端配置并啟動后,我們現在來配置Client端。我們主要在Windows OS上。下載安裝“openvpn-2.1.1-gui-1.0.3-install-cn-64bit”,地址為: https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/vpntech/openvpn-2.1.1-gui-1.0.3-install-cn-64bit.zip

 

5.1 在Windows OS上

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

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

blob.png

先把這幾個文件復制到/root/user1目錄下,然后再把openvpn客戶端的配置文件模版也復制到/root/user1/目錄下。如下:

[root@localhost keys]# mkdir /root/user1/ -pv

[root@localhost keys]# cp /usr/share/doc/openvpn-2.3.10/sample/sample-config-files/client.conf /root/user1/client.ovpn

[root@localhost keys]# cp user1.crt user1.key /root/user1/

blob.png

 

復制完畢后,回到/root/user1目錄下,然后使用sz命令把這幾個文件下載到windows上存放user1配置文件的目錄。如下:

windows下路徑C:\Program Files (x86)\OpenVPN\config,存放user1的配置文檔,新建文件夾user1

blob.png

 

[root@localhost keys]# cd /root/user1

[root@localhost user1]# sz *

blob.png

 

blob.png

 

下載完畢后,然后編輯client.ovpn,如下:

client

dev tun

proto tcp

remote openvpnserver.test.com 1194

resolv-retry infinite

nobind

persist-key

persist-tun

ca ca.crt

cert user1.crt

key user1.key

ns-cert-type server

comp-lzo

verb 3

 

blob.png 

 

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

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

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

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

 

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

blob.png 

點擊“連接服務”,會出現如下的彈窗:

blob.png

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

blob.png 

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

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

blob.png 

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

到此為止,openvpn的配置完成,如果需要設定vpnClient訪問特定網段,例如訪問“192.168.3.0,192.168.4.0,192.168.100.0”,則需要在Server的配置文件里增加以下路由推送語句。

blob.png 

push "route 192.168.3.0 255.255.255.0"

push "route 192.168.4.0 255.255.255.0"

push "route 192.168.100.0 255.255.255.0"

重啟openvpn服務即可。

 

此文參考自http://www.ilanni.com/?p=9837,并根據實際環境進行了修改,非常感謝~~爛泥行天下-起于塵土,翱翔于九天!分享技術,永不止步……  http://www.ilanni.com/

原創文章,作者:Tuolei,如若轉載,請注明出處:http://www.www58058.com/15145

(3)
TuoleiTuolei
上一篇 2016-04-20
下一篇 2016-04-21

相關推薦

  • N25第九周作業

    1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現; #!/bin/bash declare -a usersh nologin=0 login=0 usersh=($(cut -d’:’ -f7 /etc/passwd)) ##數組賦值時需…

    Linux干貨 2017-03-04
  • bash特性之命令行展開功能應用示例

                       bash特性之命令行展開功能應用示例 1.創建/tmp的目錄下:a_c,a_d,b_c,b_d 創建命令:mkdir -pv /tmp/{a,…

    Linux干貨 2017-07-09
  • Linux 下的幫助及文件管理

    1、whatis     whatis command 或 man -f command     僅能提供命令基本的介紹。不提具體用法。     基于數據庫的查找,優點:檢索速度快;缺點:缺乏實時性    &n…

    2017-07-15
  • awk多分隔符

    awk的-F參數可以指定新的分隔符,有些時候可能需求指定多個分隔符,比如下面的內容 [root@N1 ~]# netstat -an | grep ESTAB udp 0 0 192.168.1.120:35570 212.47.249.141:123 ESTABLISHED udp 0 0 192.168.1.120:55589 108.59.2.24:1…

    Linux干貨 2017-08-09
  • rpm 程序包管理器的基本使用

    目錄 安裝程序包 卸載 升級 查詢 校驗 來源合法性和完整性驗證 數據庫重建 1     安裝程序包 rpm -ivh /path/to/package_file -v     顯示執行過程的參數。 -h   &nbsp…

    Linux干貨 2016-06-22
  • 路漫漫其修遠兮第十周

    1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情) 從dawning大濕兄那里借來的圖,如下: 啟動過程 (PC架構) POST –> Boot Sequence(BIOS) –> Boot Loader (MBR)–>GRUB—> Kernel(ramdisk) &#821…

    Linux干貨 2017-02-24

評論列表(1條)

  • stanley
    stanley 2016-04-26 09:51

    有markdown的潤色會更上一層樓

欧美性久久久久