Tìm kiếm trang web

Cách cài đặt và định cấu hình máy chủ OpenVPN trên Windows


OpenVPN là bộ phần mềm nguồn mở thực sự là một trong những giải pháp phổ biến nhất và dễ dàng nhất để triển khai VPN an toàn. OpenVPN cho phép bạn kết hợp máy chủ và máy khách (ngay cả những máy chủ phía sau NAT hoặc tường lửa) vào một mạng duy nhất hoặc để kết nối mạng của các văn phòng từ xa. Bạn có thể triển khai một phần máy chủ của OpenVPN hầu như trong tất cả các hệ điều hành có sẵn, bao gồm Linux, Windows, MacOS và *BSD. Bạn có thể cài đặt máy chủ OpenVPN trên Windows Server 2022/20119/2016/2012R2 hoặc thậm chí trên máy tính chạy phiên bản Windows dành cho máy tính để bàn (Windows 10 hoặc 11).

Trong bài viết này, chúng tôi sẽ trình bày cách cài đặt và định cấu hình máy chủ OpenVPN trên máy tính chạy Windows 10, thiết lập ứng dụng khách OpenVPN trên một thiết bị Windows khác và thiết lập kết nối VPN an toàn.

OpenVPN cực kỳ phổ biến trong phân khúc SOHO để cung cấp quyền truy cập cho nhân viên từ xa: bạn không cần mua bất kỳ phần cứng đặc biệt nào, giấy phép để xây dựng máy chủ VPN dựa trên Windows Server, đưa cổng RDP ra Internet và có thể dễ dàng bảo vệ chống lại RDP các cuộc tấn công vũ phu.

Làm cách nào để cài đặt dịch vụ máy chủ OpenVPN trên Windows?

