在 Windows Server 安裝 OpenVPN Server 並透過 AD (LDAP) 做帳號驗證

◎ Server OS: Windows Server 2019
◎ OpenVPN: OpenVPN 2.4.9 (Community)
◎ AD 驗證元件: Auth4OpenVPNv2.0
◎ Client OS: Windows 10

 

  由於公司的 VPN 硬體設備老舊最近在 survey VPN 的解決方案想說先從開源的解決方案下手一開始想到的就是五年前測試過的 OpenVPN但到官網下載 VM 映像檔並建置完成後才發現此版本僅開放兩個 client 免費連線要更多就要訂閱心想原來開始收費了難怪 Server 跟 client 端 (OpenVPN Connect) 的軟體介面都變得這麼漂亮印象以前都是要透過記事本去改設定的

  之後找到來自日本的 SoftEther VPN花了些時間研究及建置後原本以為這套應該可以用了沒想到最後在做測試時發現 SoftEther VPN 有個 drop SQL 連線的 bug且網友已經回報 issue 兩年了官方還是沒有修正因此只好忍痛放棄SoftEther VPN 的設定方式可參考【筆記】SoftEther VPN Server 設定

  後來回過頭找 OpenVPN 的相關授權資訊結果才找到 Community 的版本,다운로드安裝後,熟悉的文字檔設定화면다시 出現,哈。아래為本次建置的목표與設定方式:

[목표]
◎ Server 使用 Windows 系統。
◎ AD 사용 為帳戶驗證方式。
◎ Client 端使用獨立網段,並可自動取得 IP。
◎ Client 端僅針對特定網段的流量會流量 VPN,上網 (Internet) 不會。
◎ Client 端可以連到企業內部的其他網段。

 

◎ 首先,到 OpenVPN 커뮤니티 다운로드 페이지에서 최신 버전 다운로드。

 

◎ 이어서 커뮤니티의 Easy_Windows_Guide,를 참고하여 서버와 클라이언트 설정 완료,다음은 주요 설정 발췌。


 

【사전 작업】

◎ 설치 시 반드시 자신이 선택하여 “EasyRSA 2 Certificate Management Scripts” 구성 요소 설치。

◎ '관리자 권한으로' cmd 실행,하고 순서대로 아래 명령어 실행:

cd "C:\Program Files\OpenVPN\easy-rsa"
init-config
notepad vars.bat

 

◎ 기본 인증서 정보를 수정,수정 후 저장。

set KEY_COUNTRY=US
set KEY_PROVINCE=CA
set KEY_CITY=SanFrancisco
set KEY_ORG=OpenVPN
set KEY_EMAIL=mail@host.domain

 

◎ 依序執行下列指令

vars
clean-all

 

【建置憑證與金鑰】
◎ 執行下列指令

build-ca

 

◎ 輸入憑證資訊

Country Name (2 letter code) [US]:
State or Province Name (full name) [CA]:
Locality Name (eg, city) [SanFrancisco]:
Organization Name (eg, company) [OpenVPN]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server’s hostname) []:
Email Address [mail@host.domain]:

 

◎ 依序執行下列指令

build-key-server server
build-key client
# Guide 上是建議用 client 端的電腦名稱,然後為每一台電腦產生一份憑證,
# 但因為我主要是要用 AD 驗證,所以我這邊是只產生一份名為 client 的憑證,然後讓所有電腦一起使用。
build-dh
"C:\Program Files\OpenVPN\bin\openvpn.exe" --genkey --secret "C:\Program Files\OpenVPN\easy-rsa\keys\ta.key"

 

【設定 Server config 檔】

◎ 執行下列指令

copy "C:\Program Files\OpenVPN\sample-config\server.ovpn" "C:\Program Files\OpenVPN\easy-rsa\keys\server.ovpn"
notepad "C:\Program Files\OpenVPN\easy-rsa\keys\server.ovpn"

 

◎ 找到以下文字

ca ca.crt
cert server.crt
key server.key

dh dh2048.pem

 

◎ 取代成

caC:\\Program Files\\OpenVPN\\config\\ca.crt
certC:\\Program Files\\OpenVPN\\config\\server.crt
keyC:\\Program Files\\OpenVPN\\config\\server.key

dhC:\\Program Files\\OpenVPN\\config\\dh2048.pem

 

◎ 存檔並關閉

◎ 找到以下文字並拿掉前面的註解分號(;)。由於我打算只做一個憑證給大家共用如此可能會造成不同 Client 取得同一組 IP 的現象因此要將此設定開啟讓大家可以拿到不同的 IP

