一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

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

 Dead n Gone 2011-12-25

一、關(guān)于 VPN

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

1.1 具體實(shí)現(xiàn)

VPN 有多種實(shí)現(xiàn)方式,比較常見的有 PPTP 、L2TP、IPSec VPNSSL VPN 這幾種。PPTPL2TP 都是基于 PPP 協(xié)議的虛擬隧道實(shí)現(xiàn),L2TP 可以認(rèn)為是 PPTP 的升級版。由于設(shè)計上的缺陷,使得 PPTPL2TP 無法正常通過 NAT 設(shè)備,并且數(shù)據(jù)傳輸存在安全隱患,一般是結(jié)合 IPSec 來實(shí)現(xiàn)完整的安全傳輸保障。IPSec 也可以完全獨(dú)立實(shí)現(xiàn) VPN,但因?yàn)榕渲梅爆嵍鵀槿嗽嵅 ?ABBR title="Secure Sockets Layer/SSL 安全套接層">SSL VPN 是近年興起的一種新的 VPN 實(shí)現(xiàn),構(gòu)建于完全開放的 SSL/TLS 協(xié)議,但由于缺乏統(tǒng)一的標(biāo)準(zhǔn),不同的廠商實(shí)現(xiàn)不同,有種 SSL Web VPN,相比于其他 VPN 實(shí)現(xiàn),其優(yōu)點(diǎn)在于客戶端只需有支持 SSL 的網(wǎng)絡(luò)瀏覽器即可,無需額外的客戶端。當(dāng)然,大部分 SSL VPN 需要客戶端支持,比如本文的主角 OpenVPN。2

二、服務(wù)器安裝和配置

2.1 基本安裝

OpenVPN 服務(wù)器可以架設(shè)在多種操作系統(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)橋接,相對復(fù)雜。TUN 接口下所有的客戶端處于一個完全獨(dú)立的子網(wǎng)內(nèi),與 VPN 服務(wù)器所在的子網(wǎng)沒有關(guān)系;TAP 接口的好處相較之下則相當(dāng)明顯,客戶端可以獲得 VPN 服務(wù)器所處子網(wǎng)的 IP(即,忽略物理上的區(qū)別,可以完全將客戶端看做是于 VPN 服務(wù)器處于同一子網(wǎng)的另一臺機(jī)器)。

我們選定 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 服務(wù)。

2.1.1.1 內(nèi)核支持

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

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

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

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

2.1.1.2 TUN 接口3

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

首先,我們需要開啟系統(tǒng)的 IP 轉(zhuǎn)發(fā)功能,運(yùn)行命令 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é)果應(yīng)類似如下,所有含有 forward 字段的值應(yīng)該為 1。

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

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

Bash:

# DEVICE 應(yīng)該為 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

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

Bash:

# DEVICE 應(yīng)該為 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 保存當(dāng)前規(guī)則。

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

2.1.1.3 TAP 接口

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

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

  • 橋接界面的建立:

    Bash:

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

    Bash:

    ifconfig br0 down
    brctl delbr br0
    openvpn --rmtun --dev tap0
    

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

2.1.1.4 域名解析

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

2.1.2 Windows

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

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

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

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

2.2 認(rèn)證方式

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

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

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

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

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

    • Linux:

      Bash:

      cd /usr/share/openvpn/easy-rsa
      source vars
      chmod +x clean-all
      ./clean-all
      chmod +x build-ca
      ./build-ca
      chmod +x build-dh
      ./build-dh
      
    • Windows:

      Bash:

      cd "C:\Program Files\OpenVPN\easy-rsa"
      init-config
      vars
      clean-all
      build-ca
      build-dh
      

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

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

    Common Name 必須被設(shè)置為 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 的配置目錄中,或者修改配置文件中相應(yīng)路徑,使 OpenVPN 能夠找到它們。ca.key 可以不放在配置文件目錄中而單獨(dú)存放在安全的地方,OpenVPN 程序運(yùn)行并不需要它。

2.2.1.2 添加客戶端證書

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

  • Linux:

    Bash:

    cd /usr/share/openvpn/easy-rsa
    source vars
    chmod +x build-key
    ./build-key client
    
  • Windows:

    Bash:

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

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

2.2.1.3 吊銷客戶端證書7

