在 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 的版本,下載安裝後,熟悉的文字檔設定畫面再度出現,Ja。下方為本次建置的目標與設定方式

【目標】
◎ Server 使用 Windows 系統
◎ 使用 AD 做為帳戶驗證方式
◎ Client 端使用獨立網段並可自動取得 IP
◎ Client 端僅針對特定網段的流量會流量 VPN上網 (Internet) No hay de qué。
◎ Client 端可以連到企業內部的其他網段

 

◎ 首先 Descargas de la comunidad OpenVPN Página para descargar la última versión。

 

◎ Luego consulte la guía comunitaria Easy_Windows_Guide,para completar la configuración del Servidor y del Cliente,A continuación se resaltan los ajustes clave。


 

【Tareas previas】

◎ Durante la instalación marque por sí mismo “EasyRSA 2 Scripts de gestión de certificados” componente。

◎ Ejecute cmd como 'Administrador del sistema',y ejecute los siguientes comandos en orden:

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

 

◎ Modifique la información predeterminada del certificado,Guarde después de realizar los cambios。

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

 

◎ Ejecute los siguientes comandos en orden:

vars
clean-all

 

【Generar certificado y clave】
◎ Ejecute los siguientes comandos:

build-ca

 

◎ Ingrese la información del certificado:

Nombre del país (2 código de letra) [US]:
Nombre del estado o provincia (nombre completo) [CA]:
Nombre de la localidad (ej, ciudad) [SanFrancisco]:
Nombre de la organización (ej, empresa) [OpenVPN]:
Nombre de la unidad organizativa (ej, sección) []:
Nombre común (ej, su nombre o el nombre del host de su servidor) []:
Dirección de correo electrónico [mail@host.domain]:

 

◎ Ejecute los siguientes comandos en orden:

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"

 

【Configurar archivo de configuración del servidor】

◎ Ejecute los siguientes comandos:

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"

 

◎ Busque el siguiente texto。

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

dh dh2048.pem

 

◎ Reemplazar por:

ca “C:\\Program Files\\OpenVPN\\config\\ca.crt
cert “C:\\Program Files\\OpenVPN\\config\\server.crt
key “C:\\Program Files\\OpenVPN\\config\\server.key

dh “C:\\Program Files\\OpenVPN\\config\\dh2048.pem

 

◎ 存檔並關閉

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

;duplicate-cn

 

【設定 Client config 檔】

◎ Ejecute los siguientes comandos:

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"

 

◎ Busque el siguiente texto。

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

tls-auth ta.key 1

 

◎ Reemplazar por:

ca “C:\\Program Files\\OpenVPN\\config\\ca.crt
cert “C:\\Program Files\\OpenVPN\\config\\client.crt
key “C:\\Program Files\\OpenVPN\\config\\client.key

tls-auth “C:\\Program Files\\OpenVPN\\config\\ta.key” 1
# Guide 沒有這段,Este es el error que aparece cuando ejecuto el cliente,y cómo corregirlo。

 

◎ Cambiar lo siguiente “my-server-1” por el FQDN o la dirección IP real del OpenVPN。

remote my-server-1 1194

 

◎ 存檔並關閉

 

【Copiar los certificados、y claves al directorio correcto】

◎ Ejecute los siguientes comandos:

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

 

◎ En “C:\Program Files\OpenVPN\easy-rsa\keys\”,copiar los siguientes archivos:

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

 

◎ Pegarlos en la computadora del cliente en “C:\Program Files\OpenVPN\config\
PD. el instalador del cliente es igual que el del servidor。

 

【Iniciar OpenVPN】

◎ En el servidor, ejecutar OpenVPN GUI como 'Administrador'。También puede ejecutarse sin 'privilegios de administrador',Pero es posible que algunos registros no tengan permisos de escritura。También se puede ir a 'Servicios de Windows',Cambiar “OpenVPNService” 'Tipo de inicio' a”Automático”,Y hacer clic derecho en 'Iniciar'。

◎ En el cliente, ejecutar directamente OpenVPN GUI,Y en el icono de la esquina inferior derecha hacer clic derecho y seleccionar 'Conectar'。El cliente también puede instalar la interfaz más visual OpenVPN Connect,Y colocar el archivo de configuración (client.opvn) Arrastrar a la ventana para continuar。


 

Lo anterior es el contenido principal del tutorial de Easy_Windows_Guide,Después de completar la configuración anterior,Se puede establecer la conexión mediante certificados,A continuación, se ajustará la configuración al entorno que deseo:

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

 

[Permitir que el cliente pueda conectarse a otras subredes dentro de la empresa]

Después de completar la instalación de OpenVPN,Por defecto, el servidor generará una tarjeta de red virtual,Su IP es 10.8.0.1,Y el cliente obtendrá 10.8.0.6,En este momento, el cliente realiza un 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 這張) 的「網際網路連線共用」功能 (勾選”允其他網路使用者透過這台電腦的網際網路連線來連線”)。
PD. 找了很多文章才知道要做這個動作,在這邊卡關卡很久。

 

  開啟「網際網路連線共用」功能後,La IP de la tarjeta de red virtual de OpenVPN se cambiará a 192.168.137.1,Por lo tanto, si queremos seguir usando la configuración predeterminada de OpenVPN 10.8.0.1,es necesario modificar la clave del registro。
◎ Ejecutar regedit,ir a la siguiente ruta:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters

 

◎ Cambiar el valor de ScopeAddress a 10.8.0.1。

◎ Reiniciar el servidor OpenVPN,y hacer que el cliente se vuelva a conectar。

[Usando AD como método de autenticación de cuentas]

  Primero,Muchas gracias a J. Ortega. por escribir el VBScript,que nos permite usar AD para la autenticación en OpenVPN de manera fácil,Gracias, gracias y gracias de nuevo。在「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. Hay pequeñas diferencias en la web,Esto es una corrección hecha por el usuario iceh en el foro de la Comunidad OpenVPN sobre el problema de seguridad de la nueva versión de Windows Server,Aquí también agradecemos mucho al usuario iceh。

◎ Abrir el bloc de notas,Pegar el siguiente contenido:

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%

◎ Guardar el archivo en “C:\Program Files\OpenVPN\config”,Con el nombre de archivo “Auth4OpenVPN-64bitWrapper.cmd”。

◎ En server.ovpn agregar las siguientes dos líneas de comandos:

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

◎ En el cliente, en client.ovpn agregar las siguientes dos líneas de comandos:

auth-user-pass
auth-retry interact

◎ Así,Cuando el cliente se conecta,便會跳出帳號密碼視窗來登入

 

【補充資訊】

◎ 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 solo leerá los certificados y las claves desde la ruta indicada en client.ovpn según la configuración;OpenVPN GUI no tiene este problema。

◎ Si quieres permitir que OpenVPN se autentique con la cuenta local de Windows,puedes consultar lo que compartió el usuario smiley22 SAMAuth4OpenVPN componente。

◎ Al final yo no adopté esta solución,porque en China han filtrado OpenVPN,por lo que durante la conexión pueden aparecer algunos problemas extraños。

 

[Enlace de referencia]

3 Comentarios

  1. Paul dice:

    Bonjour. Merci pour votre tuto mais j'avoue galérer. Je m'explique :
    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 dice:

      您好,Si incluso 10.8.0.1 no responde al ping,es muy probable que la conexión VPN haya fallado,Por defecto,10.8.0.1debe poder ser respondido al ping。
      Quizás puedas seguir los pasos de mi artículo,Configúralo paso a paso para probar,Te deseo buena suerte,Gracias

Dejar una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tu comentario.