中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
OpenVPN 安裝配置資料總結(jié)和整理

一、關于 VPN

VPN(Virtual Private Network),虛擬私有網(wǎng)絡,又名虛擬專用網(wǎng)絡,是一種常用于大中型企業(yè)或團體之間的私有網(wǎng)絡通信方法。VPN 透過公用的網(wǎng)絡架構(例如:互聯(lián)網(wǎng))來傳送內(nèi)聯(lián)網(wǎng)的網(wǎng)絡信息,利用加密隧道協(xié)議(Tunneling Protocol)來達到保密、認證、準確等私有信息的安全要求。如果使用得法,這種技術可用不安全的網(wǎng)絡(例如:互聯(lián)網(wǎng))來傳送可靠、安全的信息,但需要注意的是,信息的加密與否是可以控制的,沒有加密的虛擬私有網(wǎng)絡信息依然有被竊取的危險。1

1.1 具體實現(xiàn)

VPN 有多種實現(xiàn)方式,比較常見的有 PPTP 、L2TP、IPSec VPNSSL VPN 這幾種。PPTPL2TP 都是基于 PPP 協(xié)議的虛擬隧道實現(xiàn),L2TP 可以認為是 PPTP 的升級版。由于設計上的缺陷,使得 PPTPL2TP 無法正常通過 NAT 設備,并且數(shù)據(jù)傳輸存在安全隱患,一般是結(jié)合 IPSec 來實現(xiàn)完整的安全傳輸保障。IPSec 也可以完全獨立實現(xiàn) VPN,但因為配置繁瑣而為人詬病。SSL VPN 是近年興起的一種新的 VPN 實現(xiàn),構建于完全開放的 SSL/TLS 協(xié)議,但由于缺乏統(tǒng)一的標準,不同的廠商實現(xiàn)不同,有種 SSL Web VPN,相比于其他 VPN 實現(xiàn),其優(yōu)點在于客戶端只需有支持 SSL 的網(wǎng)絡瀏覽器即可,無需額外的客戶端。當然,大部分 SSL VPN 需要客戶端支持,比如本文的主角 OpenVPN。2

二、服務器安裝和配置

2.1 基本安裝

OpenVPN 服務器可以架設在多種操作系統(tǒng)平臺上(Linux、Windows NT 系列、OpenBSD、FreeBSD、NetBSD、Mac OS X、Solaris)。

OpenVPN 可以使用 TUN 或者 TAP 接口建立隧道,配置略有不同。TUN 接口創(chuàng)建的是三層路由隧道,建立方便;TAP 是二層網(wǎng)卡橋接隧道,即創(chuàng)建一個以太網(wǎng)橋接,相對復雜。TUN 接口下所有的客戶端處于一個完全獨立的子網(wǎng)內(nèi),與 VPN 服務器所在的子網(wǎng)沒有關系;TAP 接口的好處相較之下則相當明顯,客戶端可以獲得 VPN 服務器所處子網(wǎng)的 IP(即,忽略物理上的區(qū)別,可以完全將客戶端看做是于 VPN 服務器處于同一子網(wǎng)的另一臺機器)。

我們選定 OpenVPN 子網(wǎng)的網(wǎng)段為 10.8.0.0/24。

2.1.1 Linux

Linux 下可以選則 TUN 或 TAP 作為接口,但均需要內(nèi)核支持。TUN接口下,如果需要訪問 Internet,還需要配置 IP 轉(zhuǎn)發(fā),以及建立 DNS 服務。

2.1.1.1 內(nèi)核支持

首先需要檢查內(nèi)核是否支持 TUN/TAP 設備驅(qū)動,運行 modinfo tun,如果輸出 ERROR: modinfo: could not find module tun 則說明內(nèi)核不支持 TUN/TAP 設備,若輸出為如下類似則成功。

filename:       /lib/modules/2.6.34-ARCH/kernel/drivers/net/tun.koalias:          char-major-10-200license:        GPLauthor:         (C) 1999-2004 Max Krasnyansky <maxk@qualcomm.com>description:    Universal TUN/TAP device driverdepends:vermagic:       2.6.34-ARCH SMP preempt mod_unload 686

確認內(nèi)核支持 TUN/TAP 模塊之后,運行 lsmod tun 無輸出則說明 TUN 模塊沒有加載,運行 modprobe tun 加載之(也可以運行 ls /dev/net/tun 通過檢查 /dev/net/tun 文件是否存在來判斷 TUN 模塊是否加載)。

確認加載內(nèi)核 TUN/TAP 模塊之后,安裝 OpenVPN 程序,不同的 Linux 發(fā)行版有其相應的包管理工具可以完成,或者也可以下載源碼編譯安裝,缺點是依賴關系處理比較麻煩(openssl、lzo)。

2.1.1.2 TUN 接口3

如果使用 TUN 接口,不需要額外的操作,配置好 OpenVPN 服務器模式即可。鑒于目前國內(nèi)的網(wǎng)絡現(xiàn)狀,大部分朋友購買了國外的 VPS 架設 VPN 并不僅僅是為了建立一個虛擬專用網(wǎng)絡,最重要的是需要有 Internet 訪問。因此,我們還需要額外的一些步驟來使的我們可以通過 VPN 訪問 Internet。

首先,我們需要開啟系統(tǒng)的 IP 轉(zhuǎn)發(fā)功能,運行命令 sysctl -w net.ipv4.ip_forward=1(也可以編輯 vim /etc/sysctl.conf 文件,修改配置為 net.ipv4.ip_forward = 1),可以使用 sysctl -a | grep forward 來檢查 IP 轉(zhuǎn)發(fā)功能是否打開,輸出結(jié)果應類似如下,所有含有 forward 字段的值應該為 1。

net.ipv4.conf.all.forwarding = 1net.ipv4.conf.all.mc_forwarding = 0net.ipv4.conf.default.forwarding = 1net.ipv4.conf.default.mc_forwarding = 0net.ipv4.conf.lo.forwarding = 1net.ipv4.conf.lo.mc_forwarding = 0net.ipv4.conf.eth0.forwarding = 1net.ipv4.conf.eth0.mc_forwarding = 0

接著,使用 iptables 建立路由轉(zhuǎn)發(fā)規(guī)則,

Bash:

# DEVICE 應該為 OpenVPN 監(jiān)聽的本地地址 LOCAL_IP_ADDRESS 所屬的網(wǎng)卡,一般為 eth0(在 OpenVZ 的 VPS,一般為 venet0)。iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o DEVICE -j SNAT --to-source LOCAL_IP_ADDRESS

或者,使用如下命令,不需要配置關注本地 IP 地址,

Bash:

# DEVICE 應該為 OpenVPN 監(jiān)聽的本地地址所屬的網(wǎng)卡,一般為 eth0(在 OpenVZ 的 VPS,一般為 venet0)。iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o DEVICE -j MASQUERADE

最后,使用 /etc/init.d/iptables save 保存當前規(guī)則。

提示:Linux 下可以使用 ifconfig -a 查看本地的網(wǎng)絡信息。

2.1.1.3 TAP 接口

如果使用 TAP 接口,需要首先建立相應橋接界面。在建立橋接界面之前,先確保系統(tǒng)有 bridge-tuils 安裝。