當(dāng)我們需要取消某個客戶端的 OpenVPN 使用權(quán)限時,我們只需要吊銷該客戶端的證書即可。

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

    Bash:

    cd /usr/share/openvpn/easy-rsa
    source vars
    chmod +x revoke-full
    ./revoke-full client
    
  • Windows:

    Bash:

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

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

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

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

crl-verify crl.pem

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

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

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

2.2.2 用戶名/密碼8

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

2.2.2.1 文本文件9

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

auth-user-pass-verify /etc/openvpn/scripts/checkpsw.sh via-env
client-cert-not-required
username-as-common-name

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

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

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

2.2.2.2 PAM_MYSQL10

OpenVPN 服務(wù)器需要安裝 pam 程序和 pam_mysql 庫。

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

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

    SQL:

    # 創(chuàng)建 openvpn 用戶,對 openvpn 這個 database 有所有操作權(quán)限,密碼為 openvpn
    # 若 active 不為 1,無權(quán)使用 VPN
    CREATE 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)
    );
    

    接著,運(yùn)行命令 mysql -uroot -pPASSWORD < openvpn.mysql 完成 MySQL 相關(guān)配置。

    最后,使用命令 mysql -uroot -pPASSWORD 登錄 MySQL 數(shù)據(jù)庫,運(yùn)行 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=2
    account 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
    

    關(guān)于 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 crypt
    2 = Use MySQL PASSWORD() function
    3 = Use MySQL PASSWORD() function with MD5
    
  3. 編輯 OpenVPN 服務(wù)端配置文件,添加如下內(nèi)容
    plugin ./openvpn-auth-pam.so openvpn # 說明使用的插件,openvpn 為插件的參數(shù),使用 pam 的 servicesname
    client-cert-not-required # 不請求客戶的 CA 證書,使用 User/Pass 驗(yàn)證
    username-as-common-name # 使用客戶提供的 UserName 作為 Common Name
    
  4. 配置成功,進(jìn)行測試
2.2.2.3 LDAP

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

關(guān)于這部分,以后再補(bǔ)充,目前沒有實(shí)際經(jīng)驗(yàn)。

2.3 配置文件

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

#################################################        ###############################################
# Sample OpenVPN 2.0 config file for            #        # OpenVPN 2.0 多客戶端服務(wù)器配置文件樣例
# multi-client server.                          #        #
#                                               #        #
# This file is for the server side              #        # 這個文件是 多客戶端 <--> 單服務(wù)器 的 OpenVPN
# of a many-clients <-> one-server              #        # 服務(wù)器配置文件。
# OpenVPN configuration.                        #        #
#                                               #        #
# OpenVPN also supports                         #        # OpenVPN 也支持 單客戶端 <--> 單服務(wù)器 的配置(
# 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 應(yīng)該監(jiān)聽哪個 TCP/UDP 端口?
# If you want to run multiple OpenVPN instances          # 如果需要在同一機(jī)器上運(yùn)行
# on the same machine, use a different port              # 多個 OpenVPN 進(jìn)程,為每
# number for each one.  You will need to                 # 個進(jìn)程使用不同的端口。
# 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            # 如果已有一個預(yù)先建立的 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 接口建立相應(yīng)的防火墻規(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.                # 接口的關(guān)閉了防火墻。
;dev tap
dev tun

# Windows needs the TAP-Win32 adapter name               # 在 Windows 上如果存在多個 TAP 適配器
# from the Network Connections panel if you              # ,需要指明所用網(wǎng)絡(luò)連接控制面板上的
# 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 適配器選擇性的關(guān)閉 Windows 防火墻。
# Non-Windows systems usually don't need this.           # 非 Windows 系統(tǒng)通常不需要此設(shè)置。
;dev-node MyTap

# TCP or UDP server?                                     # TCP 還是 UDP 服務(wù)器?
;proto tcp
proto udp

# Which local IP address should OpenVPN                  # OpenVPN 應(yīng)該監(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) 每個客戶端和服務(wù)器必
# and the server must have their own cert and            # 須有他們自己的 cert 和 key。服務(wù)器
# 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                     # 切記為服務(wù)器和每個客戶端生成唯一
# 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.crt
key 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.                                         # 替換 1024
dh dh1024.pem

