1. 程式人生 > >OpenVPN Server端配置檔案詳細說明(轉)

OpenVPN Server端配置檔案詳細說明(轉)

本文將介紹如何配置OpenVPN伺服器端的配置檔案。在Windows系統中,該配置檔案一般叫做server.ovpn;在Linux/BSD系統中,該配置檔案一般叫做server.conf。雖然配置檔名稱不同,但其中的配置內容與配置方法卻是相同的。

本文根據官方提供的server.ovpn示例檔案直接翻譯得出。Windows、Linux、BSD等系統的伺服器端配置檔案均可參考本文。
#################################################
# 針對多客戶端的OpenVPN 2.0 的伺服器端配置檔案示例
#
# 本檔案用於多客戶端<->單伺服器端的OpenVPN伺服器端配置
#
# OpenVPN也支援單機<->單機的配置(更多資訊請檢視網站上的示例頁面)
#
# 該配置支援Windows或者Linux/BSD系統。此外,在Windows上,記得將路徑加上雙引號,
# 並且使用兩個反斜槓,例如:"C:\\Program Files\\OpenVPN\\config\\foo.key"
#
# '#' or ';'開頭的均為註釋內容
#################################################

#OpenVPN應該監聽本機的哪些IP地址?
#該命令是可選的,如果不設定,則預設監聽本機的所有IP地址。
;local a.b.c.d

# OpenVPN應該監聽哪個TCP/UDP埠?
# 如果你想在同一臺計算機上執行多個OpenVPN例項,你可以使用不同的埠號來區分它們。
# 此外,你需要在防火牆上開放這些埠。
port 1194

#OpenVPN使用TCP還是UDP協議?
;proto tcp
proto udp

# 指定OpenVPN建立的通訊隧道型別。
# "dev tun"將會建立一個路由IP隧道,
# "dev tap"將會建立一個乙太網隧道。
#
# 如果你是乙太網橋接模式,並且提前建立了一個名為"tap0"的與乙太網介面進行橋接的虛擬介面,則你可以使用"dev tap0"
#
# 如果你想控制VPN的訪問策略,你必須為TUN/TAP介面建立防火牆規則。
#
# 在非Windows系統中,你可以給出明確的單位編號(unit number),例如"tun0"。
# 在Windows中,你也可以使用"dev-node"。
# 在多數系統中,除非你部分禁用或者完全禁用了TUN/TAP介面的防火牆,否則VPN將不起作用。
;dev tap
dev tun

# 如果你想配置多個隧道,你需要用到網路連接面板中TAP-Win32介面卡的名稱(例如"MyTap")。
# 在XP SP2或更高版本的系統中,你可能需要有選擇地禁用掉針對TAP介面卡的防火牆
# 通常情況下,非Windows系統則不需要該指令。
;dev-node MyTap

# 設定SSL/TLS根證書(ca)、證書(cert)和私鑰(key)。
# 每個客戶端和伺服器端都需要它們各自的證書和私鑰檔案。
# 伺服器端和所有的客戶端都將使用相同的CA證書檔案。
#
# 通過easy-rsa目錄下的一系列指令碼可以生成所需的證書和私鑰。
# 記住,伺服器端和每個客戶端的證書必須使用唯一的Common Name。
#
# 你也可以使用遵循X509標準的任何金鑰管理系統來生成證書和私鑰。
# OpenVPN 也支援使用一個PKCS #12格式的金鑰檔案(詳情檢視站點手冊頁面的"pkcs12"指令)
ca ca.crt
cert server.crt
key server.key  # 該檔案應該保密

# 指定迪菲·赫爾曼引數。
# 你可以使用如下名稱命令生成你的引數:
#   openssl dhparam -out dh1024.pem 1024
# 如果你使用的是2048位金鑰,使用2048替換其中的1024。
dh dh1024.pem