(假設 tap0 為 tap 設備,br0 為橋接設備,eth0 為當前以太網(wǎng)卡)。

  • 橋接界面的建立:

    Bash:

    openvpn --mktun --dev tap0 #為 tap 設備建立路由隧道brctl addbr br0 #建立橋接設備brctl addif br0 eth0 #添加 eth 設備到網(wǎng)橋brctl addif br0 tap0 #添加 tap 設備到網(wǎng)橋ifconfig tap0 0.0.0.0 promisc up #設置 tap 設備為混雜模式ifconfig eth0 0.0.0.0 promisc up #設置 eth 設備為混雜模式ifconfig br0 ETH_IP netmask ETH_NETMASK broadcast ETH_BROADCAST #為 br0 設置原來以太網(wǎng)卡的網(wǎng)絡參數(shù)
  • 橋接界面的移除:

    Bash:

    ifconfig br0 downbrctl delbr br0openvpn --rmtun --dev tap0

每次系統(tǒng)重新啟動,都需要重新建立相關設備,最好以 shell 腳本形式開機自動建立。另外,如果有多個 tap 設備,也可以考慮用 shell 腳本來簡化這一工作。4

2.1.1.4 域名解析

為了避免出現(xiàn)應為 DNS 污染而導致域名解析失敗的問題,除了在 OpenVPN 服務端配置文件添加 “push dhcp-option DNS nameserver” 指令外,還可以考慮在服務器上建立自己的域名服務。這需要安裝 bind 軟件包,并運行 /etc/init.d/named start,同時,我們同樣需要在 OpenVPN 服務端配置文件添加 “push dhcp-option DNS 10.8.0.1″ 指令。

2.1.2 Windows

OpenVPN 在 Windows 下的安裝比較簡單,有安裝程序可以下載。在 Windows 下不存在像 Linux 那么多的隧道接口選擇,只能使用 tap 橋接方式。另外,Windows 2000 及之前的版本均不支持 tap 設備,所以只能在 Windows XP 及其后續(xù)版本上安裝和配置 OpenVPN 服務器,但不影響客戶端的使用。

Windows 下的 tap 設備有兩種方式實現(xiàn)互聯(lián)網(wǎng)訪問,一種是以太網(wǎng)卡橋接,另外一種是以太網(wǎng)卡共享 tap 設備上網(wǎng)。

  1. 網(wǎng)卡橋接5
    1. 控制面板 -> 網(wǎng)絡連接
    2. 重命名 OpenVPN 安裝時已經(jīng)建立的 tap 虛擬網(wǎng)卡為 OpenVPN-Tap(可以訪問 OpenVPN 的開始菜單項,使用 OpenVPN 提供的工具建立或刪除 tap 設備)
    3. 同時選擇以太網(wǎng)卡設備和 OpenVPN-Tap 設備,選擇右鍵菜單“橋接”命令,等待命令完成,產(chǎn)生一個新的橋接設備
    4. 重命名新的橋接設備為 OpenVPN-Bridge,選擇右鍵菜單“屬性”命令,為其配置原來以太網(wǎng)卡的網(wǎng)絡參數(shù)
  2. 共享上網(wǎng)

    選擇右鍵菜單“屬性”命令,高級選項卡,啟用 “Internet 共享連接”特性并選擇需要共享的設備為 OpenVPN 建立的 tap 設備。

2.2 認證方式

OpenVPN 支持多種認證方式,常用的有基于共享密鑰的證書認證和用戶名密碼認證。

2.2.1 證書認證6
2.2.1.1 創(chuàng)建 CA 證書以及服務器證書
  1. 設置基本信息

    首先,需要設置 CA 證書所需要的一些基本信息,這些信息會被包含在生成的證書文件中。您需要編輯 OpenVPN 安裝路徑下的 easy-rsa 目錄里的 vars(Linux 下) 或 vars.bat.sample(Windows 下) 文件,根據(jù)實際情況修改如下字段的值。

    KEY_ORG="Fort-Funston" # 組織KEY_CITY="SanFrancisco" # 城市KEY_COUNTRY="US" # 國家KEY_PROVINCE="CA" # 省份KEY_EMAIL="me@myhost.mydomain" # 郵件地址
  2. 創(chuàng)建 CA 證書

    接著,開始生成相應的 ca 證書、服務器證書以及 dh1024.pem 文件。在生成 CA 和客戶端證書的過程中,基本保持默認的設置即可, Common Name 可以設置為當前的主機名或者域名,也可以是 OpenVPN-CA。

    • Linux:

      Bash:

      cd /usr/share/openvpn/easy-rsasource varschmod +x clean-all./clean-allchmod +x build-ca./build-cachmod +x build-dh./build-dh
    • Windows:

      Bash:

      cd "C:\Program Files\OpenVPN\easy-rsa"init-configvarsclean-allbuild-cabuild-dh

    命令完成后,我們會得到 ca.crt、ca.key、dh1024.pem 等文件。其中,ca.key 的安全非常重要,OpenVPN 并不需要這個文件,所以可以存放在其他比較安全的地方,否則,OpenVPN 的通信將不再安全。

  3. 創(chuàng)建服務器證書

    Common Name 必須被設置為 server。

    • Linux:

      Bash:

      chmod +x build-key-server./build-key-server server
    • Windows:

      Bash:

      build-key-server server

    命令完成后,我們會得到 server.crt、server.csr、server.key 等文件。

  4. 小結(jié)

    我們需要把所有生成的這些文件(ca.crt、ca.key、dh1024.pem、server.crt、server.csr、 server.key)放置到 OpenVPN 的配置目錄中,或者修改配置文件中相應路徑,使 OpenVPN 能夠找到它們。ca.key 可以不放在配置文件目錄中而單獨存放在安全的地方,OpenVPN 程序運行并不需要它。

2.2.1.2 添加客戶端證書

接下來,我們需要為客戶端頒發(fā)證書,這樣他們就能通過認證而使用 OpenVPN。為客戶端生成證書時,我們只需要使用相同的 vas 配置即可。切記,不要再使用 clean-all 命令,否則,所有之前生成的 CA 證書和服務器證書都會隨這 keys 目錄一并刪除。一般來說,每個客戶端其基本信息均不相同,所以在生成客戶端證書時應該根據(jù)實際情況填寫相應的證書屬性,除了 Common Name 必須唯一之外其他的屬性可以相同。

  • Linux:

    Bash:

    cd /usr/share/openvpn/easy-rsasource varschmod +x build-key./build-key client
  • Windows:

    Bash:

    cd "C:\Program Files\OpenVPN\easy-rsa"varsbuild-key client

命令完成后,會生成 cleint.crt、client.csr、client.key 等文件,我們需要將它們連同 CA 證書 ca.crt 一起交給客戶端。

2.2.1.3 吊銷客戶端證書7

當我們需要取消某個客戶端的 OpenVPN 使用權限時,我們只需要吊銷該客戶端的證書即可。

切記,"Common Name" 是 OpenVPN 用來區(qū)別不同客戶端的關鍵,所以在建立證書時,必須使用有意義其唯一的字串。
  • Linux:

    Bash:

    cd /usr/share/openvpn/easy-rsasource varschmod +x revoke-full./revoke-full client
  • Windows:

    Bash:

    cd "C:\Program Files\OpenVPN\easy-rsa"varsrevoke-full client

這條命令執(zhí)行完成之后, 會在 keys 目錄下面, 生成一個 crl.pem 文件,這個文件中包含了吊銷證書的名單。成功注銷某個證書之后,可以打開 keys/index.txt 文件,可以看到被注銷的證書前面,已標記為R.

最后,我們需要修改服務端的配置文件,使被吊銷的證書失效。

在服務端的配置文件 server.conf 中,加入這樣一行:

crl-verify crl.pem

如果 server.conf 文件和 crl.pem 沒有在同一目錄下面,則 crl.pem 應該寫絕對路徑,例如:

crl-verify /usr/share/openvpn/easy-rsa/keys/crl.pem
2.2.1.4 小結(jié)

除此之外,還會生成 01.pem 02.pem 之類的文件以及 index.txt,它記錄了當前 RSA 工具所生成的證書的歷史信息。