# Configure server mode and supply a VPN subnet          # 配置服務(wù)器模式并且為 OpenVPN 提供一個
# for OpenVPN to draw client addresses from.             # VPN 子網(wǎng)來從中獲取客戶端的地址。
# The server will take 10.8.0.1 for itself,              # 服務(wù)器自己使用 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 訪問服務(wù)器。
# 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     # 維護(hù)一個客戶端 <--> 虛擬 IP 地址之間關(guān)聯(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 關(guān)閉或者重啟,重新連接的客戶
# previously assigned.                                   # 端能夠從地址池獲取與以前一樣的虛擬 IP。
ifconfig-pool-persist ipp.txt

# Configure server mode for ethernet bridging.           # 配置服務(wù)器的以太網(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              # 客戶端設(shè)置一個可分配的 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ù)器之后的其他私有子網(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.                            # 服務(wù)器。
;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 訪問權(quán),可使用子目
# 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"        # 假設(shè)客戶端的認(rèn)證名稱為 "Thelonious",
# also has a small subnet behind his connecting          # 并且有一個小的子網(wǎng)位于他的連接機(jī)器之后,
# 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) 運(yùn)行多個OpenVPN守護(hù)進(jìn)程, 每個對應(yīng)
#     group, and firewall the TUN/TAP interface          # 不同的組,對每個組的 TUN/TAP 接口應(yīng)用
#     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 手冊頁獲取更多關(guān)于 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                  # 它們的默認(rèn)網(wǎng)關(guān)指向 VPN,導(dǎo)致所有的 IP
# network gateway through the VPN, causing               # 流量比如網(wǎng)絡(luò)瀏覽和 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 服務(wù)器需要 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 服務(wù)器數(shù)據(jù)
# client's local DHCP server packets get routed          # 通過隧道路由,可能破壞客戶端的網(wǎng)絡(luò)配置。
# through the tunnel.  Solution: make sure               #
# client's local DHCP server is reachable via            # 解決:確??蛻舳说谋镜?DNCP 服務(wù)器
# a more specific route than the default route           # 可以通過一個更特殊的路由而不是默認(rèn)
# 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)絡(luò)配置可以被推送到客
# can be pushed to clients, such as DNS                  # 戶端,比如 DNS 或者 WINS 服務(wù)器地址。
# or WINS server addresses.  CAVEAT:                     # 警告:
# http:///faq.html#dhcpcaveats                # http:///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.          # 默認(rèn)地,客戶端只能 “看到” 服務(wù)器。
# To force clients to only see the server, you           # 為了強(qiáng)制客戶端只能看到服務(wù)器,你需要一
# will also need to appropriate  firewall the            # 個適當(dāng)?shù)姆阑饓肀Wo(hù)服務(wù)器的 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,        # 對于正式應(yīng)用,每個客戶端應(yīng)該擁有自己
# 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 一次,假如遠(yuǎn)端在
# a 120 second time period.                              # 120 秒內(nèi)沒有回應(yīng)則認(rèn)為連接丟失。
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                   # 服務(wù)器和每個客戶端必須有一
# a copy of this key.                                    # 份該密鑰的拷貝。
# The second parameter should be '0'                     # 第二個參數(shù)服務(wù)器應(yīng)該為 0,
# on the server and '1' on the clients.                  # 而客戶端應(yīng)該為 1。
;tls-auth ta.key 0 # This file is secret

# Select a cryptographic cipher.                         # 選擇一種加密算法。
# This config item must be copied to                     # 這個配置條目同樣必須被復(fù)制到客
# 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 進(jìn)程的權(quán)限
# daemon's privileges after initialization.              # 是個不錯的主意。
#                                                        #
# You can uncomment this out on                          # 你可以在非 Windows 系統(tǒng)上取消該行
# non-Windows systems.                                   # 注釋。
user nobody
group nobody

# The persist options will try to avoid                  # 這個 persisit 選項可以避免在重啟
# accessing certain resources on restart                 # 時訪問那些由于權(quán)限降級而不再可用
# that may no longer be accessible because               # 的資源。
# of the privilege downgrade.
persist-key
persist-tun

# Output a short status file showing                     # 輸出簡短的文件來顯示當(dāng)前的連接狀態(tài)
# current connections, truncated                         # ,每一分鐘重寫或刪節(jié)一次。
# and rewritten every minute.                            #
status openvpn-status.log