# 設定伺服器端模式,並提供一個VPN子網,以便於從中為客戶端分配IP地址。
# 在此處的示例中,伺服器端自身將佔用10.8.0.1,其他的將提供客戶端使用。
# 如果你使用的是乙太網橋接模式,請註釋掉該行。更多資訊請檢視官方手冊頁面。
server 10.8.0.0 255.255.255.0

# 指定用於記錄客戶端和虛擬IP地址的關聯關係的檔案。
# 當重啟OpenVPN時,再次連線的客戶端將分配到與上一次分配相同的虛擬IP地址
ifconfig-pool-persist ipp.txt

# 該指令僅針對乙太網橋接模式。
# 首先,你必須使用作業系統的橋接能力將乙太網網絡卡介面和TAP介面進行橋接。
# 然後,你需要手動設定橋接介面的IP地址、子網掩碼;
# 在這裡,我們假設為10.8.0.4和255.255.255.0。
# 最後,我們必須指定子網的一個IP範圍(例如從10.8.0.50開始,到10.8.0.100結束),以便於分配給連線的客戶端。
# 如果你不是乙太網橋接模式,直接註釋掉這行指令即可。
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100

# 該指令僅針對使用DHCP代理的乙太網橋接模式,
# 此時客戶端將請求伺服器端的DHCP伺服器,從而獲得分配給它的IP地址和DNS伺服器地址。
#
# 在此之前,你也需要先將乙太網網絡卡介面和TAP介面進行橋接。
# 注意:該指令僅用於OpenVPN客戶端,並且該客戶端的TAP介面卡需要繫結到一個DHCP客戶端上。
;server-bridge

# 推送路由資訊到客戶端,以允許客戶端能夠連線到伺服器背後的其他私有子網。
# (簡而言之,就是允許客戶端訪問VPN伺服器自身所在的其他區域網)
# 記住,這些私有子網也要將OpenVPN客戶端的地址池(10.8.0.0/255.255.255.0)反饋回OpenVPN伺服器。
;push "route 192.168.10.0 255.255.255.0"
;push "route 192.168.20.0 255.255.255.0"

# 為指定的客戶端分配指定的IP地址,或者客戶端背後也有一個私有子網想要訪問VPN,
# 那麼你可以針對該客戶端的配置檔案使用ccd子目錄。
# (簡而言之,就是允許客戶端所在的區域網成員也能夠訪問VPN)

# 舉個例子:假設有個Common Name為"Thelonious"的客戶端背後也有一個小型子網想要連線到VPN,該子網為192.168.40.128/255.255.255.248。
# 首先,你需要去掉下面兩行指令的註釋:
;client-config-dir ccd
;route 192.168.40.128 255.255.255.248
# 然後建立一個檔案ccd/Thelonious,該檔案的內容為:
#     iroute 192.168.40.128 255.255.255.248
#這樣客戶端所在的區域網就可以訪問VPN了。
# 注意,這個指令只能在你是基於路由、而不是基於橋接的模式下才能生效。
# 比如,你使用了"dev tun"和"server"指令。

# 再舉個例子:假設你想給Thelonious分配一個固定的IP地址10.9.0.1。
# 首先,你需要去掉下面兩行指令的註釋:
;client-config-dir ccd
;route 10.9.0.0 255.255.255.252
# 然後在檔案ccd/Thelonious中新增如下指令:
#   ifconfig-push 10.9.0.1 10.9.0.2

# 如果你想要為不同群組的客戶端啟用不同的防火牆訪問策略,你可以使用如下兩種方法:
# (1)執行多個OpenVPN守護程序,每個程序對應一個群組,併為每個程序(群組)啟用適當的防火牆規則。
# (2) (進階)建立一個指令碼來動態地修改響應於來自不同客戶的防火牆規則。
# 關於learn-address指令碼的更多資訊請參考官方手冊頁面。
;learn-address ./script

# 如果啟用該指令,所有客戶端的預設閘道器都將重定向到VPN,這將導致諸如web瀏覽器、DNS查詢等所有客戶端流量都經過VPN。
# (為確保能正常工作,OpenVPN伺服器所在計算機可能需要在TUN/TAP介面與乙太網之間使用NAT或橋接技術進行連線)
;push "redirect-gateway def1 bypass-dhcp"

