ค้นหาเว็บไซต์

วิธีติดตั้งและกำหนดค่าเซิร์ฟเวอร์ OpenVPN บน Windows


OpenVPN เป็นชุดซอฟต์แวร์โอเพ่นซอร์สที่เป็นหนึ่งในโซลูชันยอดนิยมและง่ายที่สุดสำหรับการติดตั้ง VPN ที่ปลอดภัย OpenVPN ช่วยให้คุณสามารถรวมเซิร์ฟเวอร์และไคลเอนต์ (แม้ว่าจะอยู่หลัง NAT หรือไฟร์วอลล์) ให้เป็นเครือข่ายเดียว หรือเพื่อเชื่อมต่อเครือข่ายของสำนักงานระยะไกล คุณสามารถปรับใช้ส่วนเซิร์ฟเวอร์ของ OpenVPN ได้เกือบทั้งหมดในระบบปฏิบัติการที่มีอยู่ทั้งหมด รวมถึง Linux, Windows, MacOS และ *BSD คุณสามารถติดตั้งเซิร์ฟเวอร์ OpenVPN บน Windows Server 2022/20119/2016/2012R2 หรือแม้แต่บนคอมพิวเตอร์ที่ใช้เดสก์ท็อปรุ่น Windows (Windows 10 หรือ 11)

ในบทความนี้ เราจะแสดงวิธีการติดตั้งและกำหนดค่าเซิร์ฟเวอร์ OpenVPN บนคอมพิวเตอร์ที่ใช้ Windows 10 ตั้งค่าไคลเอ็นต์ OpenVPN บนอุปกรณ์ Windows เครื่องอื่น และสร้างการเชื่อมต่อ VPN ที่ปลอดภัย

OpenVPN เป็นที่นิยมอย่างมากในกลุ่ม SOHO เพื่อให้เข้าถึงพนักงานทางไกลได้: คุณไม่จำเป็นต้องซื้อฮาร์ดแวร์พิเศษใดๆ ใบอนุญาตในการสร้างเซิร์ฟเวอร์ VPN ที่ใช้ Windows Server เปิดเผยพอร์ต RDP ไปยังอินเทอร์เน็ต และสามารถป้องกัน RDP ได้อย่างง่ายดาย การโจมตีด้วยกำลังดุร้าย

จะติดตั้งบริการเซิร์ฟเวอร์ OpenVPN บน Windows ได้อย่างไร