2.2.2 用戶名/密碼8

OpenVPN 也支持使用用戶名/密碼進行認證。雖然證書認證相對安全,但為每個客戶端生成證書比較麻煩,同時客戶端的配置和很不方便,不符合用戶的使用習慣,相比之 下,用戶名/密碼的方式更符合目前用戶的使用習慣,并且可以將客戶端和 CA 證書綁定打包,省去客戶端用戶的配置麻煩,確實有不小吸引力。OpenVPN 支持這些額外的認證方式的關鍵在于配置文件中 auth-user-pass-verify、client-cert-not-requiredusername-as-common-name、auth-user-pass這些指令以及 OpenVPN 的 plugin 機制。

2.2.2.1 文本文件9

首先,下載 http://www.openvpn.se/files/other/checkpsw.sh,然后修改服務端配置文件,添加如下指令:

auth-user-pass-verify /etc/openvpn/scripts/checkpsw.sh via-envclient-cert-not-requiredusername-as-common-name

接著,建立 /etc/openvpn/psw-file 文件,作為用戶名密碼的儲存文件,每行一個 OpenVPN 賬戶(首先是用戶名,然后是空格或者 TAB,最后是明文的密碼)。

最后,在客戶端配置文件中添加一行 auth-user-pass,并刪除和客戶端證書相關的指令。

這樣,雖然可以實現(xiàn)用戶名和密碼的訪問,并且存儲數(shù)據(jù)到文本文件,但所用 checkpsw.sh 畢竟是一個樣例,很多安全性的問題并沒有考慮,比如密碼明文存貯等。如果熟悉 shell、perl、python 任何一種腳本語言的話,完全可以完善相關認證存儲的細節(jié),增強安全性。

2.2.2.2 PAM_MYSQL10

OpenVPN 服務器需要安裝 pam 程序和 pam_mysql 庫。

  1. 建立數(shù)據(jù)庫

    保存以下代碼為 openvpn.mysql 文件

    SQL:

    # 創(chuàng)建 openvpn 用戶,對 openvpn 這個 database 有所有操作權限,密碼為 openvpn# 若 active 不為 1,無權使用 VPNCREATE DATABASE openvpn;GRANT ALL ON vpn.* TO openvpn@localhost IDENTIFIED BY 'openvpn';FLUSH PRIVILEGES;USE openvpn;CREATE TABLE user (    name char(20) NOT NULL,    password char(128) default NULL,    active int(10) NOT NULL DEFAULT 1,    PRIMARY KEY (name));

    接著,運行命令 mysql -uroot -pPASSWORD < openvpn.mysql 完成 MySQL 相關配置。

    最后,使用命令 mysql -uroot -pPASSWORD 登錄 MySQL 數(shù)據(jù)庫,運行 INSERT INTO user (name,password) VALUES (‘test’,password(‘test’)) 增加一個 OpenVPN 用戶,用戶名為 test,密碼 test,用于測試。

  2. 配置 pam_mysql 模塊

    創(chuàng)建/etc/pam.d/openvpn文件,文件內(nèi)容如下:

    auth sufficient pam_mysql.so user=openvpn passwd=openvpn host=localhost db=openvpn table=user usercolumn=name passwdcolumn=password where=active=1 sqllog=0 crypt=2account required pam_mysql.so user=openvpn passwd=openvpn host=localhost db=openvpn table=user usercolumn=name passwdcolumn=password where=active=1 sqllog=0 crypt=2

    關于 crypt 參數(shù)的意義如下:

    crypt(0) -- Used to decide to use MySQL's PASSWORD() function or crypt()0 = No encryption. Passwords in database in plaintext. NOT recommended!1 = Use crypt2 = Use MySQL PASSWORD() function3 = Use MySQL PASSWORD() function with MD5
  3. 編輯 OpenVPN 服務端配置文件,添加如下內(nèi)容
    plugin ./openvpn-auth-pam.so openvpn # 說明使用的插件,openvpn 為插件的參數(shù),使用 pam 的 servicesnameclient-cert-not-required # 不請求客戶的 CA 證書,使用 User/Pass 驗證username-as-common-name # 使用客戶提供的 UserName 作為 Common Name
  4. 配置成功,進行測試
2.2.2.3 LDAP

LDAP 認證實際上也有二種,一種用 openvpn-auth-ldap 即直接通過 LDAP 驗證,另一種與 pam-mysql 認證相似,使用 pam-ldap ,通過 PAM ,然后再找 LDAP 驗證。

關于這部分,以后再補充,目前沒有實際經(jīng)驗。

2.3 配置文件

由于使用的網(wǎng)絡接口不同,服務器端的配置文件也不盡相同,首先給出一份比較詳細的配置文件說明。11