# 某些具體的Windows網路設定可以被推送到客戶端,例如DNS或WINS伺服器地址。
# 下列地址來自opendns.com提供的Public DNS 伺服器。
;push "dhcp-option DNS 208.67.222.222"
;push "dhcp-option DNS 208.67.220.220"

# 去掉該指令的註釋將允許不同的客戶端之間相互"可見"(允許客戶端之間互相訪問)。
# 預設情況下,客戶端只能"看見"伺服器。為了確保客戶端只能看見伺服器,你還可以在伺服器端的TUN/TAP介面上設定適當的防火牆規則。
;client-to-client

# 如果多個客戶端可能使用相同的證書/私鑰檔案或Common Name進行連線,那麼你可以取消該指令的註釋。
# 建議該指令僅用於測試目的。對於生產使用環境而言,每個客戶端都應該擁有自己的證書和私鑰。
# 如果你沒有為每個客戶端分別生成Common Name唯一的證書/私鑰,你可以取消該行的註釋(但不推薦這樣做)。
;duplicate-cn

# keepalive指令將導致類似於ping命令的訊息被來回傳送,以便於伺服器端和客戶端知道對方何時被關閉。
# 每10秒鐘ping一次,如果120秒內都沒有收到對方的回覆,則表示遠端連線已經關閉。
keepalive 10 120

# 出於SSL/TLS之外更多的安全考慮,建立一個"HMAC 防火牆"可以幫助抵禦DoS攻擊和UDP埠淹沒攻擊。
# 你可以使用以下命令來生成:
#   openvpn --genkey --secret ta.key
#
# 伺服器和每個客戶端都需要擁有該金鑰的一個拷貝。
# 第二個引數在伺服器端應該為'0',在客戶端應該為'1'。
;tls-auth ta.key 0 # 該檔案應該保密

# 選擇一個密碼加密演算法。
# 該配置項也必須複製到每個客戶端配置檔案中。
;cipher BF-CBC        # Blowfish (預設)
;cipher AES-128-CBC   # AES
;cipher DES-EDE3-CBC  # Triple-DES

# 在VPN連線上啟用壓縮。
# 如果你在此處啟用了該指令,那麼也應該在每個客戶端配置檔案中啟用它。
comp-lzo

# 允許併發連線的客戶端的最大數量
;max-clients 100

# 在完成初始化工作之後,降低OpenVPN守護程序的許可權是個不錯的主意。
# 該指令僅限於非Windows系統中使用。
;user nobody
;group nobody

# 持久化選項可以儘量避免訪問那些在重啟之後由於使用者許可權降低而無法訪問的某些資源。
persist-key
persist-tun

# 輸出一個簡短的狀態檔案,用於顯示當前的連線狀態,該檔案每分鐘都會清空並重寫一次。
status openvpn-status.log

# 預設情況下,日誌訊息將寫入syslog(在Windows系統中,如果以服務方式執行,日誌訊息將寫入OpenVPN安裝目錄的log資料夾中)。
# 你可以使用log或者log-append來改變這種預設情況。
# "log"方式在每次啟動時都會清空之前的日誌檔案。
# "log-append"這是在之前的日誌內容後進行追加。
# 你可以使用兩種方式之一(但不要同時使用)。
;log         openvpn.log
;log-append  openvpn.log

# 為日誌檔案設定適當的冗餘級別(0~9)。冗餘級別越高,輸出的資訊越詳細。
#
# 0 表示靜默執行,只記錄致命錯誤。
# 4 表示合理的常規用法。
# 5 和 6 可以幫助除錯連線錯誤。
# 9 表示極度冗餘,輸出非常詳細的日誌資訊。
verb 3

# 重複資訊的沉默度。
# 相同類別的資訊只有前20條會輸出到日誌檔案中。
;mute 20