ดาวน์โหลดตัวติดตั้ง OpenVPN MSI สำหรับเวอร์ชัน Windows ของคุณจากเว็บไซต์อย่างเป็นทางการ (https://openvpn.net/community-downloads/) ในกรณีของเรา นี่คือ OpenVPN-2.5.7-I602-amd64.msi (https://swupdate.openvpn.org/community/releases/OpenVPN-2.5.7-I602-amd64.msi ).

เรียกใช้การตั้งค่าและเลือก บริการ OpenVPN เพื่อติดตั้ง หากคุณต้องการให้เซิร์ฟเวอร์ OpenVPN เริ่มต้นโดยอัตโนมัติ คุณต้องไม่ติดตั้ง OpenVPN GUI

OpenVPN 2.5 (และใหม่กว่า) รองรับไดรเวอร์ WinTun จากนักพัฒนา WireGuard ไดรเวอร์นี้เร็วกว่าไดรเวอร์ TAP OpenVPN เริ่มต้น เราแนะนำให้ติดตั้งไดรเวอร์ Wintun แทน TAP-Windows6

ติดตั้ง สคริปต์การจัดการใบรับรอง EasyRSA OpenSSL

เสร็จสิ้นการติดตั้ง

ตามค่าเริ่มต้น OpenVPN จะถูกติดตั้งไว้ที่ C:\Program Files\OpenVPN

เมื่อการติดตั้งเสร็จสิ้น คุณจะเห็นอะแดปเตอร์เครือข่ายใหม่ Wintun Userspace Tunnel อแด็ปเตอร์นี้ถูกปิดใช้งานหากบริการ OpenVPN ไม่ได้ทำงานอยู่

สร้างคีย์การเข้ารหัส OpenVPN และใบรับรอง

OpenVPN ใช้การเข้ารหัส OpenSSL ซึ่งหมายความว่าต้องใช้คีย์และใบรับรอง RSA3 เพื่อสร้างการเชื่อมต่อเครือข่ายระหว่างไคลเอ็นต์และเซิร์ฟเวอร์ VPN

เปิดพรอมต์คำสั่งและไปที่ไดเร็กทอรี easy-rsa:

cd "C:\Program Files\OpenVPN\easy-rsa"

สร้างสำเนาของไฟล์:

copy vars.example vars

เปิดไฟล์ vars ในโปรแกรมแก้ไขข้อความ ตรวจสอบเส้นทางไปยังโฟลเดอร์ทำงานของ OpenVPN และ EaseRSA

อย่าลืมแก้ไขตัวแปร EASYRSA_TEMP_DIR ดังที่แสดงด้านล่าง:

set_var EASYRSA_TEMP_DIR "$EASYRSA_PKI/temp"

คุณสามารถกรอกข้อมูลในฟิลด์ใบรับรอง (ไม่บังคับ):

set_var EASYRSA_REQ_COUNTRY "DE"
set_var EASYRSA_REQ_PROVINCE "BY"
set_var EASYRSA_REQ_CITY "MUN"
set_var EASYRSA_REQ_ORG "WOSHUB-Com"
set_var EASYRSA_REQ_EMAIL "admin@a-d.site"
set_var EASYRSA_REQ_OU "IT dept"

กำหนดวันหมดอายุของใบรับรอง:

set_var EASYRSA_CA_EXPIRE 3650
set_var EASYRSA_CERT_EXPIRE 825

บันทึกไฟล์และเรียกใช้คำสั่ง:

EasyRSA-Start.bat

ต้องรันคำสั่งต่อไปนี้ทั้งหมดในเชลล์ EasyRSA:

เริ่มต้น PKI:

./easyrsa init-pki

คุณควรเห็นข้อความนี้:

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: C:/Program Files/OpenVPN/easy-rsa/pki

จากนั้นสร้าง root CA:

./easyrsa build-ca

ป้อนรหัสผ่าน CA สองครั้ง:

CA creation is complete and you may now import and sign cert requests.

คำสั่งด้านบนได้สร้าง:

  • ใบรับรองหลักของผู้ออกใบรับรอง:

    C:\Program Files\OpenVPN\easy-rsa\pki\ca.crt
  • รหัสผู้ออกใบรับรอง: C

    :\Program Files\OpenVPN\easy-rsa\pki\private\ca.key

จากนั้นสร้างคำขอใบรับรองและคีย์สำหรับเซิร์ฟเวอร์ OpenVPN ของคุณ:

./easyrsa gen-req server nopass

เครื่องมือจะสร้างสองไฟล์:

ความต้องการ:

C:/Program Files/OpenVPN/easy-rsa/pki/reqs/server.req

คีย์:

C:/Program Files/OpenVPN/easy-rsa/pki/private/server.key

ลงนามในคำขอออกใบรับรองเซิร์ฟเวอร์โดยใช้ CA ของคุณ:

./easyrsa sign-req server server

ยืนยันข้อมูลโดยพิมพ์ใช่

จากนั้นป้อนรหัสผ่าน CA สำหรับรูท CA ของคุณ

ไฟล์ server.crt จะปรากฏในโฟลเดอร์ ออก (

C:\Program Files\OpenVPN\easy-rsa\pki\issued\server.crt

).

จากนั้นคุณสามารถสร้างคีย์ Diffie-Hellman (ใช้เวลานาน):

./easyrsa gen-dh

เพื่อให้การป้องกันเพิ่มเติมสำหรับเซิร์ฟเวอร์ VPN ของคุณ ขอแนะนำให้เปิดใช้งาน tls-auth คุณลักษณะนี้อนุญาตให้ใช้ลายเซ็น HMAC ในการจับมือ SSL/TLS ซึ่งจะเป็นการเริ่มต้นการตรวจสอบความสมบูรณ์เพิ่มเติม แพ็คเก็ตที่ไม่มีลายเซ็นดังกล่าวจะถูกทิ้งโดยเซิร์ฟเวอร์ VPN สิ่งนี้จะป้องกันคุณจากการสแกนพอร์ตเซิร์ฟเวอร์ VPN, การโจมตี DoS, บัฟเฟอร์ SSL/TLS ล้น ฯลฯ

สร้างคีย์ tls-auth:

cd C:\Program Files\OpenVPN\bin
openvpn --genkey secret ta.key

นี้

C:\Program Files\OpenVPN\bin\ta.key

ไฟล์จะปรากฏขึ้น ย้ายไปที่โฟลเดอร์ C:\Program Files\OpenVPN asy-rsa\pki

จากนั้นคุณสามารถสร้างคีย์สำหรับไคลเอ็นต์ OpenVPN ของคุณได้ ลูกค้าแต่ละรายที่เชื่อมต่อกับเซิร์ฟเวอร์ VPN ของคุณต้องมีคู่คีย์ของตัวเอง

มีหลายวิธีในการสร้างคีย์ OpenVPN และแจกจ่ายให้กับลูกค้า

ในตัวอย่างด้านล่าง เราจะสร้างคีย์ไคลเอนต์บนเซิร์ฟเวอร์และป้องกันด้วยรหัสผ่าน (วลีรหัสผ่าน PEM):

./easyrsa gen-req testuser1
./easyrsa sign-req client testuser1

คัดลอกไฟล์คีย์ (

C:\Program Files\OpenVPN\easy-rsa\pki\private\testuser1.key

) ไปยังคอมพิวเตอร์ไคลเอ็นต์เพื่อบอกรหัสผ่านแก่ผู้ใช้ (เสียง, อีเมล, SMS) ลูกค้าสามารถปิดใช้งานการป้องกันด้วยรหัสผ่านสำหรับคีย์:

openssl rsa -in "C:\Program Files\OpenVPN\easy-rsa\pki\private\testuser1.key"-out "C:\Program Files\OpenVPN\easy-rsa\pki\private\testuser1_use.key"

หากคุณต้องการสร้างคีย์ที่ไม่มีการป้องกันด้วยรหัสผ่าน คุณต้องเรียกใช้คำสั่ง:

./easyrsa gen-req testuser2 nopass

คุณสามารถสร้างคีย์และใบรับรองจำนวนเท่าใดก็ได้สำหรับผู้ใช้บนเซิร์ฟเวอร์ VPN ของคุณ สร้างคีย์และใบรับรองสำหรับไคลเอนต์อื่นด้วยวิธีเดียวกัน

คุณสามารถเพิกถอนใบรับรองไคลเอ็นต์ที่ถูกบุกรุกได้:

cd C:\Program Files\OpenVPN\easy-rsa
EasyRSA-Start.bat
./easyrsa revoke testuser2

ดังนั้นเราจึงสร้างชุดคีย์และใบรับรองสำหรับเซิร์ฟเวอร์ OpenVPN ตอนนี้คุณสามารถกำหนดค่าและเรียกใช้บริการ VPN ของคุณได้แล้ว

ไฟล์การกำหนดค่าเซิร์ฟเวอร์ OpenVPN สำหรับ Windows

คัดลอกเทมเพลตไฟล์การกำหนดค่าสำหรับเซิร์ฟเวอร์ OpenVPN:

copy "C:\Program Files\OpenVPN\sample-config\server.ovpn" "C:\Program Files\OpenVPN\config-auto\server.ovpn"

เปิด server.ovpn ในโปรแกรมแก้ไขข้อความและทำการตั้งค่าของคุณ ฉันใช้การกำหนดค่า OpenVPN ต่อไปนี้:

# Specify a port, a protocol and a device type
port 1194
proto udp
dev tun
# Specify paths to server certificates
ca "C:\\Program Files\\OpenVPN\\easy-rsa\\pki\\ca.crt"
cert "C:\\Program Files\\OpenVPN\\easy-rsa\\pki\\issued\\server.crt"
key "C:\\Program Files\\OpenVPN\\easy-rsa\\pki\\private\\server.key"
dh "C:\\Program Files\\OpenVPN\\easy-rsa\\pki\\dh.pem"
# Specify the settings of the IP network your VPN clients will get their IP addresses from
server 10.24.1.0 255.255.255.0
# If you want to allow your clients to connect using the same key, enable the duplicate-cn option (not recommended)
# duplicate-cn
# TLS protection
tls-auth "C:\\Program Files\\OpenVPN\\easy-rsa\\pki\\ta.key" 0
cipher AES-256-GCM
# Other options
keepalive 20 60
persist-key
persist-tun
status "C:\\Program Files\\OpenVPN\\log\\status.log"
log "C:\\Program Files\\OpenVPN\\log\\openvpn.log"
verb 3
mute 20
windows-driver wintun

บันทึกไฟล์

OpenVPN ให้คุณใช้ทั้งโปรโตคอล TCP และ UDP ในตัวอย่างนี้ เราเรียกใช้ OpenVPN บนพอร์ต UDP 1194 ขอแนะนำให้ใช้ UDP เนื่องจากเหมาะสมที่สุดสำหรับทั้งประสิทธิภาพและความปลอดภัย

อย่าลืมเปิดพอร์ตในไฟร์วอลล์สำหรับหมายเลขพอร์ต OpenVPN ที่คุณระบุไว้บนไคลเอนต์และบนเซิร์ฟเวอร์ คุณสามารถเปิดพอร์ตใน Windows Defender โดยใช้ PowerShell
กฎไฟร์วอลล์สำหรับเซิร์ฟเวอร์ OpenVPN:

New-NetFirewallRule -DisplayName "AllowOpenVPN-In" -Direction Inbound -Protocol UDP -LocalPort 1194 -Action Allow

กฎสำหรับลูกค้า:

New-NetFirewallRule -DisplayName "AllowOpenVPN-Out" -Direction Outbound -Protocol UDP -LocalPort 1194 -Action Allow

จากนั้นเรียกใช้บริการ OpenVPN และเปลี่ยนประเภทการเริ่มต้นเป็นอัตโนมัติ ใช้คำสั่ง PowerShell เพื่อเปิดใช้งานบริการ:

Set-Service OpenVPNService -startuptype automatic -passthru
Get-Service OpenVPNService| Start-Service

เปิดกล่องโต้ตอบการเชื่อมต่อเครือข่าย (

ncpa.cpl

) และตรวจสอบให้แน่ใจว่าเปิดใช้งานอแด็ปเตอร์เสมือน OpenVPN Wintun แล้ว ถ้าไม่ใช่ ให้ตรวจสอบไฟล์บันทึก

C:\Program Files\OpenVPN\log\server.log

หากคุณเห็นข้อผิดพลาดต่อไปนี้ในบันทึกเมื่อเริ่มต้น OpenVPN:

Options error: In C:\Program Files\OpenVPN\config-auto\server.ovpn:1: Maximum option line length (256) exceeded, line starts with…

เปลี่ยนอักขระขึ้นบรรทัดใหม่เป็น Windows CRLF (ใน Notepad++ เลือกแก้ไข -> การแปลง EOL -> Windows CR LF) ใน server.ovpn บันทึกไฟล์และรีสตาร์ท OpenVPNService

การกำหนดค่า OpenVPN นี้อนุญาตให้ไคลเอนต์ระยะไกลเข้าถึงทรัพยากรเซิร์ฟเวอร์เท่านั้น คอมพิวเตอร์และบริการอื่น ๆ ในเครือข่ายท้องถิ่นของเซิร์ฟเวอร์ไม่พร้อมใช้งานสำหรับไคลเอนต์ระยะไกล ในการอนุญาตให้ไคลเอนต์ OpenVPN เข้าถึง LAN ภายใน ให้เปิดใช้งานตัวเลือก IPEnableRouter ในรีจิสทรี (เปิดใช้งานการกำหนดเส้นทาง IP ใน Windows รวมถึงการกำหนดเส้นทางระหว่างเครือข่าย Hyper-V และอนุญาตให้คุณใช้การส่งต่อพอร์ต):

reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v IPEnableRouter /t REG_DWORD /d 1 /f

เพิ่มเส้นทางไปยังเครือข่าย IP ในพื้นที่ของคุณไปยังไฟล์การกำหนดค่าเซิร์ฟเวอร์:

push "route 10.24.1.0 255.255.255.0"
push "route 192.168.31.0 255.255.255.0"

หากจำเป็น ให้กำหนดที่อยู่เซิร์ฟเวอร์ DNS ให้กับไคลเอ็นต์:

push "dhcp-option DNS 192.168.31.10"
push "dhcp-option DNS 192.168.31.11"

หากคุณต้องการเปลี่ยนเส้นทางคำขอของไคลเอ็นต์ทั้งหมด (รวมถึงทราฟฟิกอินเทอร์เน็ต) ไปยังเซิร์ฟเวอร์ OpenVPN ของคุณ ให้เพิ่มตัวเลือก:

push "redirect-gateway def1"

ตัวเลือกเหล่านี้อธิบายกรณีที่พิจารณาก่อนหน้านี้: สูญเสียการเชื่อมต่ออินเทอร์เน็ตหลังจากเชื่อมต่อกับ VPN และ ไม่มีการแก้ไข DNS เมื่อเชื่อมต่อกับ VPN

การกำหนดค่าไคลเอนต์ OpenVPN บน Windows

สร้างไฟล์การกำหนดค่าเทมเพลตสำหรับไคลเอนต์ VPN (ตามเทมเพลต client.ovpn) บนเซิร์ฟเวอร์ของคุณด้วยการตั้งค่าต่อไปนี้ (ชื่อไฟล์คือ testuser1.ovpn):

client
dev tun
proto udp
remote your_vpn_server_address 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert testuser1.crt
key testuser1.key
remote-cert-tls server
tls-auth ta.key 1
cipher AES-256-GCM
connect-retry-max 25
verb 3

ระบุที่อยู่ IP สาธารณะหรือชื่อ DNS ของเซิร์ฟเวอร์ OpenVPN ของคุณในคำสั่ง ระยะไกล

ดาวน์โหลดและติดตั้ง OpenVPN Connect สำหรับ Windows (https://openvpn.net/downloads/openvpn-connect-v3-windows.msi)

จากนั้นคัดลอกไฟล์ต่อไปนี้จากเซิร์ฟเวอร์ของคุณไปยังคอมพิวเตอร์ที่ติดตั้งไคลเอนต์ OpenVPN:

  • ca.crt
  • testuser1.crt
  • testuser1.key
  • dh.pem
  • ta.key
  • testuser1.ovpn

นำเข้า

*.ovpn

ไฟล์โปรไฟล์และพยายามเชื่อมต่อกับเซิร์ฟเวอร์ VPN ของคุณ

หากคุณตั้งค่าถูกต้อง คุณจะเห็นภาพด้านล่าง:

ตรวจสอบบันทึกการเชื่อมต่อ OpenVPN บนไคลเอนต์:

C:\Program Files\OpenVPN Connect\agent.log
Mon Jul 17 08:09:30 2022 proxy_auto_config_url
Mon Jul 17 08:09:31 2022 TUN SETUP
TAP ADAPTERS:
guid='{25EE4A55-BE90-45A0-88A1-8FA8FEF24C42}' index=22 name='Local Area Connection'
Open TAP device "Local Area Connection" PATH="\\.\Global\{25EE4A55-BE90-45A0-88A1-8FA8FEF24C42}.tap" SUCCEEDED
TAP-Windows Driver Version 9.24
ActionDeleteAllRoutesOnInterface iface_index=22
netsh interface ip set interface 22 metric=1
Ok.
netsh interface ip set address 22 static 10.24.1.10 255.255.255.252 gateway=10.24.1.5 store=active
IPHelper: add route 10.24.1.1/32 22 10.24.1.5 metric=-1

ลูกค้าเชื่อมต่อกับเซิร์ฟเวอร์ VPN สำเร็จและได้รับที่อยู่ IP 10.24.1.10

ตอนนี้ตรวจสอบบันทึก OpenVpn ที่ฝั่งเซิร์ฟเวอร์ (

C:\Program Files\OpenVPN\log\openvpn.log

). ที่นี่ คุณจะเห็นด้วยว่าไคลเอ็นต์ที่มีใบรับรอง testuser1 เชื่อมต่อกับเซิร์ฟเวอร์สำเร็จแล้ว

2022-07-17 08:09:35 192.168.13.20:55648 [tesuser1] Peer Connection Initiated with [AF_INET6]::ffff:192.168.13.20:55648
2022-07-17 08:09:35 tesuser1/192.168.13.20:55648 MULTI_sva: pool returned IPv4=10.24.1.10, IPv6=(Not enabled)
2022-07-17 08:09:35 tesuser1/192.168.13.20:55648 MULTI: Learn: 10.24.1.10 -> testuser1/192.168.13.20:55648
2022-07-17 08:09:35 tesuser1/192.168.13.20:55648 MULTI: primary virtual IP for tesuser1/192.168.13.20:55648: 10.24.1.10

บทความที่เกี่ยวข้อง