#################################################        ################################################ Sample OpenVPN 2.0 config file for            #        # OpenVPN 2.0 多客戶端服務器配置文件樣例# multi-client server.                          #        ##                                               #        ## This file is for the server side              #        # 這個文件是 多客戶端 <--> 單服務器 的 OpenVPN# of a many-clients <-> one-server              #        # 服務器配置文件。# OpenVPN configuration.                        #        ##                                               #        ## OpenVPN also supports                         #        # OpenVPN 也支持 單客戶端 <--> 單服務器 的配置(# single-machine <-> single-machine             #        # 查看 OpenVPN 網(wǎng)站上的配置文件樣例頁面獲取更多# configurations (See the Examples page         #        # 信息)。# on the web site for more info).               #        ##                                               #        ## This config should work on Windows            #        # 這個配置文件可工作于 Windows 或者 Linux/BSD 系# or Linux/BSD systems.  Remember on            #        # 統(tǒng)之上。注意,Windows 系統(tǒng)上需要用引號包裹路徑# Windows to quote pathnames and use            #        # 名并且使用雙反斜杠。比如:# double backslashes, e.g.:                     #        ## "C:\\Program Files\\OpenVPN\\config\\foo.key" #        # "C:\\Program Files\\OpenVPN\\config\\foo.key"#                                               #        ## Comments are preceded with '#' or ';'         #        #  注釋使用 '#' 或者 ';' 開頭。#################################################        ################################################ Which TCP/UDP port should OpenVPN listen on?           # OpenVPN 應該監(jiān)聽哪個 TCP/UDP 端口?# If you want to run multiple OpenVPN instances          # 如果需要在同一機器上運行# on the same machine, use a different port              # 多個 OpenVPN 進程,為每# number for each one.  You will need to                 # 個進程使用不同的端口。# open up this port on your firewall.                    # 你需要在防火墻上打開這些端口。port 1194# "dev tun" will create a routed IP tunnel,              # "dev tun" 將會建立一個路由 IP 隧道,# "dev tap" will create an ethernet tunnel.              # "dev tap" 將會建立一個以太網(wǎng)卡隧道。# Use "dev tap0" if you are ethernet bridging            # 如果已有一個預先建立的 tap0 虛擬網(wǎng)卡,且# and have precreated a tap0 virtual interface           # 已橋接到以太網(wǎng)卡,請使用 "dev tap0"。# and bridged it with your ethernet interface.           ## If you want to control access policies                 # 如果你想控制 VPN 的訪問策略,你需要# over the VPN, you must create firewall                 # 為 TUN/TAP 接口建立相應的防火墻規(guī)則。# rules for the the TUN/TAP interface.                   ## On non-Windows systems, you can give                   # 在非 Windows 系統(tǒng)上,你可以附加# an explicit unit number, such as tun0.                 # 一個單一的號碼,比如 tun0。# On Windows, use "dev-node" for this.                   # 在 Windows 系統(tǒng)上,使用 "dev-node"。# On most systems, the VPN will not function             # 在大多數(shù)系統(tǒng)上,VPN 將不會工作# unless you partially or fully disable                  # 直到你完全或者部分地為 TUN/TAP# the firewall for the TUN/TAP interface.                # 接口的關閉了防火墻。;dev tapdev tun# Windows needs the TAP-Win32 adapter name               # 在 Windows 上如果存在多個 TAP 適配器# from the Network Connections panel if you              # ,需要指明所用網(wǎng)絡連接控制面板上的# have more than one.  On XP SP2 or higher,              # TAP-Win32 適配器名。# you may need to selectively disable the                # 在 Windows XP SP2 或更高系統(tǒng)上,需要為該# Windows firewall for the TAP adapter.                  # TAP 適配器選擇性的關閉 Windows 防火墻。# Non-Windows systems usually don't need this.           # 非 Windows 系統(tǒng)通常不需要此設置。;dev-node MyTap# TCP or UDP server?                                     # TCP 還是 UDP 服務器?;proto tcpproto udp# Which local IP address should OpenVPN                  # OpenVPN 應該監(jiān)聽哪個本地 IP 地址?# listen on? (optional)                                  # (可選);local a.b.c.d# SSL/TLS root certificate (ca), certificate             # SSL/TLS 根證書 (ca), 證書 (cert)# (cert), and private key (key).  Each client            # 和私鑰 (key) 每個客戶端和服務器必# and the server must have their own cert and            # 須有他們自己的 cert 和 key。服務器# key file.  The server and all clients will             # 和所有的客戶端使用相同的 ca 文件。# use the same ca file.                                  ##                                                        ## See the "easy-rsa" directory for a series              # 查看 "easy-rsa" 目錄可以獲得一系# of scripts for generating RSA certificates             # 列的用來生成 RSA 證書和私鑰的腳本。# and private keys.  Remember to use                     # 切記為服務器和每個客戶端生成唯一# a unique Common Name for the server                    # 的 Common Name。# and each of the client certificates.                   ##                                                        ## Any X509 key management system can be used.            # 可以使用任何 X509 私鑰管理系統(tǒng)。# OpenVPN can also use a PKCS #12 formatted key file     # OpenVPN 同樣可以使用一個 PKCS #12 格式的私鑰文件# (see "pkcs12" directive in man page).                  # (查看 MAN 也的 "pkcs12" 配置段)。ca ca.crtkey server.key # This file should be kept secret         # 這個文件需要保密cert server.crt# Diffie hellman parameters.                             # Diffie hellman 參數(shù)。# Generate your own with:                                # 使用如下命令生成:#   openssl dhparam -out dh1024.pem 1024                 #   openssl dhparam -out dh1024.pem 1024# Substitute 2048 for 1024 if you are using              # 如果你使用 2048 bit 的私鑰,用 2048# 2048 bit keys.                                         # 替換 1024dh dh1024.pem# Configure server mode and supply a VPN subnet          # 配置服務器模式并且為 OpenVPN 提供一個# for OpenVPN to draw client addresses from.             # VPN 子網(wǎng)來從中獲取客戶端的地址。# The server will take 10.8.0.1 for itself,              # 服務器自己使用 10.8.0.1,其余則分配給# the rest will be made available to clients.            # 客戶端。# Each client will be able to reach the server           # 每個客戶端都可以用 10.8.0.1 訪問服務器。# on 10.8.0.1. Comment this line out if you are          # 如果你使用以太網(wǎng)卡橋接,注釋此行。查看 MAN# ethernet bridging. See the man page for more info.     # 手冊頁獲取更多信息。server 10.8.0.0 255.255.255.0# Maintain a record of client <-> virtual IP address     # 維護一個客戶端 <--> 虛擬 IP 地址之間關聯(lián)# associations in this file.  If OpenVPN goes down or    # 的記錄文件。# is restarted, reconnecting clients can be assigned     ## the same virtual IP address from the pool that was     # 如果 OpenVPN 關閉或者重啟,重新連接的客戶# previously assigned.                                   # 端能夠從地址池獲取與以前一樣的虛擬 IP。ifconfig-pool-persist ipp.txt# Configure server mode for ethernet bridging.           # 配置服務器的以太網(wǎng)卡橋接模式。# You must first use your OS's bridging capability       # 你必須首先使用你的系統(tǒng)的橋接特性為 TAP 接口# to bridge the TAP interface with the ethernet          # 建立起到以太網(wǎng)卡 NIC 接口的橋接界面。# NIC interface.  Then you must manually set the         # 接著,你必須手動為橋接界面配置 IP/netmask,# IP/netmask on the bridge interface, here we            # 這里假定為 10.8.0.4/255.255.255.0。# assume 10.8.0.4/255.255.255.0.  Finally we             # 最后,我們必須在這個子網(wǎng)中為連接的# must set aside an IP range in this subnet              # 客戶端設置一個可分配的 IP 段# (start=10.8.0.50 end=10.8.0.100) to allocate           # (開始 = 10.8.0.50 結(jié)束 = 10.8.0.100)# to connecting clients.  Leave this line commented      ## out unless you are ethernet bridging.                  # 保持這行注釋,除非你使用以太網(wǎng)卡橋接。;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100# Push routes to the client to allow it                  # 推送路由到客戶端來允許它訪問服# to reach other private subnets behind                  # 務器之后的其他私有子網(wǎng)。# the server.  Remember that these                       # 切記這些私有子網(wǎng)也需要知道到# private subnets will also need                         # OpenVPN 客戶端的地址池的路# to know to route the OpenVPN client                    # 由(10.8.0.0/255.255.255.0)# address pool (10.8.0.0/255.255.255.0)                  # 來回訪 OpenVPN# back to the OpenVPN server.                            # 服務器。;push "route 192.168.10.0 255.255.255.0";push "route 192.168.20.0 255.255.255.0"# To assign specific IP addresses to specific            # 要為特定的客戶端分配特定的 IP 地址# clients or if a connecting client has a private        # 或者如果一個連接中的客戶端其后的私# subnet behind it that should also have VPN access,     # 有子網(wǎng)也要有 VPN 訪問權,可使用子目# use the subdirectory "ccd" for client-specific         # 錄 ccd 來存放客戶端的特別配置文件# configuration files (see man page for more info).      # (查看 MAN 也來獲取更多信息)。# EXAMPLE: Suppose the client                            # 示例:# having the certificate common name "Thelonious"        # 假設客戶端的認證名稱為 "Thelonious",# also has a small subnet behind his connecting          # 并且有一個小的子網(wǎng)位于他的連接機器之后,# machine, such as 192.168.40.128/255.255.255.248.       # 比如 192.168.40.128/255.255.255.248。# First, uncomment out these lines:                      # 首先,取消下面幾行的注釋;client-config-dir ccd;route 192.168.40.128 255.255.255.248# Then create a file ccd/Thelonious with this line:      # 接著,建立一個文件 ccd/Thelonious,添加這行:#   iroute 192.168.40.128 255.255.255.248                #   iroute 192.168.40.128 255.255.255.248# This will allow Thelonious' private subnet to          # 這會允許 Thelonious' 的私有子網(wǎng)訪問VPN。# access the VPN.  This example will only work           # 這個示例僅僅在使用路由隧道而不是網(wǎng)卡橋接時起# if you are routing, not bridging, i.e. you are         # 作用。# using "dev tun" and "server" directives.               # 比如,你使用的是 "dev tun" 和 "server" 指令。# EXAMPLE: Suppose you want to give                      # 示例:假如你想給 Thelonious 一個固定的 VPN# Thelonious a fixed VPN IP address of 10.9.0.1.         # IP 地址 10.9.0.1。# First uncomment out these lines:                       # 首先,取消下面幾行的注釋;client-config-dir ccd;route 10.9.0.0 255.255.255.252# Then add this line to ccd/Thelonious:                  # 接著,添加如下行到 ccd/THelonious:#   ifconfig-push 10.9.0.1 10.9.0.2                      #   ifconfig-push 10.9.0.1 10.9.0.2# Suppose that you want to enable different              # 假如你想為不同的客戶端組啟用不同的防火# firewall access policies for different groups          # 墻訪問控制策略,有兩種方式:# of clients.  There are two methods:                    ## (1) Run multiple OpenVPN daemons, one for each         # (1) 運行多個OpenVPN守護進程, 每個對應#     group, and firewall the TUN/TAP interface          # 不同的組,對每個組的 TUN/TAP 接口應用#     for each group/daemon appropriately.               # 防火墻。# (2) (Advanced) Create a script to dynamically          # (2) (高級)創(chuàng)建一個動態(tài)腳本使防火墻對#     modify the firewall in response to access          # 接入的不同客戶端執(zhí)行不同的策略。查看#     from different clients.  See man                   # MAN 手冊頁獲取更多關于 learn-address#     page for more info on learn-address script.        # 腳本的信息。;learn-address ./script# If enabled, this directive will configure              # 如果開啟,這個指令會配置所有的客戶端將# all clients to redirect their default                  # 它們的默認網(wǎng)關指向 VPN,導致所有的 IP# network gateway through the VPN, causing               # 流量比如網(wǎng)絡瀏覽和 DNS 查詢等全部通過# all IP traffic such as web browsing and                # VPN。# and DNS lookups to go through the VPN                  ## (The OpenVPN server machine may need to NAT            # (OpenVPN 服務器需要 NAT 它的 TUN/TAP# the TUN/TAP interface to the internet in               # 接口到互聯(lián)網(wǎng)以使其正常工作)# order for this to work properly).                      ## CAVEAT: May break client's network config if           # 警告:如果客戶端的本地 DHCP 服務器數(shù)據(jù)# client's local DHCP server packets get routed          # 通過隧道路由,可能破壞客戶端的網(wǎng)絡配置。# through the tunnel.  Solution: make sure               ## client's local DHCP server is reachable via            # 解決:確??蛻舳说谋镜?DNCP 服務器# a more specific route than the default route           # 可以通過一個更特殊的路由而不是默認# of 0.0.0.0/0.0.0.0.                                    # 的路由 0.0.0.0/0.0.0.0 來訪問。;push "redirect-gateway"# Certain Windows-specific network settings              # 確定的 Windows 專用網(wǎng)絡配置可以被推送到客# can be pushed to clients, such as DNS                  # 戶端,比如 DNS 或者 WINS 服務器地址。# or WINS server addresses.  CAVEAT:                     # 警告:# http://openvpn.net/faq.html#dhcpcaveats                # http://openvpn.net/faq.html#dhcpcaveats;push "dhcp-option DNS 10.8.0.1";push "dhcp-option WINS 10.8.0.1"# Uncomment this directive to allow different            # 取消對這個指令的注釋來允許不同的客戶端可以# clients to be able to "see" each other.                # “看到”對方。# By default, clients will only see the server.          # 默認地,客戶端只能 “看到” 服務器。# To force clients to only see the server, you           # 為了強制客戶端只能看到服務器,你需要一# will also need to appropriate  firewall the            # 個適當?shù)姆阑饓肀Wo服務器的 TUN/TAP# server's TUN/TAP interface.                            # 接口。client-to-client# Uncomment this directive if multiple clients           # 如果多個客戶端以相同的證書/私鑰或者# might connect with the same certificate/key            # Common Name 連接,取消對這個指令的# files or common names.  This is recommended            # 注釋。推薦用作測試目的。# only for testing purposes.  For production use,        # 對于正式應用,每個客戶端應該擁有自己# each client should have its own certificate/key        # 的證書和/私鑰對。# pair.                                                  ## IF YOU HAVE NOT GENERATED INDIVIDUAL                   # 如果你沒有為每個客戶端生成各自的# CERTIFICATE/KEY PAIRS FOR EACH CLIENT,                 # 證書/私鑰對,每對擁有自己的的# EACH HAVING ITS OWN UNIQUE "COMMON NAME",              # “Common Name”時,取消注釋# UNCOMMENT THIS LINE OUT.                               # 該行。;duplicate-cn# The keepalive directive causes ping-like               # keepalive 指令可以使類似 ping 的# messages to be sent back and forth over                # 信息被發(fā)送并保持連接以便每端知道什# the link so that each side knows when                  # 么時候另一端的連接丟失。# the other side has gone down.                          ## Ping every 10 seconds, assume that remote              ## peer is down if no ping received during                # 每 10 秒 ping 一次,假如遠端在# a 120 second time period.                              # 120 秒內(nèi)沒有回應則認為連接丟失。keepalive 10 120# For extra security beyond that provided                # 如果需要除 SSL/TLS 提供之外的額外安全,# by SSL/TLS, create an "HMAC firewall"                  # 建立一個 “HMAC 防火墻” 來幫助屏蔽 DoS# to help block DoS attacks and UDP port flooding.       # 攻擊和 UDP 端口洪水。#                                                        ## Generate with:                                         # 用如下命令生成:#   openvpn --genkey --secret ta.key                     #   openvpn --genkey --secret ta.key#                                                        ## The server and each client must have                   # 服務器和每個客戶端必須有一# a copy of this key.                                    # 份該密鑰的拷貝。# The second parameter should be '0'                     # 第二個參數(shù)服務器應該為 0,# on the server and '1' on the clients.                  # 而客戶端應該為 1。;tls-auth ta.key 0 # This file is secret# Select a cryptographic cipher.                         # 選擇一種加密算法。# This config item must be copied to                     # 這個配置條目同樣必須被復制到客# the client config file as well.                        # 戶端的配置文件中。;cipher BF-CBC        # Blowfish (default);cipher AES-128-CBC   # AES;cipher DES-EDE3-CBC  # Triple-DES# Enable compression on the VPN link.                    # 對 VPN 連接啟用數(shù)據(jù)壓縮。如果你在# If you enable it here, you must also                   # 這里啟用 ,你也必須在客戶端的配置文# enable it in the client config file.                   # 件中啟用。comp-lzo# The maximum number of concurrently connected           # 我們所允許的最大同時連接的客戶端# clients we want to allow.                              # 數(shù)目。;max-clients 100# It's a good idea to reduce the OpenVPN                 # 初始化后降級 OpenVPN 進程的權限# daemon's privileges after initialization.              # 是個不錯的主意。#                                                        ## You can uncomment this out on                          # 你可以在非 Windows 系統(tǒng)上取消該行# non-Windows systems.                                   # 注釋。user nobodygroup nobody# The persist options will try to avoid                  # 這個 persisit 選項可以避免在重啟# accessing certain resources on restart                 # 時訪問那些由于權限降級而不再可用# that may no longer be accessible because               # 的資源。# of the privilege downgrade.persist-keypersist-tun# Output a short status file showing                     # 輸出簡短的文件來顯示當前的連接狀態(tài)# current connections, truncated                         # ,每一分鐘重寫或刪節(jié)一次。# and rewritten every minute.                            #status openvpn-status.log# By default, log messages will go to the syslog (or     # 默認的,日志信息會輸出到 syslog (或者在# on Windows, if running as a service, they will go to   # Windows 上,如果運行一個服務,它們會輸出# the "\Program Files\OpenVPN\log" directory).           # 到 "\Program Files\OpenVPN\log" 目錄)。# Use log or log-append to override this default.        # 使用 log 或者 log-append 來覆寫這個默認設置。# "log" will truncate the log file on OpenVPN startup,   # "log" 會在每次 OpenVPN 啟動時刪節(jié)日志文件,# while "log-append" will append to it.  Use one         # 而 "log-append" 則會附加在其后。使用其一即可。;log /var/log/openvpn.log;log-append openvpn.log# Set the appropriate level of log                       # 設置適當?shù)娜罩疚募敿毤墑e。# file verbosity.                                        ##                                                        ## 0 is silent, except for fatal errors                   # 0 是靜默的,嚴重錯誤除外# 4 is reasonable for general usage                      # 4 是合理的,通常使用即可# 5 and 6 can help to debug connection problems          # 5 和 6 可以幫助調(diào)試連接問題# 9 is extremely verbose                                 # 9 是極端詳細的verb 3# Silence repeating messages.  At most 20                # 靜默重復消息。相同消息# sequential messages of the same message                # 策略的 20 個連續(xù)消息# category will be output to the log.                    # 會被輸出到日志。;mute 20