Tải xuống trình cài đặt OpenVPN MSI cho phiên bản Windows của bạn từ trang web chính thức (https://openvpn.net/community-downloads/). Trong trường hợp của chúng tôi, đây là OpenVPN-2.5.7-I602-amd64.msi (https://swupdate.openvpn.org/community/releases/OpenVPN-2.5.7-I602-amd64.msi ).

Chạy thiết lập và chọn Dịch vụ OpenVPN để cài đặt. Nếu bạn muốn máy chủ OpenVPN của mình tự động khởi động, bạn không được cài đặt OpenVPN GUI.

OpenVPN 2.5 (và mới hơn) hỗ trợ trình điều khiển WinTun từ các nhà phát triển WireGuard. Trình điều khiển này nhanh hơn trình điều khiển TAP OpenVPN mặc định. Chúng tôi khuyên bạn nên cài đặt trình điều khiển Wintun thay vì TAP-Windows6.

Cài đặt tiện ích OpenSSL EasyRSA Certificate Management Script.

Hoàn tất cài đặt.

Theo mặc định, OpenVPN được cài đặt vào C:\Program Files\OpenVPN.

Khi quá trình cài đặt hoàn tất, bạn sẽ thấy bộ điều hợp mạng Đường hầm không gian người dùng Wintun mới. Bộ điều hợp này bị tắt nếu dịch vụ OpenVPN không chạy.

Tạo chứng chỉ và khóa mã hóa OpenVPN

OpenVPN dựa trên mã hóa OpenSSL. Điều này có nghĩa là các khóa và chứng chỉ RSA3 phải được sử dụng để thiết lập kết nối mạng giữa máy khách và máy chủ VPN.

Mở dấu nhắc lệnh và chuyển đến thư mục easy-rsa:

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

Tạo một bản sao của tệp:

copy vars.example vars

Mở tệp vars trong bất kỳ trình soạn thảo văn bản nào. Kiểm tra các đường dẫn đến các thư mục làm việc của OpenVPN và EaseRSA.

Đảm bảo chỉnh sửa biến EASYRSA_TEMP_DIR như hình bên dưới:

set_var EASYRSA_TEMP_DIR "$EASYRSA_PKI/temp"

Bạn có thể điền vào các trường chứng chỉ (tùy chọn):

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"

Đặt ngày hết hạn chứng chỉ:

set_var EASYRSA_CA_EXPIRE 3650
set_var EASYRSA_CERT_EXPIRE 825

Lưu tệp và chạy lệnh:

EasyRSA-Start.bat

Tất cả các lệnh sau phải được chạy trong trình bao EasyRSA:

Khởi tạo PKI:

./easyrsa init-pki

Bạn sẽ thấy thông báo này:

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

Sau đó tạo CA gốc:

./easyrsa build-ca

Nhập mật khẩu CA hai lần:

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

Lệnh trên đã tạo:

  • Chứng chỉ gốc của Cơ quan cấp chứng chỉ:

    C:\Program Files\OpenVPN\easy-rsa\pki\ca.crt
  • Khóa của Tổ chức phát hành chứng chỉ: C

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

Sau đó tạo yêu cầu chứng chỉ và khóa cho máy chủ OpenVPN của bạn:

./easyrsa gen-req server nopass

Công cụ sẽ tạo ra hai tệp:

yêu cầu:

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

phím:

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

Ký yêu cầu cấp chứng chỉ máy chủ bằng CA của bạn:

./easyrsa sign-req server server

Xác nhận dữ liệu bằng cách nhập có.

Sau đó nhập mật khẩu CA cho CA gốc của bạn.

Tệp server.crt sẽ xuất hiện trong thư mục đã phát hành (

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

).

Sau đó, bạn có thể tạo khóa Diffie-Hellman (mất nhiều thời gian):

./easyrsa gen-dh

Để cung cấp khả năng bảo vệ bổ sung cho máy chủ VPN của bạn, bạn nên bật tls-auth. Tính năng này cho phép sử dụng chữ ký HMAC trong bắt tay SSL/TLS, do đó bắt đầu kiểm tra tính toàn vẹn bổ sung. Các gói không có chữ ký như vậy sẽ bị máy chủ VPN loại bỏ. Điều này sẽ bảo vệ bạn chống lại quá trình quét cổng máy chủ VPN, tấn công DoS, tràn bộ đệm SSL/TLS, v.v.

Tạo khóa tls-auth:

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

Cái này

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

tập tin sẽ xuất hiện. Di chuyển nó vào thư mục C:\Program Files\OpenVPN asy-rsa\pki.

Sau đó, bạn có thể tạo khóa cho ứng dụng khách OpenVPN của mình. Mỗi máy khách kết nối với máy chủ VPN của bạn phải có cặp khóa riêng.

Có một số cách để tạo khóa OpenVPN và phân phối chúng cho khách hàng.

Trong ví dụ dưới đây, chúng tôi sẽ tạo khóa máy khách trên máy chủ và bảo vệ nó bằng mật khẩu (cụm từ mật khẩu PEM):

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

Sao chép tệp khóa (

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

) đến máy khách cho người dùng biết mật khẩu (thoại, email, SMS). Khách hàng có thể vô hiệu hóa mật khẩu bảo vệ cho khóa:

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"

Nếu bạn muốn tạo khóa không được bảo vệ bằng mật khẩu, bạn cần chạy lệnh:

./easyrsa gen-req testuser2 nopass

Bạn có thể tạo bất kỳ số lượng khóa và chứng chỉ nào cho người dùng trên máy chủ VPN của mình. Tạo khóa và chứng chỉ cho các máy khách khác theo cách tương tự.

Bạn có thể thu hồi chứng chỉ ứng dụng khách bị xâm phạm:

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

Do đó, chúng tôi đã tạo một bộ khóa và chứng chỉ cho máy chủ OpenVPN. Bây giờ bạn có thể định cấu hình và chạy dịch vụ VPN của mình.

Tệp cấu hình máy chủ OpenVPN cho Windows

Sao chép mẫu tệp cấu hình cho máy chủ OpenVPN:

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

Mở server.ovpn trong bất kỳ trình soạn thảo văn bản nào và thực hiện cài đặt của bạn. Tôi đang sử dụng cấu hình OpenVPN sau:

# 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

Lưu các tập tin.

OpenVPN cho phép bạn sử dụng cả giao thức TCP và UDP. Trong ví dụ này, chúng tôi đã chạy OpenVPN trên cổng UDP 1194. Bạn nên sử dụng UDP vì nó tối ưu cho cả hiệu suất và bảo mật.

Hãy nhớ mở các cổng trong tường lửa cho số cổng OpenVPN mà bạn đã chỉ định trên máy khách và trên máy chủ. Bạn có thể mở cổng trong Bộ bảo vệ Windows bằng PowerShell.
Quy tắc tường lửa cho máy chủ OpenVPN:

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

Quy tắc cho khách hàng:

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

Sau đó chạy dịch vụ OpenVPN và thay đổi kiểu khởi động thành tự động. Sử dụng các lệnh PowerShell để kích hoạt dịch vụ:

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

Mở hộp thoại kết nối mạng (

ncpa.cpl

) và đảm bảo rằng bộ điều hợp ảo OpenVPN Wintun hiện đã được bật. Nếu không, hãy kiểm tra tệp nhật ký

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

Nếu bạn thấy lỗi sau trong nhật ký khi khởi động OpenVPN:

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

Thay đổi ký tự ngắt dòng thành Windows CRLF (trong Notepad++, chọn Chỉnh sửa -> Chuyển đổi EOL -> Windows CR LF) trong server.ovpn. Lưu tệp và khởi động lại OpenVPNService.

Cấu hình OpenVPN này chỉ cho phép các máy khách từ xa truy cập vào tài nguyên máy chủ. Các máy tính và dịch vụ khác trong mạng cục bộ của máy chủ không khả dụng cho các máy khách từ xa. Để cho phép các máy khách OpenVPN truy cập mạng LAN nội bộ, hãy bật tùy chọn IPEnableRouter trong sổ đăng ký (cho phép định tuyến IP trong Windows bao gồm định tuyến giữa các mạng Hyper-V và cho phép bạn sử dụng chuyển tiếp cổng):

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

Thêm các tuyến vào mạng IP cục bộ của bạn vào tệp cấu hình máy chủ:

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

Nếu cần, hãy gán địa chỉ máy chủ DNS cho máy khách:

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

Nếu bạn muốn chuyển hướng tất cả các yêu cầu của máy khách (bao gồm cả lưu lượng truy cập Internet) đến máy chủ OpenVPN của mình, hãy thêm tùy chọn:

push "redirect-gateway def1"

Các tùy chọn này mô tả các trường hợp được xem xét trước đó: Mất kết nối Internet sau khi kết nối với VPN và Không có độ phân giải DNS khi kết nối với VPN.

Định cấu hình ứng dụng khách OpenVPN trên Windows

Tạo tệp cấu hình mẫu cho máy khách VPN (dựa trên mẫu client.ovpn) trên máy chủ của bạn với các cài đặt sau (tên tệp là 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

Chỉ định địa chỉ IP công cộng hoặc tên DNS của máy chủ OpenVPN của bạn trong chỉ thị điều khiển từ xa.

Tải xuống và cài đặt OpenVPN Connect cho Windows (https://openvpn.net/downloads/openvpn-connect-v3-windows.msi).

Sau đó sao chép các tệp sau từ máy chủ của bạn sang máy tính có ứng dụng khách OpenVPN đã cài đặt:

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

Nhập khẩu

*.ovpn

hồ sơ và cố gắng kết nối với máy chủ VPN của bạn.

Nếu bạn đã đặt đúng, bạn sẽ thấy hình ảnh bên dưới:

Kiểm tra nhật ký kết nối OpenVPN trên máy khách:

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

Máy khách đã kết nối thành công với máy chủ VPN và nhận được địa chỉ IP 10.24.1.10.

Bây giờ hãy kiểm tra nhật ký OpenVpn ở phía máy chủ (

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

). Tại đây, bạn cũng có thể thấy rằng ứng dụng khách có chứng chỉ testuser1 đã kết nối thành công với máy chủ.

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

Bài viết liên quan