;duplicate-cn

 

【設定 Client config 檔】

◎ 執行下列指令

copy "C:\Program Files\OpenVPN\sample-config\client.ovpn" "C:\Program Files\OpenVPN\easy-rsa\keys\client.ovpn"
notepad "C:\Program Files\OpenVPN\easy-rsa\keys\client.ovpn"

 

◎ 找到以下文字

ca ca.crt
cert server.crt
key server.key

tls-auth ta.key 1

 

◎ 取代成

caC:\\Program Files\\OpenVPN\\config\\ca.crt
certC:\\Program Files\\OpenVPN\\config\\client.crt
keyC:\\Program Files\\OpenVPN\\config\\client.key

tls-authC:\\Program Files\\OpenVPN\\config\\ta.key” 1
# Guide 沒有這段這是我在運行 client 時跳錯而進行修正的

 

◎將下面的my-server-1修改為 OpenVPN 實際的 FQDN 或 IP 位址

remote my-server-1 1194

 

◎ 存檔並關閉

 

【複製憑證金鑰到正確的目錄】

◎ 執行下列指令

robocopy "C:\Program Files\OpenVPN\easy-rsa\keys\" "C:\Program Files\OpenVPN\config\" ca.crt ta.key dh2048.pem server.crt server.key server.ovpn

 

◎ 在C:\Program Files\OpenVPN\easy-rsa\keys\”,複製以下檔案

ca.crt
ta.key
client.crt
client.key
client.ovpn

 

◎ 貼到 client 電腦的C:\Program Files\OpenVPN\config\
PS. client 的安裝檔跟 Server 一樣

 

【啟動 OpenVPN】

◎ 在 Server 以「系統管理員身分」執行 OpenVPN GUI如果不以「系統管理員身分」運行也可以但可能部份 log 會沒有寫入權限也可以在「Windows 服務」OpenVPNService的「啟動類型」改成自動”,並按右鍵「啟動」

◎ Client 端直接執行 OpenVPN GUI並在右下角的圖示按右鍵選擇「連線」即可Client 亦可安裝介面比較好看得 OpenVPN Connect並將設定檔 (client.opvn) 拖曳進視窗即可


 

  以上為 Easy_Windows_Guide 的主要教學內容完成上面設定後就可以憑證方式完成連線接下來則是將設定調整為我想要的環境

◎ Client 端可以連到企業內部的其他網段。
◎ AD 사용 為帳戶驗證方式。

 

【讓 Client 端可以連到企業內部的其他網段】

  OpenVPN 在完成建置後預設 Server 會產生一張虛擬網卡其 IP 為 10.8.0.1,而 Client 則是會拿到 10.8.0.6,此時 Client 去 ping 10.8.0.1 應該要通

  接下來要 ping 伺服器的實體網路卡 ( 192.168.53.1) 會發現不通此時除了要加入路由外還要開啟「網際網路連線共用」功能這邊我卡好久後來才終於在 ViRb3 網友的「Create an OpenVPN Windows server that proxies internet traffic · GitHub」這篇找到「網際網路連線共用」這個關鍵設定

◎ 找到 server.opvn 裡的 「;push route “192.168…
◎ 依其格式,加入下面一筆,並存檔。

push "route 192.168.53.0 255.255.255.0"
# 如果要讓 Client 連到企業內部的其他網段,
# 可以在這邊加入其他網段的資訊。

 

◎ 進入介面卡設定,開啟實體網路卡 (192.168.53.1 這張) 的「網際網路連線共用」功能 (勾選”允其他網路使用者透過這台電腦的網際網路連線來連線”)。
PS. 找了很多文章才知道要做這個動作,在這邊卡關卡很久。

 

  開啟「網際網路連線共用」功能後,OpenVPN 虛擬網卡的 IP 將會被改成 192.168.137.1,因此我們如果要沿用 OpenVPN 預設的 10.8.0.1,需要修改機碼
◎ 執行 regedit到下列路徑

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters

 

◎ 將 ScopeAddress 的值改成 10.8.0.1。

◎ 重啟 OpenVPN Server並讓 Client 重新連線即可

【使用 AD 做為帳戶驗證方式】

  首先很感謝 J. Ortega. 寫的 VBScript讓我們可以很方便讓 OpenVPN 夠過 AD 做驗證感謝感謝再感謝在「Active Directory Authentication for OpenVPN For Windows Implementationsamigo4life2」這個網頁有很詳盡的設定說明不過因為年代久遠所以後續在 Windows 2008、2012 以後的版本還有些動作要做以下為整理後的設定方式