關于服務器配置文件說明,還有以下版本可以參考:

  1. OpenVPN服務器端配置文件祥解
  2. Linux下OpenVPN的建設詳細教程
  3. 使用OpenVPN搭建Linux下的VPN服務

最新 OpenVPN 2.1.1 版本服務器配置文件與以上版本的差異如下,可以看出,新的版本已經(jīng)部分的解決了推送客戶端配置參數(shù)可能導致的破壞客戶端網(wǎng)絡配置的問題。

diff server.conf server-2.1.1.conf,server.conf 為 OpenVPN Howto 上的配置文件樣例,server-2.1.1.conf 為 OpenVPN 最新版本提供的配置文件樣例。

116a117,128> # Configure server mode for ethernet bridging                # 為使用 DHCP-proxy 的以太網(wǎng)卡橋接配置服務> # using a DHCP-proxy, where clients talk                     # 器模式,客戶端可以同服務器端的 DHCP 服務> # to the OpenVPN server-side DHCP server                     # 器交流獲取 IP 地址和 DNS 服務器的地址。> # to receive their IP address allocation                     #> # and DNS server addresses.  You must first use              # 你必須首先使用系統(tǒng)的橋接功能來橋接 TAP 設> # your OS's bridging capability to bridge the TAP            # 備到以太網(wǎng)卡 NIC 設備上。> # interface with the ethernet NIC interface.                 #> # Note: this mode only works on clients (such as             # 注意:這個模式僅僅工作與那些客戶端(比如> # Windows), where the client-side TAP adapter is             # Winodws)的 TAP 適配器被連接到一個 DHCP> # bound to a DHCP client.                                    # 客戶端的情況。> ;server-bridge>173,181c185,187< # the TUN/TAP interface to the internet in                   # TUN/TAP 界面到互聯(lián)網(wǎng)以使其正常工作。< # order for this to work properly).                          #< # CAVEAT: May break client's network config if               # 警告:如果客戶端的本地 DHCP 服務器數(shù)據(jù)< # client's local DHCP server packets get routed              # 包經(jīng)過隧道路由,可能會波壞客戶端的的網(wǎng)< # through the tunnel.  Solution: make sure                   # 絡配置。< # client's local DHCP server is reachable via                # 解決:確??蛻舳说谋镜?DHCP 服務器通過< # a more specific route than the default route               # 一個更特殊的路由而不是默認的 0.0.0.0/0.0.0.0< # of 0.0.0.0/0.0.0.0.                                        # 是可達的。< ;push "redirect-gateway"---> # or bridge the TUN/TAP interface to the internet            # 或者橋接 TUN/TAP 設備到互聯(lián)網(wǎng)以使其正常> # in order for this to work properly).                       # 工作。> ;push "redirect-gateway def1 bypass-dhcp"187,188c193,196< ;push "dhcp-option DNS 10.8.0.1"< ;push "dhcp-option WINS 10.8.0.1"---> # The addresses below refer to the public                    # 下面的地址指向由 opendns.com 提供的> # DNS servers provided by opendns.com.                       # 公共 DNS 服務器。> ;push "dhcp-option DNS 208.67.222.222"> ;push "dhcp-option DNS 208.67.220.220"

