本文將介紹如何配置OpenVPN伺服器端的配置文件。在Windows系統中,該配置文件一般叫做server.ovpn;在Linux/BSD系統中,該配置文件一般叫做server.conf。雖然配置文件名稱不同,但其中的配置內容與配置方法卻是相同的。 本文根據官方提供的server.ovpn示例文件直 ...
本文將介紹如何配置OpenVPN伺服器端的配置文件。在Windows系統中,該配置文件一般叫做server.ovpn;在Linux/BSD系統中,該配置文件一般叫做server.conf。雖然配置文件名稱不同,但其中的配置內容與配置方法卻是相同的。
本文根據官方提供的server.ovpn示例文件直接翻譯得出。Windows、Linux、BSD等系統的伺服器端配置文件均可參考本文。你可以點擊查看OpenVPN客戶端的配置文件說明。
################################################# # 針對多客戶端的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
作者:軟體指南針(http://www.softown.cn),轉載請保留出處!