◎ 下載 Auth4OpenVPNv2.0.zip並將內容解壓縮至C:/Program Files/OpenVPN/Config

 

◎ 修改 Auth4OpenVPN.ini輸入 AD 的相關資訊範例如下

Server = "192.168.53.20"
Domain = "abc"
DN = "dc=abc,dc=com,dc=tw"
Group = "(Group)OpenVPN"
Logging = "On"

 

  接下來的動作會與 J. Ortega. 網頁上稍有不同,此為 iceh 網友在 OpenVPN Community 論壇 針對新版 Windows Server 安全性的問題做的修正,在此也很感謝 iceh 網友。

◎ 開啟記事本,貼上以下內容:

set LOCALAPPDATA=C:\Users\%USERNAME%\AppData\Local
set CommonProgramFiles=C:\Program Files\Common Files
set CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
set CommonProgramW6432=C:\Program Files\Common Files
C:\Windows\System32\cscript.exe "C:\Program Files\OpenVPN\config\Auth4OpenVPN.vbs"
exit %errorlevel%

◎將檔案儲存到 “C:\Program Files\OpenVPN\config”,檔名為 “Auth4OpenVPN-64bitWrapper.cmd”。

◎ 在 server.ovpn 加入下面兩行指令:

script-security 3
auth-user-pass-verify Auth4OpenVPN-64bitWrapper.cmd via-env

◎ 在 Client 端的 client.ovpn 加入下面兩行指令:

auth-user-pass
auth-retry interact

◎ 如此,Client 在連線時,便會跳出帳號密碼視窗來登入。

 

[補充資訊]

◎ Auth4OpenVPN 有提供測試功能,建議可以先以下面指令測試連線 AD 沒問題後,再來進行後續動作。

auth4openvpn.vbs <user> <password>

◎ Auth4OpenVPN 會在 Windows 應用程式記錄留下驗證結果,如果依照原本網頁方式設定,可能會出現 “Auth4OpenVPN: -2147221164, 類別未登錄” 오류 메시지,此時依照 iceh 網友提供的 “Auth4OpenVPN-64bitWrapper.cmd” 的修復方式,便可解決環境參數的問題。

◎ 如果要讓 client 可以透過企業的網路上網 (Internet),只需在 server.ovpn 檔找到下面字串,並將前面的註解(;)拿掉即可。

;push "redirect-gateway def1 bypass-dhcp"

◎ OpenVPN Connect 在匯入 client.ovpn 檔時,會憑證檢查與金鑰檔有沒有跟 client.ovpn 檔在同個目錄,如果沒有會跳錯。完成匯入後,後續進行連線時,OpenVPN Connect만이 client.ovpn 설정에 따라 명령 경로에서 인증서와 키 파일을 읽습니다.;OpenVPN GUI에는 이 문제가 없습니다.。

◎ OpenVPN을 Windows 로컬 계정 인증과 함께 사용하려면,smiley22 사용자가 공유한 SAMAuth4OpenVPN 구성 요소 설치。

◎ 저는 나중에 이 해결 방법을 채택하지 않았습니다.,중국에서 OpenVPN을 필터링했기 때문에,연결 과정에서 이상한 문제가 발생할 수 있습니다.。

 

[參考連結]

3 則留言

  1. Paul says:

    Bonjour. 튜토리얼 감사합니다 하지만 솔직히 어렵네요. 설명하겠습니다 :
    J’arrive à créer un fichier server sur mon Windows ( server essentials 2016) et je me connecte dessus depuis Windows 10 avec mon fichier client. La connexion se fait.
    Mais arrivé à l’étape du ping, quand je ping l’adresse 10.8.0.1 depuis mon poste client, résultat négatif.
    Par ailleurs, dès que j’arrive à connecter mon client et lin serveur, je n’ai plus de connexion internet sur mon poste client.
    Auriez vous une piste pour m’aider à sortir de ce…..
    Est ce que le fait que ce soit une version essentials peut empêcher le ping ?

    1. Anson says:

      您好,如果連10.8.0.1都ping失敗的話那麼蠻有可能VPN連線是建立失敗的預設的情況下,10.8.0.1핑이 가능합니다。
      아마도 제 글의 단계를 참고할 수 있습니다,한 단계씩 설정해보세요,행운을 빕니다,謝謝

댓글 남기기

이메일 주소는 게시되지 않습니다. 필수 항목 표시 *

이 사이트는 Akismet을 사용하여 스팸을 줄입니다. 댓글 데이터 처리 방법 알아보기.