服務器采用不同的網(wǎng)絡接口,其配置文件也不盡相同,下面給出不同環(huán)境下的配置文件區(qū)別:

  1. Linux 采用 tun 接口

    Bash:

    dev tun # 還可以使用具體的 tun 設備的名字,如 tun0port 1194proto udp # 如果需要經(jīng)過 HTTP proxy 代理 VPN 連接,則必須使用 TCP 協(xié)議local OPENVPN_SERVER_IPserver 10.8.0.0 255.255.255.0
  2. Linux 采用 tap 橋接

    Bash:

    dev tap # 還可以使用具體的 tap 設備的名字,如 tap0port 1194proto udp #如果需要經(jīng)過 HTTP proxy 代理 VPN 連接,則必須使用 TCP 協(xié)議local OPENVPN_SERVER_IPserver 10.8.0.0 255.255.255.0
  3. Windows 采用 tap 共享上網(wǎng)

    Bash:

    dev tap;dev-node OpenVPN-Tap # Windows 系統(tǒng)下如果有多個 TAP 設備,必須配置這個字段,提供所用 tap 設備的名字port 1194proto udp #如果需要經(jīng)過 HTTP proxy 代理 VPN 連接,則必須使用 TCP 協(xié)議local OPENVPN_SERVER_IPserver 10.8.0.0 255.255.255.0
  4. Windows 采用 tap 橋接上網(wǎng)

    Bash:

    dev tap;dev-node OpenVPN-Tap # Windows 系統(tǒng)下如果有多個 TAP 設備,必須配置這個字段,提供所用 tap 設備的名字port 1194proto udp #如果需要經(jīng)過 HTTP proxy 代理 VPN 連接,則必須使用 TCP 協(xié)議local OPENVPN_SERVER_IP;serve-bridge # 如果服務器直接通過 DHCP 獲得地址,那么這里直接使用 server-bridge 即可server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100 # 服務器所在子網(wǎng)可供提供給客戶端的 IP 地址范圍

服務器配置文件的其余部分基本不變,只是注意日志文件路徑在 Linux 和 Winodws 下的區(qū)別。

# 安全認證參數(shù) #dh dh1024.pemca ca.crtkey server.key  # 需要注意這個文件的安全cert server.crt# 網(wǎng)絡配置參數(shù) #push "dhcp-option DNS 208.67.222.222"push "dhcp-option DNS 208.67.220.220"push "redirect-gateway def1 bypass-dhcp"# 其他配置參數(shù) #comp-lzopersist-keypersist-tunkeepalive 10 120# 日志配置參數(shù) #verb 3status        /var/log/openvpn/status.log # Windows 下應該為 "C:\\Program Files\\OPENVPN\\log\\status.log"log-append    /var/log/openvpn/openvpn.log # Windows 下應該我 "C:\\Program Files\\OPENVPN\\log\\openvpn.log"

三、客戶端的安裝和配置

3.1 基本安裝