# By default, log messages will go to the syslog (or     # 默認(rèn)的,日志信息會輸出到 syslog (或者在
# on Windows, if running as a service, they will go to   # Windows 上,如果運(yùn)行一個服務(wù),它們會輸出
# the "\Program Files\OpenVPN\log" directory).           # 到 "\Program Files\OpenVPN\log" 目錄)。
# Use log or log-append to override this default.        # 使用 log 或者 log-append 來覆寫這個默認(rèn)設(shè)置。
# "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è)置適當(dāng)?shù)娜罩疚募敿?xì)級別。
# file verbosity.                                        #
#                                                        #
# 0 is silent, except for fatal errors                   # 0 是靜默的,嚴(yán)重錯誤除外
# 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 是極端詳細(xì)的
verb 3

# Silence repeating messages.  At most 20                # 靜默重復(fù)消息。相同消息
# sequential messages of the same message                # 策略的 20 個連續(xù)消息
# category will be output to the log.                    # 會被輸出到日志。
;mute 20

關(guān)于服務(wù)器配置文件說明,還有以下版本可以參考:

  1. OpenVPN服務(wù)器端配置文件祥解
  2. Linux下OpenVPN的建設(shè)詳細(xì)教程
  3. 使用OpenVPN搭建Linux下的VPN服務(wù)

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

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)卡橋接配置服務(wù)
> # using a DHCP-proxy, where clients talk                     # 器模式,客戶端可以同服務(wù)器端的 DHCP 服務(wù)
> # to the OpenVPN server-side DHCP server                     # 器交流獲取 IP 地址和 DNS 服務(wù)器的地址。
> # to receive their IP address allocation                     #
> # and DNS server addresses.  You must first use              # 你必須首先使用系統(tǒng)的橋接功能來橋接 TAP 設(shè)
> # your OS's bridging capability to bridge the TAP            # 備到以太網(wǎng)卡 NIC 設(shè)備上。
> # 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 服務(wù)器數(shù)據(jù)
< # client's local DHCP server packets get routed              # 包經(jīng)過隧道路由,可能會波壞客戶端的的網(wǎng)
< # through the tunnel.  Solution: make sure                   # 絡(luò)配置。
< # client's local DHCP server is reachable via                # 解決:確??蛻舳说谋镜?DHCP 服務(wù)器通過
< # a more specific route than the default route               # 一個更特殊的路由而不是默認(rèn)的 0.0.0.0/0.0.0.0
< # of 0.0.0.0/0.0.0.0.                                        # 是可達(dá)的。
< ;push "redirect-gateway"
---
> # or bridge the TUN/TAP interface to the internet            # 或者橋接 TUN/TAP 設(shè)備到互聯(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 服務(wù)器。
> ;push "dhcp-option DNS 208.67.222.222"
> ;push "dhcp-option DNS 208.67.220.220"

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

  1. Linux 采用 tun 接口

    Bash:

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

    Bash:

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

    Bash:

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

    Bash:

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

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

# 安全認(rèn)證參數(shù) #
dh dh1024.pem
ca ca.crt
key server.key  # 需要注意這個文件的安全
cert server.crt

# 網(wǎng)絡(luò)配置參數(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-lzo
persist-key
persist-tun
keepalive 10 120

# 日志配置參數(shù) #
verb 3
status        /var/log/openvpn/status.log # Windows 下應(yīng)該為 "C:\\Program Files\\OPENVPN\\log\\status.log"
log-append    /var/log/openvpn/openvpn.log # Windows 下應(yīng)該我 "C:\\Program Files\\OPENVPN\\log\\openvpn.log"

三、客戶端的安裝和配置

3.1 基本安裝

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

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

3.1.1 Mac

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

3.1.2 Linux

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

3.1.3 Windows13

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

3.2 配置文件15

##############################################                 ###########################################
# Sample client-side OpenVPN 2.0 config file #                 # OpenVPN 2.0 連接多客戶端服務(wù)器的客戶端配置
# for connecting to multi-client server.     #                 # 文件樣例。
#                                            #                 #
# This configuration can be used by multiple #                 # 這個配置文件可以被多個客戶端使用,但是每個
# clients, however each client should have   #                 # 客戶端應(yīng)該有自己的證書和私鑰文件。
# 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               # 從服務(wù)器拉取特定的配置文件
# from the server.                                             # 指令。
client

# Use the same setting as you are using on                     # 使用和你服務(wù)器相同的設(shè)置。
# 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 接口的關(guān)閉了防火墻。
;dev tap
dev 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)絡(luò)連接控制面板中的名字。
# you may need to disable the firewall                         # 在 XP SP2 上,你需要為 TAP 適
# for the TAP adapter.                                         # 配器關(guān)閉防火墻。
;dev-node MyTap

