OPNsense — Kiến trúc và triển khai OpenVPN HA
DOC PATH deployments/opnsense/openvpn-ha
Triển khai OpenVPN HA với bốn interface WAN, LAN, PFSYNC và XMLRPC; gộp vai trò khi thiếu interface. Đọc theo thứ tự các chương hoặc chọn mục cần tra cứu trong mục lục.
Kiến trúc và phạm vi áp dụng
Mục có tiêu đề “Kiến trúc và phạm vi áp dụng”Cấu trúc triển khai ưu tiên 4 interface trên mỗi node, tách WAN, LAN, đồng bộ state và đồng bộ cấu hình. Dùng cùng thứ tự interface, tên và network mapping trên cả hai node.
| Interface | Network trong VMware Workstation | Nhiệm vụ |
|---|---|---|
| WAN | VMnet8 | Kết nối FortiGate; nhận OpenVPN qua WAN CARP VIP. |
| LAN | VMnet1 | Kết nối các subnet và dịch vụ nội bộ. |
| PFSYNC | VMnet2 | Đồng bộ firewall state giữa hai node. |
| XMLRPC | VMnet3 | Đồng bộ cấu hình từ OPNsense01 sang OPNsense02; truy cập quản trị theo firewall rule. |
FortiGate chuyển tiếp kết nối OpenVPN vào CARP VIP trên WAN. Hai node OPNsense hoạt động theo vai trò MASTER/BACKUP, dùng mạng riêng cho đồng bộ state và cấu hình. User VPN truy cập dịch vụ nội bộ theo quyền được cấp.
Architecture Diagram
System Flow
Chọn Open Diagram để mở sơ đồ trên một trang riêng. Sơ đồ dùng chế độ sáng/tối của trang web; có thể chọn từng luồng, tạm dừng chuyển động, thay đổi tốc độ và phóng to 100%/125% để đọc chi tiết.
IP, tên miền và đường dẫn nội bộ được ẩn bằng tên theo vai trò. Sơ đồ thể hiện luồng kết nối; trạng thái MASTER/BACKUP được kiểm tra tại Web UI của từng node.
Đọc sơ đồ
Mục có tiêu đề “Đọc sơ đồ”| Luồng | Ý nghĩa |
|---|---|
| 1 — Quản trị | Admin truy cập Web UI/SSH qua địa chỉ riêng của mỗi node, với quyền và nguồn truy cập được giới hạn. |
| 2 — Kết nối VPN | Client → Internet → FortiGate NAT UDP 1325 → WAN CARP VIP → node giữ VIP. |
| 3 — CARP | Xác định MASTER/BACKUP và chuyển quyền giữ VIP khi node lỗi; không chia đều kết nối cho hai node. |
| 4 — pfsync | Đồng bộ firewall states hai chiều qua VMnet2. |
| 5 — XMLRPC | Đồng bộ các phần cấu hình được chọn từ OPNsense01 sang OPNsense02 qua VMnet3. |
| 6 — Truy cập nội bộ | OpenVPN xác thực user, TOTP và client certificate; firewall/RBAC giới hạn tài nguyên, Split DNS phân giải tên nội bộ. |
| 7 — Giám sát | Zabbix Server/Proxy theo dõi node, CARP, OpenVPN, tài nguyên và certificate; gửi cảnh báo qua Telegram. |
| 8 — Backup | Mỗi node gửi cấu hình XML đến thư mục riêng trên Synology NAS qua SFTP, xác thực bằng SSH key. |
Các số đánh dấu dùng để chọn và đọc từng luồng trên sơ đồ, không biểu thị thứ tự triển khai.
Phân chia mạng
Mục có tiêu đề “Phân chia mạng”Trên VMware Workstation, gán bốn vNIC của mỗi node vào các VMnet tương ứng:
| VMnet | Vai trò | Mạng đại diện | Địa chỉ node / dịch vụ |
|---|---|---|---|
| VMnet8 | WAN | wan-network/24 |
opnsense01-wan, opnsense02-wan, wan-carp-vip; nhận NAT từ FortiGate. |
| VMnet1 | LAN | lan-network/24 |
opnsense01-lan, opnsense02-lan; kết nối VM và dịch vụ nội bộ. |
| VMnet2 | pfsync | pfsync-network/24 |
opnsense01-pfsync, opnsense02-pfsync; dành cho đồng bộ state. |
| VMnet3 | XMLRPC | xmlrpc-network/24 |
Interface đồng bộ cấu hình riêng; chiều OPNsense01 → OPNsense02. |
Các tên trên đại diện cho địa chỉ hoặc subnet cần thay bằng thông số thực tế. Pool cấp IP cho VPN client thuộc mạng tunnel riêng, không phải VMnet3, dù cách đặt tên hoặc dải địa chỉ có thể trông tương tự.
WAN CARP VIP là đích NAT của FortiGate. Khi OPNsense làm default gateway cho LAN, cấu hình thêm LAN CARP VIP và cho client dùng VIP đó. IP riêng của node và VIP phải cùng subnet trên từng interface.
Gộp vai trò khi thiếu interface
Mục có tiêu đề “Gộp vai trò khi thiếu interface”| Số interface cấp được cho mỗi node | Cách phân chia | Điều kiện vận hành |
|---|---|---|
| 4 — ưu tiên | WAN, LAN, PFSYNC, XMLRPC riêng | State sync và config sync có đường riêng. |
| 3 | WAN, LAN, HA; HA dùng chung cho pfsync và XMLRPC | Chọn HA làm interface pfsync; XMLRPC dùng IP HA của node phụ. Giới hạn truy cập tới hai node và admin được cấp quyền. |
| 2 | WAN và LAN; pfsync/XMLRPC dùng chung LAN | LAN phải là network tin cậy và đủ bandwidth. Giới hạn nguồn/đích đồng bộ giữa hai node; theo dõi state sync khi LAN có tải cao. |
Khi thiếu cổng vật lý nhưng switch và hypervisor hỗ trợ VLAN, có thể tách các vai trò thành VLAN interface trên trunk. VLAN tách traffic ở lớp logic; các VLAN trên cùng cổng vẫn dùng chung bandwidth và cùng chịu ảnh hưởng khi cổng đó lỗi. Giữ WAN tách khỏi traffic quản trị và đồng bộ HA.
Ghi rõ mapping đang dùng trước khi cấu hình: interface pfsync, IP peer và IP nhận XMLRPC phải khớp với phương án đã chọn. Với hai interface, việc dùng chung LAN làm tăng ảnh hưởng của congestion và mở rộng phạm vi tiếp cận traffic đồng bộ; ưu tiên bổ sung interface khi có thể. OPNsense khuyến nghị interface riêng cho state sync vì lý do bảo mật và hiệu năng. Xem High Availability.
Truy cập và dịch vụ
Mục có tiêu đề “Truy cập và dịch vụ”- Điểm vào VPN:
vpn.example.comđại diện cho public endpoint; FortiGate chuyển tiếp UDP 1325 tớiwan-carp-vip, không tới địa chỉ cố định của riêng một node. - Xác thực: username/password + TOTP và client certificate riêng theo user. CSO/IP VPN riêng hỗ trợ ánh xạ firewall alias/RBAC.
- Split Tunnel: chỉ các mạng nội bộ đã cấu hình được đưa qua VPN.
- Split DNS: các truy vấn tên miền nội bộ được gửi đến
internal-dns; các tên miền khác dùng DNS hiện có của client. Phân giải được tên miền không đồng nghĩa với việc có quyền truy cập dịch vụ. - Dịch vụ nội bộ: Sonar, Portainer, Console, Monitor, SSH Portal, ERP, Document, PM, Hardware Monitor và Nextcloud.
Giám sát và backup
Mục có tiêu đề “Giám sát và backup”zabbix-server và zabbix-proxy đại diện cho các thành phần giám sát. Theo dõi trạng thái OPNsense/CARP/OpenVPN, CPU/RAM/disk/interface, tính sẵn sàng dịch vụ và hạn certificate; cảnh báo được gửi qua Telegram.
Synology backup-nas nhận cấu hình XML hằng ngày qua SFTP, xác thực bằng SSH key. Mỗi node dùng thư mục riêng, ví dụ /volume1/backups/opnsense/primary/ và /volume1/backups/opnsense/secondary/. Bản backup này chỉ chứa cấu hình OPNsense; dữ liệu của các dịch vụ phía sau VPN cần có quy trình backup riêng.
Giới hạn HA
Mục có tiêu đề “Giới hạn HA”CARP duy trì VIP dùng chung, pfsync đồng bộ firewall state, còn XMLRPC đồng bộ các mục cấu hình đã chọn một chiều từ node chính sang node phụ. Mỗi cơ chế có vai trò riêng; vẫn cần backup cấu hình lên NAS.
Trang này hướng dẫn cấu hình và kiểm thử cụm OPNsense HA kết hợp OpenVPN. Các quy trình thu hồi quyền truy cập, gia hạn certificate và restore cấu hình nằm trong Vận hành VPN.
Các bước dưới đây dùng phương án 4 interface. Với phương án 3 hoặc 2 interface, áp dụng mapping trong bảng gộp vai trò khi chọn interface và địa chỉ đồng bộ.
1. Phạm vi và kiến trúc
Mục có tiêu đề “1. Phạm vi và kiến trúc”1.1. Mục tiêu
Mục có tiêu đề “1.1. Mục tiêu”Triển khai 2 node OPNsense theo mô hình High Availability nhằm bảo đảm:
- OpenVPN vẫn hoạt động khi một node gặp sự cố.
- Dùng CARP VIP làm IP dịch vụ chung.
- Đồng bộ state bằng pfsync.
- Đồng bộ cấu hình từ OPNsense01 → OPNsense02 bằng XMLRPC.
- Mỗi user VPN có local user, password, TOTP, client certificate và static VPN IP riêng.
- Phân quyền truy cập bằng Firewall Alias/RBAC.
- Giám sát bằng Zabbix, gửi cảnh báo qua Telegram và backup cấu hình lên Synology NAS qua SFTP.
1.2. Topology và thông số
Mục có tiêu đề “1.2. Topology và thông số”Internet │Public IP: <VPN_PUBLIC_IP> │FortiGate NAT UDP/1325 │ ▼CARP VIP: <WAN_CARP_VIP> │ ├──────────────────────────┐ │ │ ▼ ▼OPNsense01 OPNsense02MASTER BACKUP<OPNSENSE01_WAN_IP> <OPNSENSE02_WAN_IP> │ │ └──── CARP / pfsync ───────┘ │ ▼ OpenVPN Users <VPN_NETWORK_ADDRESS>/24Thông số chính
Mục có tiêu đề “Thông số chính”| Thành phần | Giá trị |
|---|---|
| Public IP | <VPN_PUBLIC_IP> |
| OpenVPN Protocol | UDP IPv4 |
| OpenVPN Port | 1325 |
| WAN OPNsense01 | <OPNSENSE01_WAN_IP> |
| WAN OPNsense02 | <OPNSENSE02_WAN_IP> |
| WAN CARP VIP | <WAN_CARP_VIP> |
| VPN Pool | <VPN_NETWORK_ADDRESS>/24 |
| DNS nội bộ | <INTERNAL_DNS_IP> |
| Zabbix Server | <ZABBIX_SERVER_IP> |
| Zabbix Agent | TCP 10050 |
1.3. Luồng dịch vụ
Mục có tiêu đề “1.3. Luồng dịch vụ”FortiGate NAT ↓CARP VIP ↓OPNsense HACARP + pfsync + XMLRPC ↓OpenVPNCertificate + Password + TOTP ↓Static VPN IP ↓RBAC + Split DNS ↓Internal ResourcesKèm theo:
Zabbix MonitoringCertificate Expiry AlertTelegramSFTP BackupHA Failover ValidationCác bước dưới đây cấu hình cụm OPNsense OpenVPN HA theo mapping WAN, LAN, PFSYNC và XMLRPC đã xác định.
2. Chuẩn bị hai node
Mục có tiêu đề “2. Chuẩn bị hai node”2.1. Tài nguyên và VMware Port Group
Mục có tiêu đề “2.1. Tài nguyên và VMware Port Group”VM OPNsense
Mục có tiêu đề “VM OPNsense”Mỗi node tối thiểu nên có:
- 2 vCPU
- 4 GB RAM
- 20 GB disk
- 4 vNIC: WAN, LAN, PFSYNC và XMLRPC.
Gán vNIC và network theo cùng thứ tự trên hai node; kiểm tra MAC address trong inventory để tránh chọn nhầm interface. Khi chỉ cấp được 3 hoặc 2 interface, dùng phương án gộp vai trò ở đầu bài.
VMware Port Group
Mục có tiêu đề “VMware Port Group”Trên VMware Workstation, dùng VMnet theo bảng mapping. Khi chạy trên ESXi/vSphere, kiểm tra chính sách virtual MAC trên các Port Group mang CARP:
Promiscuous Mode = AcceptMAC Address Changes = AcceptForged Transmits = AcceptNếu không bật, CARP có thể hiển thị đúng MASTER/BACKUP nhưng VIP không hoạt động ổn định.
2.2. Cài đặt và địa chỉ mạng
Mục có tiêu đề “2.2. Cài đặt và địa chỉ mạng”OPNsense01
Mục có tiêu đề “OPNsense01”Hostname: OPNsense01WAN: <OPNSENSE01_WAN_IP>/<WAN_PREFIX>LAN: <OPNSENSE01_LAN_IP>/<LAN_PREFIX>PFSYNC: <OPNSENSE01_PFSYNC_IP>/<PFSYNC_PREFIX>XMLRPC: <OPNSENSE01_XMLRPC_IP>/<XMLRPC_PREFIX>OPNsense02
Mục có tiêu đề “OPNsense02”Hostname: OPNsense02WAN: <OPNSENSE02_WAN_IP>/<WAN_PREFIX>LAN: <OPNSENSE02_LAN_IP>/<LAN_PREFIX>PFSYNC: <OPNSENSE02_PFSYNC_IP>/<PFSYNC_PREFIX>XMLRPC: <OPNSENSE02_XMLRPC_IP>/<XMLRPC_PREFIX>Các giá trị *_PREFIX là prefix của subnet tương ứng trong inventory; hai node dùng cùng subnet cho từng vai trò. Đặt default gateway về FortiGate qua WAN. PFSYNC và XMLRPC nối trực tiếp cùng subnet giữa hai node, không dùng default gateway riêng.
Sau khi cấu hình, kiểm tra:
- Hai node ping được nhau.
- Hai node truy cập được gateway.
- Truy cập được WebGUI.
- Thời gian hệ thống chính xác và NTP đồng bộ thành công.
- DNS hoạt động.
2.3. Định tuyến riêng từng node
Mục có tiêu đề “2.3. Định tuyến riêng từng node”Kiểm tra routing table trên từng node sau khi gán interface:
- WAN đi đến FortiGate bằng IP riêng của node; việc quản trị node phụ không phụ thuộc node đang giữ VIP.
- Hai địa chỉ PFSYNC liên lạc trực tiếp trên network PFSYNC. Hai địa chỉ XMLRPC liên lạc trực tiếp trên network XMLRPC.
- Các subnet nội bộ ngoài LAN cần route tới đúng next hop; đường về VPN subnet cũng phải có trên router của các subnet đó.
- Chỉ thêm static route hoặc FRR route theo routing plan thực tế. Không thêm host route /32 để bù cho việc gán sai subnet hoặc interface.
- Cấu hình interface và route riêng của mỗi node được quản lý trên node đó; không đồng bộ chúng qua XMLRPC.
Trước khi tiếp tục, kiểm tra reachability giữa hai peer riêng trên PFSYNC và XMLRPC, từ admin tới IP quản trị từng node, và từ từng node tới gateway/DNS/NTP.
3. Cấu hình HA
Mục có tiêu đề “3. Cấu hình HA”3.1. CARP
Mục có tiêu đề “3.1. CARP”Vào:
Interfaces → Virtual IPs → SettingsOPNsense01
Mục có tiêu đề “OPNsense01”Type: CARPInterface: WANAddress: <WAN_CARP_VIP>/<WAN_PREFIX>VHID: 1Advbase: 1Advskew: 0OPNsense02
Mục có tiêu đề “OPNsense02”Type: CARPInterface: WANAddress: <WAN_CARP_VIP>/<WAN_PREFIX>VHID: 1Advbase: 1Advskew: 100Kỳ vọng:
OPNsense01 = MASTEROPNsense02 = BACKUPKiểm tra tại:
Interfaces → Virtual IPs → StatusKiểm tra WAN VIP từ FortiGate hoặc host được phép trên WAN. Đặt cùng CARP password trên hai node; VIP dùng cùng subnet mask với WAN. Nếu LAN cần gateway HA, tạo thêm CARP VIP trên LAN với VHID riêng và cùng subnet mask với LAN. Chi tiết tại Configure CARP.
3.2. pfsync
Mục có tiêu đề “3.2. pfsync”pfsync dùng để đồng bộ state table giữa hai firewall.
Vào:
System → High Availability → SettingsOPNsense01
Mục có tiêu đề “OPNsense01”Synchronize all states via: PFSYNCSynchronize Peer IP: <OPNSENSE02_PFSYNC_IP>OPNsense02
Mục có tiêu đề “OPNsense02”Synchronize all states via: PFSYNCSynchronize Peer IP: <OPNSENSE01_PFSYNC_IP>Với 3 interface, chọn HA và IP HA của peer; với 2 interface, chọn LAN và IP LAN của peer. Cấu hình tương ứng trên cả hai node. Sau đó tạo traffic qua firewall và xác nhận state được đồng bộ.
3.3. XMLRPC
Mục có tiêu đề “3.3. XMLRPC”XMLRPC chỉ cấu hình một chiều:
OPNsense01 → OPNsense02Trên OPNsense01:
System → High Availability → SettingsKhai báo:
Synchronize Config to IP: <OPNSENSE02_XMLRPC_IP>Remote Username: <HA_SYNC_USER>Remote Password: <PASSWORD>Với 3 interface, đích XMLRPC là IP HA của OPNsense02; với 2 interface, dùng IP LAN của OPNsense02. Web UI phải lắng nghe trên interface nhận XMLRPC. Node phụ để trống cấu hình đồng bộ ngược; chỉ node chính chủ động gửi cấu hình.
Nên đồng bộ
Mục có tiêu đề “Nên đồng bộ”- Aliases
- Firewall Rules
- NAT
- Virtual IPs
- OpenVPN
- Users / Groups
- Authentication Servers
- Certificates / Authorities
- Unbound DNS
Không đồng bộ
Mục có tiêu đề “Không đồng bộ”- Interfaces
- Static Routes
- FRR
- WebGUI
- Tunables
- Các cấu hình riêng từng node
Với object chỉ áp dụng cho một node, dùng:
No XMLRPC SyncKhi cần đồng bộ thủ công:
System → High Availability → Status→ Synchronize and reconfigure all4. Cấu hình OpenVPN
Mục có tiêu đề “4. Cấu hình OpenVPN”4.1. CA, server certificate và CRL
Mục có tiêu đề “4.1. CA, server certificate và CRL”OpenVPN CA
Mục có tiêu đề “OpenVPN CA”Vào:
System → Trust → AuthoritiesTạo:
Name: OpenVPN-CAServer Certificate
Mục có tiêu đề “Server Certificate”Vào:
System → Trust → CertificatesTạo:
Type: Server CertificateIssuer: OpenVPN-CAName: OpenVPN-ServerVào:
System → Trust → RevocationTạo:
Name: OpenVPN-CRLCA: OpenVPN-CACRL lưu danh sách certificate đã bị revoke, ví dụ khi nghi private key bị lộ hoặc cần thu hồi certificate.
4.2. Xác thực và TOTP
Mục có tiêu đề “4.2. Xác thực và TOTP”Mô hình hiện tại:
Local User + Password + TOTP + Client CertificateAuthentication Server:
OpenVPN-TOTPMỗi user có:
Username riêngPassword riêngTOTP seed riêngClient Certificate riêng4.3. OpenVPN Instance
Mục có tiêu đề “4.3. OpenVPN Instance”Vào:
VPN → OpenVPN → InstancesCấu hình chính:
Role: ServerProtocol: UDP IPv4Port: 1325Device Mode: TUNTunnel Network: <VPN_NETWORK_ADDRESS>/24Certificate Authority: OpenVPN-CAServer Certificate: OpenVPN-ServerCertificate Revocation List: OpenVPN-CRLAuthentication: OpenVPN-TOTPVerify Client Certificate: requireStrict User/CN Matching: ONUsername as CN: ONRequire Client Provisioning: ONRenegotiate Time: 0TLS mode: tls-cryptSau khi hoàn tất, đồng bộ cấu hình sang OPNsense02.
4.4. NAT và firewall
Mục có tiêu đề “4.4. NAT và firewall”Trên FortiGate:
<VPN_PUBLIC_IP>:1325/UDP ↓ NAT<WAN_CARP_VIP>:1325/UDPVIP <WAN_CARP_VIP> luôn do node MASTER giữ.
Trên OPNsense, cấu hình rule theo interface nhận traffic:
| Interface | Nguồn → đích | Traffic được phép |
|---|---|---|
| WAN | Nguồn VPN được phép → WAN CARP VIP | UDP/1325 cho OpenVPN. Kiểm tra địa chỉ nguồn thực sau NAT trên FortiGate. |
| Interface mang CARP VIP | Hai node trên cùng segment | Protocol CARP cho trao đổi trạng thái VIP. |
| PFSYNC | Hai IP PFSYNC của cluster | Protocol pfsync; không mở cho toàn bộ LAN hoặc WAN. |
| XMLRPC | OPNsense01 XMLRPC → OPNsense02 XMLRPC | HTTPS tới port Web UI đang cấu hình để đồng bộ. |
| XMLRPC/quản trị | Admin được cấp quyền → IP riêng từng node | HTTPS/SSH theo dịch vụ quản trị đã bật. |
| OpenVPN | VPN subnet/alias user → tài nguyên nội bộ | Chỉ các dịch vụ được cấp trong RBAC. |
Với 3 interface, đặt hai rule đồng bộ trên HA. Với 2 interface, đặt trên LAN và giới hạn đúng IP hai node. Giữ các rule đồng bộ hoạt động trên node phụ trước lần XMLRPC sync đầu tiên.
4.5. Split DNS
Mục có tiêu đề “4.5. Split DNS”OpenVPN gửi cấu hình DNS nội bộ xuống client:
DNS Servers:<INTERNAL_DNS_IP>DNS Domain list được dùng cho Split DNS.
Ví dụ:
console.example.commonitor.example.comhardware-monitor.example.comdrive.example.comMục tiêu:
Các domain trong DNS Domain list ↓<INTERNAL_DNS_IP>
Các domain Internet khác ↓DNS hiện tại của máy userNếu DNS <INTERNAL_DNS_IP> gặp lỗi, kiểm tra resolver thực tế trên client. DNS public không thay thế DNS nội bộ để phân giải private domain.
5. Tài khoản kiểm thử và phân quyền
Mục có tiêu đề “5. Tài khoản kiểm thử và phân quyền”5.1. Tạo tài khoản VPN
Mục có tiêu đề “5.1. Tạo tài khoản VPN”Tạo một user kiểm thử riêng, ví dụ user-system với IP <VPN_USER_IP> chưa được sử dụng. Mỗi user có Local User, password, TOTP, client certificate và static VPN IP riêng.
Thực hiện theo quy trình cấp tài khoản VPN:
- Xác nhận IP tunnel không trùng CSO hoặc alias hiện có.
- Tạo Local User trong group
vpn_users_groupvà cấu hình TOTP. - Tạo client certificate từ
OpenVPN-CA; CN phải khớp username. - Tạo CSO cùng username và gán IP tunnel phù hợp topology của instance.
- Sau khi cấu hình RBAC bên dưới, đồng bộ sang node phụ và xác nhận user, certificate, CSO cùng alias.
5.2. Firewall Alias và RBAC
Mục có tiêu đề “5.2. Firewall Alias và RBAC”Ví dụ alias:
VPN_SYSTEM_DEVOPSType:
Host(s)Content:
<VPN_USER_IP><VPN_USER_2_IP>...Tạo firewall rule:
Source = VPN_SYSTEM_DEVOPSDestination = server/subnet được cấp quyềnAction = PassCuối rule set nên áp dụng default deny để chặn truy cập ngoài phạm vi đã cấp cho user.
5.3. Export profile
Mục có tiêu đề “5.3. Export profile”Thực hiện export và bàn giao profile cho đúng user và certificate. Mỗi user dùng một file .ovpn riêng; không chia sẻ profile hoặc private key. Sau đó kiểm tra kết nối theo mục tiếp theo.
5.4. Kiểm tra kết nối
Mục có tiêu đề “5.4. Kiểm tra kết nối”Trên OpenVPN Connect:
- Import
.ovpn. - Nhập username/password.
- Nhập TOTP.
- Connect.
Kiểm tra:
VPN ConnectedStatic IP đúngSplit DNS hoạt độngRBAC đúngInternal access đúngKhông truy cập tài nguyên ngoài quyềnQuy trình cấp tài khoản đầy đủ: Cấp tài khoản VPN.
6. Cấu hình giám sát
Mục có tiêu đề “6. Cấu hình giám sát”6.1. Zabbix Agent
Mục có tiêu đề “6.1. Zabbix Agent”Cài Zabbix Agent trên cả hai OPNsense.
Port: 10050/TCPTemplate: FreeBSD by Zabbix agentCustom items đang dùng:
opnsense.carp.demotionopnsense.carp.roleopnsense.openvpn.statusopnsense.ha.peer.statusÝ nghĩa:
opnsense.carp.demotion→ theo dõi CARP demotion
opnsense.carp.role→ 1 = MASTER→ 0 = BACKUP
opnsense.openvpn.status→ trạng thái OpenVPN
opnsense.ha.peer.status→ kiểm tra HA peer6.2. Cảnh báo certificate hết hạn
Mục có tiêu đề “6.2. Cảnh báo certificate hết hạn”Zabbix Server:
<ZABBIX_SERVER_IP>Master item:
Name: OPNsense certificate API - RawType: HTTP agentKey: opnsense.api.cert.rawURL:https://<OPNSENSE01_XMLRPC_IP>/api/trust/cert/search?current=1&rowCount=1000API credentials:
{$OPNSENSE.API.KEY}{$OPNSENSE.API.SECRET}API group chỉ cho phép truy cập từ nguồn sau:
Source Networks:<ZABBIX_SERVER_IP>/32Master item:
History = Do not storePreprocessing chỉ giữ:
uuidcommonnamevalid_toĐồng thời loại các field không cần thiết như:
prvprv_payloadcrtDiscovery tạo item:
VPN certificate <CN>: ExpirationTrigger prototype:
Certificate {#CN} will expire within 3 daysSeverity:
WarningThreshold:
<= now() + 259200Zabbix gửi cảnh báo qua Telegram khi certificate còn ≤ 3 ngày trước khi hết hạn.
7. Cấu hình backup
Mục có tiêu đề “7. Cấu hình backup”Hai node backup cấu hình qua SFTP lên Synology NAS.
OPNsense01 \ → SFTP → Synology NAS /OPNsense02Nguyên tắc:
- Mỗi node có thư mục backup riêng.
- Xác thực bằng SSH key.
- Private key nằm trên OPNsense.
- Public key được khai báo trên Synology DSM.
- File backup là XML.
- SFTP có thể dùng port tùy chỉnh.
Ví dụ:
sftp://user@host:port//pathQuy trình restore: Backup và restore.
8. Kiểm thử HA
Mục có tiêu đề “8. Kiểm thử HA”8.1. Controlled Failover
Mục có tiêu đề “8.1. Controlled Failover”Trên OPNsense01 bật:
Persistent CARP Maintenance ModeKỳ vọng:
OPNsense02 → MASTERCARP VIP vẫn hoạt độngVPN vẫn hoạt động8.2. Failback
Mục có tiêu đề “8.2. Failback”Tắt Maintenance Mode trên OPNsense01.
Kỳ vọng:
OPNsense01 → MASTEROPNsense02 → BACKUP8.3. Hard Failure
Mục có tiêu đề “8.3. Hard Failure”Tắt nguồn OPNsense01 để mô phỏng node ngừng hoạt động đột ngột.
Kỳ vọng:
OPNsense02 → MASTER<WAN_CARP_VIP> vẫn reachableVPN login mới vẫn thành công8.4. Fresh VPN Login trên Node2
Mục có tiêu đề “8.4. Fresh VPN Login trên Node2”Khi OPNsense01 ngừng hoạt động:
Disconnect VPN→ Connect lạiKiểm tra:
Certificate OKUsername/Password OKTOTP OKStatic VPN IP OKDNS OKRBAC OK8.5. HA Link Failure
Mục có tiêu đề “8.5. HA Link Failure”Với 4 interface, kiểm thử PFSYNC và XMLRPC riêng từng lần trong maintenance window:
- Ngắt PFSYNC: kiểm tra trạng thái CARP và dịch vụ, ghi nhận state sync bị gián đoạn; không kỳ vọng các state mới xuất hiện trên peer trong thời gian mất link.
- Ngắt XMLRPC: thử đồng bộ cấu hình và xác nhận lỗi kết nối; kiểm tra state sync trên PFSYNC vẫn hoạt động.
- Khôi phục từng link và xác nhận lại cả state sync lẫn config sync trước bước tiếp theo.
Với 3 interface, mất HA ảnh hưởng cả hai luồng đồng bộ. Với 2 interface, mất LAN còn ảnh hưởng đường truy cập nội bộ. Ghi đủ các kết quả sau:
CARP rolepfsyncOpenVPNRoutingChỉ kiểm thử split-brain trên production khi có yêu cầu rõ ràng và kế hoạch kiểm soát tác động.