OpenVPN 是點對點的隧道協(xié)議實現(xiàn),在網(wǎng)絡中,服務端和客戶端的地位是對等的,軟件自身不分服務端還是客戶端,關鍵取決于配置文件。如果配置文件是客戶端的配置文 件,則以客戶端模式運行,反之亦然。因此,不論什么系統(tǒng)平臺,安裝好 OpenVPN 之后,均可以使其已客戶端的模式運行,只需要準備好 ca.crt、client.crt、client.key 等證書和密鑰以及相應的客戶端配置文件 client.conf(client.ovpn # Winodws下),并將配置文件放在相應的配置文件目錄內(nèi),并確保配置文件中相應證書密鑰的路徑正確(注意區(qū)分 Unix-like 系統(tǒng)和 Windows 系統(tǒng)在路徑上的區(qū)別),即可啟動 OpenVPN 作為客戶端。

下面簡要介紹下相應平臺其他的 OpenVPN 客戶端實現(xiàn),這些實現(xiàn)的共同特點是擁有比較直觀的圖形配置界面。

3.1.1 Mac

Apple 的 Mac 電腦上可以使用 Tunnelblick 作為 OpenVPN 的客戶端。安裝完成后,放入當前客戶端的 ca.crt,client.crt,client.key 到配置文件夾(\Users\你登陸的用戶名\Library\Application Support\Tunnelblick\Configurations)。首次運行需要編輯配置文件,作相應的修改后,點擊右上角狀態(tài)欄隧道圖標即可連 接。12

3.1.2 Linux

Linux 的 Gnome 桌面下的 NetworkManager 網(wǎng)絡管理套件提供了一個 OpenVPN 的插件,以直觀方便的界面提供對 OpenVPN 管理配置,一般的發(fā)行版都有提供這個軟件包,請使用相應的包管理工具進行安裝。

3.1.3 Windows13

Winodws 下可以使用 OpenVPN GUI for Windows 作為客戶端,在 http://openvpn.se/ 下載并安裝 OpenVPN GUI for Windows 后,放入當前客戶端的 ca.crt,client.crt,client.key 到其安裝目錄下的 config 文件夾,并編輯或生成配置文件 client.ovpn,做相應的修改,點擊狀態(tài)欄圖標連接即可。14需要注意的是,OpenVPN GUI for Windows 是對應于相應的 OpenVPN 版本的,http://openvpn.se/ 目前只提供對 2.0.9 的支持,如果你要連接的 OpenVPN 服務器使用的是其后的版本(比如 2010-8-15 發(fā)布的 2.1.2),可能有些新的配置參數(shù)無法支持(比如 dhcp-bypass 參數(shù)),會出現(xiàn)連接失敗或者連接后無法訪問網(wǎng)絡的問題。不過,OpenVPN 在 2.1.2 的 Windows 安裝程序中已經(jīng)集成了 OpenVPN GUI for Windows ,直接在 http://openvpn.net/ 下載即可。

3.2 配置文件15

##############################################                 ############################################ Sample client-side OpenVPN 2.0 config file #                 # OpenVPN 2.0 連接多客戶端服務器的客戶端配置# for connecting to multi-client server.     #                 # 文件樣例。#                                            #                 ## This configuration can be used by multiple #                 # 這個配置文件可以被多個客戶端使用,但是每個# clients, however each client should have   #                 # 客戶端應該有自己的證書和私鑰文件。# its own cert and key files.                #                 ##                                            #                 ## On Windows, you might want to rename this  #                 # 在 Windows 上,你可能需要重命名這個文件使它# file so it has a .ovpn extension           #                 # 以 .ovpn 后綴。##############################################                 ############################################ Specify that we are a client and that we                     # 指明我們是客戶端,我們需要# will be pulling certain config file directives               # 從服務器拉取特定的配置文件# from the server.                                             # 指令。client# Use the same setting as you are using on                     # 使用和你服務器相同的設置。# the server.                                                  ## On most systems, the VPN will not function                   # 在大多數(shù)系統(tǒng)上,VPN 將不會工# unless you partially or fully disable                        # 作,直到你完全或者部分地為# the firewall for the TUN/TAP interface.                      # TUN/TAP 接口的關閉了防火墻。;dev tapdev tun# Windows needs the TAP-Win32 adapter name                     # 如果你有不止一個 TAP-Win32# from the Network Connections panel                           # 適配器, Windwos 需要指明它在# if you have more than one.  On XP SP2,                       # 網(wǎng)絡連接控制面板中的名字。# you may need to disable the firewall                         # 在 XP SP2 上,你需要為 TAP 適# for the TAP adapter.                                         # 配器關閉防火墻。;dev-node MyTap# Are we connecting to a TCP or                                # 我們使用的是一個 TCP 或者# UDP server?  Use the same setting as                         # UCP 服務器?使用和服務器相# on the server.                                               # 同的設置。;proto tcpproto udp# The hostname/IP and port of the server.                      # 服務器的主機名或者 IP 以及端口。# You can have multiple remote entries                         # 你可以有多個遠端入口來平衡服務# to load balance between the servers.                         # 器之間的負載。remote my-server-1 1194;remote my-server-2 1194# Choose a random host from the remote                         # 從遠端服務器負載平衡列表中隨機# list for load-balancing.  Otherwise                          # 選擇一個主機。# try hosts in the order specified.                            # 否則,按照順序嘗試主機。;remote-random# Keep trying indefinitely to resolve the                      # 不停的嘗試解析 OpenVPN 服務器的主# host name of the OpenVPN server.  Very useful                # 機名。對于那些不是永久連接到互聯(lián)網(wǎng)# on machines which are not permanently connected              # 的機器比較有用,比如筆記本電腦。# to the internet such as laptops.resolv-retry infinite# Most clients don't need to bind to                           # 大多數(shù)客戶端不需要綁定一個特# a specific local port number.                                # 定的本地端口號。nobind# Downgrade privileges after initialization (non-Windows only) # 初始化后降級權限(僅支持非 Windows 系統(tǒng));user nobody;group nobody# Try to preserve some state across restarts.                  # 嘗試保持一些狀態(tài)通過重新啟動。persist-keypersist-tun# If you are connecting through an                             # 如果你是通過一個 HTTP 代理來連接# HTTP proxy to reach the actual OpenVPN                       # 實際的 OpenVPN 服務器,在這里添# server, put the proxy server/IP and                          # 加代理服務器的 IP 和端口號。# port number here.  See the man page                          ## if your proxy server requires                                # 如果你需要驗證,請查看 MAN 手冊# authentication.                                              # 頁。;http-proxy-retry # retry on connection failures               # 連接失敗后重新嘗試;http-proxy [proxy server] [proxy port #]# Wireless networks often produce a lot                        # 無線網(wǎng)絡總是產(chǎn)生很多重復的數(shù)# of duplicate packets.  Set this flag                         # 據(jù)包。設置這個標記來忽略重復# to silence duplicate packet warnings.                        # 數(shù)據(jù)包警告。;mute-replay-warnings# SSL/TLS parms.                                               # SSL/TLS 參數(shù)。# See the server config file for more                          # 查看服務器的配置文件獲取更多的描述。# description.  It's best to use                               # 最好為每個客戶端使用獨立的 .crt/.key# a separate .crt/.key file pair                               # 文件對。# for each client.  A single ca                                # 一個單獨的 ca 文件可以用于所有的# file can be used for all clients.                            # 客戶端。ca ca.crtkey client.keycert client.crt# Verify server certificate by checking                        # 通過檢查證書有無值為 "server" 的# that the certicate has the nsCertType                        # nsCertType  字段來確認服務器證書。# field set to "server".  This is an                           # 這是一個非常重要的預防措施來防止在# important precaution to protect against                      # http://openvpn.net/howto.html#mitm# a potential attack discussed here:                           # 討論過的潛在的攻擊。#  http://openvpn.net/howto.html#mitm                          ##                                                              # 要使用這個特性,你必須通過設定# To use this feature, you will need to generate               # nsCertType 字段為 "server" 來# your server certificates with the nsCertType                 # 生成你服務器的證書。# field set to "server".  The build-key-server                 # 可以使用 easy-rsa 目錄下的# script in the easy-rsa folder will do this.                  # build-key-server 腳本來完成。;ns-cert-type server# If a tls-auth key is used on the server                      # 如果服務器使用 tls-auth 密鑰,請選擇# Select a cryptographic cipher.                               # 一個加密密碼。# If the cipher option is used on the server                   # 如果服務器使用了密碼選項,你也必須在# then you must also specify it here.                          # 這里指定。;cipher x# Enable compression on the VPN link.                          # 對 VPN 連接啟用壓縮。# Don't enable this unless it is also                          # 除非服務器配置文件也啟用了這個指令,# enabled in the server config file.                           # 否則不要啟用。comp-lzo# Set log file verbosity.                                      # 設置日志文件詳盡級別。verb 3# Silence repeating messages                                   # 靜默重復信息。;mute 20

關于客戶端配置文件,還有以下版本可以參考:

  1. Linux下OpenVPN的建設詳細教程
  2. 使用OpenVPN搭建Linux下的VPN服務

下面是一份與前面的服務器配置文件相對應的客戶端配置文件,客戶端的配置文件比較簡單,只需要根據(jù)服務器的配置調(diào)整 dev、proto 等參數(shù)即可。

clientdev tun # 根據(jù)服務器配置決定,如果服務器采用 tap 設備,則為 tap;dev-node OpenVPN-Tap # Windows 系統(tǒng)下如果有多個 TAP 設備,必須配置這個字段,提供所用 TAP 設備的名字proto udp # 與服務器保持一致remote OPENVPN_SERVER_IP 1194ca ca.crtkey client.keycert client.crtcomp-lzopersist-keypersist-tun

四、安全相關

如果需要除 SSL/TLS 提供之外的額外安全,建立一個 “HMAC 防火墻” 來幫助屏蔽 DoS 攻擊和 UDP 端口洪水,使用 openvpn --genkey --secret keys/ta.key 來生成 ta.key 文件,服務器和每個客戶端必須有一份該密鑰的拷貝。

同時,修改服務器配置文件,添加 tls-auth ta.key 0;修改客戶端配置文件,添加 tls-auth ta.key 1。注意,第二個參數(shù)服務端和客戶端應該不同,比如服務器若為 0,則客戶端應該為 1。

四、流量控制

若果我們需要隊 OpenVPN 客戶端的的流量控制,我們可以使用 TC 這個程序。

這是一個示例,假如 OpenVPN 客戶端通過 OpenVPN GUI 軟件連接到服務器,然后通過 NAT 連接到外網(wǎng)。其中,eth0 為服務器以太網(wǎng)卡接口 (66.77.88.99),tap0 為服務器虛擬網(wǎng)卡接口 (10.8.0.1),VPN 客戶端 IP 為10.8.0.2。

  • 啟動NAT

    Bash:

    iptables -t nat -A PREROUTING -d 66.77.88.99 -j DNAT --to 10.8.0.2iptables -t nat -A POSTROUTING -s 10.8.0.2 -o eth0 -j SNAT --to-source 66.77.88.99
  • 限制VPN客戶下載速度為 256Kbit/s

    Bash:

    tc qdisc  add dev tap0 root handle 1: htb default 10tc class  add dev tap0 parent 1: classid 1:1 htb rate 256kbit  burst 10ktc filter add dev tap0 parent 1: protocol ip prio 16 u32 match ip dst 10.8.0.2 flowid 1:1
  • 限制VPN客戶上載速度為 128Kbit/s

    Bash:

    tc qdisc  add dev eth0 root handle 2: htb default 10tc class  add dev eth0 parent 2: classid 2:1 htb rate 128kbit burst 10ktc filter add dev eth0 parent 2: protocol ip prio 16 handle 1 fw flowid 2:1iptables -t mangle -A PREROUTING -i tap0 -s 10.8.0.2 -j MARK --set-mark 1iptables -t mangle -A PREROUTING -i tap0 -s 10.8.0.2 -j RETURN

五、插件機制

OpenVPN 提供跟進一步的插件機制來滿足不同用戶的需求。通過插件機制,可以在程序邏輯的一些關鍵點調(diào)用腳本或者插件來完成不同的任務。關于這部分,目前我了解也不是很多,下面是兩篇比較深刻的相關的源代碼分析,可能會有所幫助。

  1. OpenVPN 中虛擬 IP 地址的分配
  2. OpenVPN 中虛擬 IP 地址的自定義分配

六、參考資料

  1. OpenVPN
  2. OpenVPN How to
  3. OpenVPN 常見問題解答(FAQ)
  4. 深入 OpenVPN 的配置
  5. 使用 OpenVPN 搭建 Linux 下的 VPN 服務
  6. 使用 OpenVPN 構建安全 VPN [OpenVPN + CA]
  7. OpenVZ 安裝 Openvpn 配置 VPN -Burstnet vps CentOS
  8. Linux 下 OpenVPN 安裝和 Windows OpenVPN GUI 安裝筆記
  9. Windows 下利用 OpenVPN 搭建 VPN 服務器
  10. Windows 下使用 CA 驗證的 OpenVPN Server 的配置方法
  11. 中國科學技術大學網(wǎng)絡OpenVPN系統(tǒng)

  1. 參考中文維基百科VPN?
  2. 參考 PPTPL2TPIPSec VPNSSL VPN 的進化(遠端網(wǎng)路接取服務),PPTPL2TP和IPsec的區(qū)別及優(yōu)缺點?
  3. 參考 OpenVZ VPS 安裝配置 OpenVPN?
  4. 參考 Ethernet Bridging 提供的腳本,或者 Implementing OpenVPN 這篇文章中更加易用的腳本 ?
  5. 參考 OpenVPN Bridging with Windows HOWTO 提供的視頻和配置教程、OpenVPN-橋方式安裝利用 OpenVPN 建立橋接 VPN?
  6. 參考 RSA Key Management ?
  7. 參考 如何在 Linux OpenVPN 服務器吊銷 (revoke) 客戶端證書?
  8. 參考 OpenVPN 的驗證方式,一個對于 OpenVPN 其他認證方式的總結(jié),以及OpenVPN How to — Using alternative authentication methods。 ?
  9. 查看 OpenVPN 郵件列表的 [Openvpn-Users] clear text file authentication script 主題,雖然可以把用戶名/密碼保存到文件的 OpenVPN 程序–[下載]也提供了一種方案,但是建立在修改源代碼的基礎上的,不推薦。 ?
  10. OpenVPN 使用 User/Pass 驗證登錄、OpenVPN 以用戶名、密碼方式登錄、OpenVPN 在 Windows 下使用 User/Pass 驗證?
  11. 翻譯自 OpenVPN HOWTO — Sample OpenVPN 2.0 configuration files — sample-config-files/server.conf?
  12. 詳細安裝配置過程參見 Mac 上用 OpenVPN 教程?
  13. [原]Windows 作為 OpenVPN 的客戶端、[原]OpenVPN 在 Win7 下的使用Using OpenVPN on Windows Vista?
  14. 參考小輝的 Linux 下 OpenVPN 安裝和 Windows OpenVPN GUI 安裝筆記 一文的“OpenVPN GUI For Windows 客戶端安裝過程”部分 ?
  15. 翻譯自 OpenVPN HOWTO — Sample OpenVPN 2.0 configuration files — sample-config-files/client.conf?
本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
centos 7部署openvpn easy-rsa 3.0部署方法
Openvpn 加載了 tun 模塊,仍然提示Cannot open TUN/TAP dev /dev/net/tun
在家遠程控制(遠程桌面)到公司的電腦
CentOS平臺OpenVPN(UDP53端口)架設 | 小米の網(wǎng)志
Windows NT/2000 Server Logon using Fineid Smart Cards
SSTP Remote Access Step-by-Step Guide: Deployment
更多類似文章 >>
生活服務
熱點新聞
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服