# Are we connecting to a TCP or                                # 我們使用的是一個 TCP 或者
# UDP server?  Use the same setting as                         # UCP 服務(wù)器?使用和服務(wù)器相
# on the server.                                               # 同的設(shè)置。
;proto tcp
proto udp

# The hostname/IP and port of the server.                      # 服務(wù)器的主機(jī)名或者 IP 以及端口。
# You can have multiple remote entries                         # 你可以有多個遠(yuǎn)端入口來平衡服務(wù)
# to load balance between the servers.                         # 器之間的負(fù)載。
remote my-server-1 1194
;remote my-server-2 1194

# Choose a random host from the remote                         # 從遠(yuǎn)端服務(wù)器負(fù)載平衡列表中隨機(jī)
# list for load-balancing.  Otherwise                          # 選擇一個主機(jī)。
# try hosts in the order specified.                            # 否則,按照順序嘗試主機(jī)。
;remote-random

# Keep trying indefinitely to resolve the                      # 不停的嘗試解析 OpenVPN 服務(wù)器的主
# host name of the OpenVPN server.  Very useful                # 機(jī)名。對于那些不是永久連接到互聯(lián)網(wǎng)
# on machines which are not permanently connected              # 的機(jī)器比較有用,比如筆記本電腦。
# 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) # 初始化后降級權(quán)限(僅支持非 Windows 系統(tǒng))
;user nobody
;group nobody

# Try to preserve some state across restarts.                  # 嘗試保持一些狀態(tài)通過重新啟動。
persist-key
persist-tun

# If you are connecting through an                             # 如果你是通過一個 HTTP 代理來連接
# HTTP proxy to reach the actual OpenVPN                       # 實(shí)際的 OpenVPN 服務(wù)器,在這里添
# server, put the proxy server/IP and                          # 加代理服務(wù)器的 IP 和端口號。
# port number here.  See the man page                          #
# if your proxy server requires                                # 如果你需要驗(yàn)證,請查看 MAN 手冊
# authentication.                                              # 頁。
;http-proxy-retry # retry on connection failures               # 連接失敗后重新嘗試
;http-proxy [proxy server] [proxy port #]

# Wireless networks often produce a lot                        # 無線網(wǎng)絡(luò)總是產(chǎn)生很多重復(fù)的數(shù)
# of duplicate packets.  Set this flag                         # 據(jù)包。設(shè)置這個標(biāo)記來忽略重復(fù)
# to silence duplicate packet warnings.                        # 數(shù)據(jù)包警告。
;mute-replay-warnings

# SSL/TLS parms.                                               # SSL/TLS 參數(shù)。
# See the server config file for more                          # 查看服務(wù)器的配置文件獲取更多的描述。
# description.  It's best to use                               # 最好為每個客戶端使用獨(dú)立的 .crt/.key
# a separate .crt/.key file pair                               # 文件對。
# for each client.  A single ca                                # 一個單獨(dú)的 ca 文件可以用于所有的
# file can be used for all clients.                            # 客戶端。
ca ca.crt
key client.key
cert client.crt

# Verify server certificate by checking                        # 通過檢查證書有無值為 "server" 的
# that the certicate has the nsCertType                        # nsCertType  字段來確認(rèn)服務(wù)器證書。
# field set to "server".  This is an                           # 這是一個非常重要的預(yù)防措施來防止在
# important precaution to protect against                      # http:///howto.html#mitm
# a potential attack discussed here:                           # 討論過的潛在的攻擊。
#  http:///howto.html#mitm                          #
#                                                              # 要使用這個特性,你必須通過設(shè)定
# To use this feature, you will need to generate               # nsCertType 字段為 "server" 來
# your server certificates with the nsCertType                 # 生成你服務(wù)器的證書。
# 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                      # 如果服務(wù)器使用 tls-auth 密鑰,請選擇
# Select a cryptographic cipher.                               # 一個加密密碼。
# If the cipher option is used on the server                   # 如果服務(wù)器使用了密碼選項,你也必須在
# then you must also specify it here.                          # 這里指定。
;cipher x

# Enable compression on the VPN link.                          # 對 VPN 連接啟用壓縮。
# Don't enable this unless it is also                          # 除非服務(wù)器配置文件也啟用了這個指令,
# enabled in the server config file.                           # 否則不要啟用。
comp-lzo

# Set log file verbosity.                                      # 設(shè)置日志文件詳盡級別。
verb 3

# Silence repeating messages                                   # 靜默重復(fù)信息。
;mute 20

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

  1. Linux下OpenVPN的建設(shè)詳細(xì)教程
  2. 使用OpenVPN搭建Linux下的VPN服務(wù)

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

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

ca ca.crt
key client.key
cert client.crt

comp-lzo
persist-key
persist-tun

四、安全相關(guān)

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

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

四、流量控制

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

這是一個示例,假如 OpenVPN 客戶端通過 OpenVPN GUI 軟件連接到服務(wù)器,然后通過 NAT 連接到外網(wǎng)。其中,eth0 為服務(wù)器以太網(wǎng)卡接口 (66.77.88.99),tap0 為服務(wù)器虛擬網(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.2
    iptables -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 10
    tc class  add dev tap0 parent 1: classid 1:1 htb rate 256kbit  burst 10k
    tc 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 10
    tc class  add dev eth0 parent 2: classid 2:1 htb rate 128kbit burst 10k
    tc filter add dev eth0 parent 2: protocol ip prio 16 handle 1 fw flowid 2:1
    iptables -t mangle -A PREROUTING -i tap0 -s 10.8.0.2 -j MARK --set-mark 1
    iptables -t mangle -A PREROUTING -i tap0 -s 10.8.0.2 -j RETURN
    

五、插件機(jī)制

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

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

六、參考資料

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

  1. 參考中文維基百科VPN?
  2. 參考 PPTPL2TPIPSec VPNSSL VPN 的進(jìn)化(遠(yuǎn)端網(wǎng)路接取服務(wù)),PPTP、L2TP和IPsec的區(qū)別及優(yōu)缺點(diǎn)?
  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 服務(wù)器吊銷 (revoke) 客戶端證書?
  8. 參考 OpenVPN 的驗(yàn)證方式,一個對于 OpenVPN 其他認(rèn)證方式的總結(jié),以及OpenVPN How to — Using alternative authentication methods。 ?
  9. 查看 OpenVPN 郵件列表的 [Openvpn-Users] clear text file authentication script 主題,雖然可以把用戶名/密碼保存到文件的 OpenVPN 程序–[下載]也提供了一種方案,但是建立在修改源代碼的基礎(chǔ)上的,不推薦。 ?
  10. OpenVPN 使用 User/Pass 驗(yàn)證登錄OpenVPN 以用戶名、密碼方式登錄、OpenVPN 在 Windows 下使用 User/Pass 驗(yàn)證?
  11. 翻譯自 OpenVPN HOWTO — Sample OpenVPN 2.0 configuration files — sample-config-files/server.conf?
  12. 詳細(xì)安裝配置過程參見 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?

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    欧美一区二区三区不卡高清视| 亚洲深夜精品福利一区| 日韩特级黄片免费在线观看| 日本高清一区免费不卡| 欧洲一区二区三区自拍天堂| 亚洲熟女诱惑一区二区| 高清一区二区三区大伊香蕉 | 大香伊蕉欧美一区二区三区| 国产专区亚洲专区久久| 性欧美唯美尤物另类视频| 日木乱偷人妻中文字幕在线| 又色又爽又无遮挡的视频| 91超频在线视频中文字幕| 日韩综合国产欧美一区| 日韩欧美精品一区二区三区| 日韩特级黄色大片在线观看| 亚洲第一视频少妇人妻系列 | 亚洲av一区二区三区精品| 日本加勒比不卡二三四区| 日本熟女中文字幕一区| 狠色婷婷久久一区二区三区| 国产内射一级一片内射高清视频| 国产传媒精品视频一区| 极品熟女一区二区三区| 亚洲在线观看福利视频| 国产小青蛙全集免费看| 初尝人妻少妇中文字幕在线| 欧美日韩一区二区三区色拉拉| 国产亚洲精品岁国产微拍精品| 国产成人av在线免播放观看av | 午夜国产成人福利视频| 国产剧情欧美日韩中文在线| 大尺度激情福利视频在线观看| 免费黄色一区二区三区| 日韩精品综合福利在线观看| 日韩18一区二区三区| 国产亚洲精品一二三区| 色涩一区二区三区四区| 成人午夜视频在线播放| 日本办公室三级在线观看| 亚洲国产香蕉视频在线观看|