IPsec S2S VPN: Check Point R81.20 + pfSense CARP và Zabbix Monitor qua SNMP

IPsec S2S VPN giữa pfSense và Check Point là bài toán phổ biến khi 2 site dùng thiết bị khác vendor. Lab này dựng thêm một lớp redundancy bằng CARP HA: 2 pfSense node, mỗi node tạo 1 IPsec tunnel riêng về Check Point gateway — tổng cộng 2 tunnel song song, đảm bảo kết nối không bị gián đoạn khi 1 node gặp sự cố. Trên đường tunnel này, mình triển khai Zabbix 7.0 LTS bằng Docker Compose để monitor Ubuntu VM phía Check Point qua SNMPv2c.
| Component | Version |
|---|---|
| Check Point | R81.20 (Gaia) |
| pfSense | 2.8.1 CE |
| Zabbix | 7.0 LTS |
| Ubuntu | 24.04 LTS |
- 1. Mô hình lab
- 2. Chuẩn bị Objects trên SmartConsole
- 3. Cấu hình VPN Domain
- 4. Tạo Star VPN Community
- 5. Security Policy
- 6. Cấu hình pfSense-1
- 7. Cấu hình pfSense-2
- 8. Cấu hình CARP VIP LAN trên pfSense
- 9. Triển khai Zabbix 7.0 LTS bằng Docker Compose
- 10. Cấu hình SNMP trên ubuntu-202-11
- 11. Verify VPN tunnel
- 12. Thêm host vào Zabbix và kiểm tra monitoring
- 13. Test Failover: Node pfSense-1 down
- Lời kết
1. Mô hình lab
Mình chia lab thành 2 site:
Site A — pfSense + Zabbix (VLAN 201):
| Node | WAN (VLAN 200) | LAN | Vai trò |
|---|---|---|---|
| pfsense-1 | 10.10.200.11 | 10.10.201.254/24 | CARP Master |
| pfsense-2 | 10.10.200.12 | 10.10.201.253/24 | CARP Backup |
| — | — | 10.10.201.50 | CARP LAN VIP |
| zabbix-201-11 | — | 10.10.201.11/24 | Zabbix 7.0 (Docker) |
Site B — Check Point (VLAN 202):
| Node | WAN (VLAN 200) | LAN | Vai trò |
|---|---|---|---|
| checkpoint | 10.10.200.21 | 10.10.202.254/24 | Gateway R81.20 |
| ubuntu-202-11 | — | 10.10.202.11/24 | Target SNMP |
2 IPsec tunnel bảo vệ traffic giữa 10.10.201.0/24 và 10.10.202.0/24. Zabbix tại 10.10.201.11 kết nối SNMP tới 10.10.202.11 qua tunnel này.
2. Chuẩn bị Objects trên SmartConsole
Mình cấu hình phía Check Point trước — tạo các object đại diện cho 2 pfSense node của Site A.
Tạo Interoperable Device cho pfSense-1: Vào Objects → New → Gateways and Servers → Interoperable Device…:

Điền thông tin pfsense-1 và click OK:
| Field | Value |
|---|---|
| Name | pfsense-1 |
| IPv4 Address | 10.10.200.11 |

Tương tự tạo pfsense-2 với IP 10.10.200.12.

Tạo Network object cho LAN Site A: Vào Objects → New → Network…:
| Field | Value |
|---|---|
| Name | net-monitoring-lan |
| Network address | 10.10.201.0 |
| Net mask | 255.255.255.0 |

Tạo Network object cho LAN Site B:
| Field | Value |
|---|---|
| Name | net-customer-lan |
| Network address | 10.10.202.0 |
| Net mask | 255.255.255.0 |

3. Cấu hình VPN Domain
Mình khai báo VPN Domain cho từng object để Check Point biết subnet nào nằm sau mỗi peer.
Gateway Check Point — double-click gateway → Network Management → VPN Domain:
- Chọn User defined → chọn
net-customer-lan

Object pfsense-1 — double-click → IPSec VPN → VPN Domain:
- Chọn User defined → chọn
net-monitoring-lan

Object pfsense-2 — tương tự, chọn net-monitoring-lan (cùng subnet vì CARP pair).

4. Tạo Star VPN Community
Mình tạo Star Community với Check Point làm center, 2 pfSense là satellite.
Vào menu New… → More → VPN Community → Star Community…, đặt tên VPN-Monitoring.

Tab Gateways:
- Center Gateways: thêm gateway
Checkpoint - Satellite Gateways: thêm
pfsense-1vàpfsense-2
Failover giữa 2 tunnel hoạt động tự nhiên: pfsense-1 và pfsense-2 cùng là satellite với VPN domain net-monitoring-lan. Check Point duy trì Permanent Tunnel đến cả 2 — khi tunnel pfsense-1 down, traffic tự động chuyển qua pfsense-2 mà không cần cấu hình thêm.

Tab Encryption — chọn Custom encryption suite, IKEv2 only:
IKE Security Association (Phase 1):
| Parameter | Value |
|---|---|
| Encryption Algorithm | AES-256 |
| Data Integrity | SHA256 |
| Diffie-Hellman Group | Group 14 (2048 bit) |
IKE Security Association (Phase 2):
| Parameter | Value |
|---|---|
| Encryption Algorithm | AES-256 |
| Data Integrity | SHA256 |
| Use Perfect Forward Secrecy | ✓ |
| Diffie-Hellman Group | Group 14 (2048 bit) |

Tab Tunnel Management:
- Set Permanent Tunnels: ✓ → chọn On specific tunnels in the community → click Select Gateways… chọn
pfsense-1vàpfsense-2 - Tunnel down track: Log
- VPN Tunnel Sharing: One VPN tunnel per subnet pair

Tab Shared Secret:
| Peer Name | Shared Secret |
|---|---|
| pfsense-1 | Zxc123!@# |
| pfsense-2 | Zxc123!@# |
Password trong bài dùng
Zxc123!@#— đổi lại trong môi trường thực tế.

Click OK để lưu community.
5. Security Policy
Mình thêm rule cho phép traffic 2 chiều qua VPN. Vào Security Policies → Policy → Add Rule:
| No. | Name | Source | Destination | VPN | Services & Applications | Action | Track |
|---|---|---|---|---|---|---|---|
| 2 | SiteA-to-SiteB | net-monitoring-lan | net-customer-lan | VPN-Monitoring | Any | Accept | Log |
| 3 | SiteB-to-SiteA | net-customer-lan | net-monitoring-lan | VPN-Monitoring | Any | Accept | Log |
Publish → Install Policy lên gateway Check Point.

6. Cấu hình pfSense-1
Mình cấu hình IPsec tunnel trên pfSense-1 kết nối về Check Point.
Phase 1
Vào VPN → IPsec → Tunnels → Add P1:
| Parameter | Value |
|---|---|
| Description | VPN-To-Checkpoint |
| Key Exchange version | IKEv2 |
| Internet Protocol | IPv4 |
| Interface | WAN |
| Remote Gateway | 10.10.200.21 |
| Authentication Method | Mutual PSK |
| My Identifier | My IP address |
| Peer Identifier | Peer IP address |
| Pre-Shared Key | Zxc123!@# |
| Encryption Algorithm | AES |
| Key length | 256 bits |
| Hash | SHA256 |
| DH Group | 14 (2048 bit) |
| Life Time | 86400 |
| NAT Traversal | Auto |
| Dead Peer Detection | ✓ Enable DPD |
| Delay | 10 |
| Max failures | 5 |

Phase 2
Click Show Phase 2 Entries → Add P2:
| Parameter | Value |
|---|---|
| Description | VPN-To-Checkpoint-P2 |
| Mode | Tunnel IPv4 |
| Local Network | LAN subnet |
| NAT/BINAT translation | None |
| Remote Network | Network — 10.10.202.0/24 |
| Protocol | ESP |
| Encryption Algorithms | ✓ AES 256 bits |
| Hash Algorithms | ✓ SHA256 |
| PFS key group | 14 (2048 bit) |
| Life Time | 3600 |
| Automatically ping host | (trống) |
| Keep Alive | ✓ Enable periodic keep alive check |
Save → Apply Changes.


Firewall Rules
Vào Firewall → Rules → IPsec → Add:
| Field | Value |
|---|---|
| Action | Pass |
| Interface | IPsec |
| Address Family | IPv4 |
| Protocol | Any |
| Source | Network — 10.10.202.0/24 |
| Destination | Network — 10.10.201.0/24 |
| Description | Allow Site-B inbound |
Save → Apply Changes.

Kiểm tra trạng thái tunnel
Vào Status → IPsec → Overview để xác nhận tunnel pfSense-1 lên thành công. Phase 1 hiện Established và Phase 2 hiện Installed là đã kết nối xong.


7. Cấu hình pfSense-2
pfSense-2 cấu hình hoàn toàn tương tự pfSense-1. WAN interface khác (10.10.200.12) nên Check Point nhận diện đây là tunnel riêng biệt.
Phase 1 — giống pfSense-1, Remote Gateway vẫn là 10.10.200.21, Pre-Shared Key Zxc123!@#.


Phase 2 — giống pfSense-1: Local 10.10.201.0/24, Remote 10.10.202.0/24.

Firewall Rules → IPsec — thêm rule giống pfSense-1.

Kiểm tra 2 tunnel trên Check Point
Mở Check Point SmartView Monitor → Tunnels → Tunnels on Gateway → Checkpoint. Cả 2 tunnel về pfsense-1 (10.10.200.11) và pfsense-2 (10.10.200.12) đều hiển thị State: Up là thành công.

8. Cấu hình CARP VIP LAN trên pfSense
Mình tạo CARP VIP 10.10.201.50 trên LAN interface của cả 2 pfSense để Zabbix dùng làm default gateway — khi pfSense-1 down, VIP tự động chuyển sang pfSense-2 mà không cần đổi cấu hình gì trên Zabbix.
Trên pfSense-1 — vào Firewall → Virtual IPs → Add:
| Field | Value |
|---|---|
| Type | CARP |
| Interface | LAN |
| IP Address | 10.10.201.50 / 24 |
| Virtual IP Password | Zxc123!@# |
| VHID Group | 1 |
| Advertising Frequency | Base: 1 / Skew: 0 |
| Description | CARP-LAN-VIP |
Save → Apply Changes.

Trên pfSense-2 — cấu hình giống hệt pfSense-1, chỉ khác Skew: 100 để pfSense-2 là backup.

Sau khi apply trên cả 2 node, vào Status → Dashboard → widget CARP Status để xác nhận:
- pfSense-1:
10.10.201.50→ MASTER - pfSense-2:
10.10.201.50→ BACKUP


Trên VM zabbix-201-11, đặt default gateway là 10.10.201.50:
# Kiểm tra gateway hiện tại
ip route show default
# Đổi gateway qua netplan (Ubuntu 24.04)
sed -i 's/via: .*/via: 10.10.201.50/' /etc/netplan/50-cloud-init.yaml
netplan apply
# Xác nhận sau khi apply
ip route show default
9. Triển khai Zabbix 7.0 LTS bằng Docker Compose
Mình cài Docker và dựng Zabbix trên zabbix-201-11 (10.10.201.11).
Cài Docker
apt update && apt install -y ca-certificates curl
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \
https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" \
> /etc/apt/sources.list.d/docker.list
apt update && apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
Docker Compose file
mkdir -p /opt/zabbix && cat > /opt/zabbix/docker-compose.yml << 'EOF'
services:
postgres:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_DB: zabbix
POSTGRES_USER: zabbix
POSTGRES_PASSWORD: Zxc123!@#
volumes:
- postgres_data:/var/lib/postgresql/data
zabbix-server:
image: zabbix/zabbix-server-pgsql:ubuntu-7.0-latest
restart: unless-stopped
ports:
- "10051:10051"
environment:
DB_SERVER_HOST: postgres
POSTGRES_DB: zabbix
POSTGRES_USER: zabbix
POSTGRES_PASSWORD: Zxc123!@#
depends_on:
- postgres
zabbix-web:
image: zabbix/zabbix-web-nginx-pgsql:ubuntu-7.0-latest
restart: unless-stopped
ports:
- "80:8080"
environment:
DB_SERVER_HOST: postgres
POSTGRES_DB: zabbix
POSTGRES_USER: zabbix
POSTGRES_PASSWORD: Zxc123!@#
ZBX_SERVER_HOST: zabbix-server
PHP_TZ: Asia/Ho_Chi_Minh
depends_on:
- zabbix-server
- postgres
volumes:
postgres_data:
EOF
Khởi động
cd /opt/zabbix
docker compose up -d
docker compose ps
Truy cập Zabbix web tại http://10.10.201.11 — login mặc định Admin / zabbix.
Truy cập Zabbix từ ngoài qua pfSense Port Forward
Nếu không truy cập được trực tiếp vào VLAN 201, mình cấu hình NAT Port Forward trên pfSense-1 để forward http://10.10.200.11:8080 vào 10.10.201.11:80.
Vào Firewall → NAT → Port Forward → Add:
| Field | Value |
|---|---|
| Interface | WAN |
| Address Family | IPv4 |
| Protocol | TCP ← phải chọn TCP để hiện port fields |
| Destination / Type | WAN address |
| Destination port range | 8080 → 8080 |
| Redirect target IP / Type | Address or Alias |
| Redirect target IP / Address | 10.10.201.11 |
| Redirect target port | 80 |
| Description | Zabbix-Web-Forward |
| Filter rule association | Add associated filter rule |
Save → Apply Changes.

Truy cập Zabbix tại http://10.10.200.11:8080.


10. Cấu hình SNMP trên ubuntu-202-11
Mình cài và cấu hình snmpd trên ubuntu-202-11 (10.10.202.11) để Zabbix poll SNMP qua tunnel.
apt update && apt install -y snmpd snmp
Mình ghi đè config mặc định để cho phép Zabbix đọc qua community string:
cat > /etc/snmp/snmpd.conf << 'EOF'
agentaddress udp:161
rocommunity public 127.0.0.1
rocommunity public 10.10.201.0/24
sysLocation "Customer Site"
sysContact admin@customer.local
EOF
Ubuntu mặc định disable MIB names trong /etc/snmp/snmp.conf — bỏ comment dòng đó để snmpwalk dùng được tên OID:
apt install -y snmp-mibs-downloader
download-mibs
sed -i 's/^mibs :/# mibs :/' /etc/snmp/snmp.conf
systemctl enable snmpd && systemctl restart snmpd
Kiểm tra SNMP từ chính máy:
snmpwalk -v2c -c public 127.0.0.1 system
11. Verify VPN tunnel
Trước khi thêm host vào Zabbix, mình xác nhận tunnel đã up.
Ping test từ zabbix-201-11:
ping -c 4 10.10.202.11
SNMP test qua tunnel:
# Hostname
snmpget -v2c -c public 10.10.202.11 SNMPv2-MIB::sysName.0
# Danh sách IP interfaces
snmpwalk -v2c -c public 10.10.202.11 1.3.6.1.2.1.4.20
Nhận được sysName và danh sách IP interface trả về là tunnel hoạt động và SNMP reachable qua đường VPN.

12. Thêm host vào Zabbix và kiểm tra monitoring
Mình vào Zabbix web (http://10.10.201.11) → Configuration → Hosts → Create host.
Tab Host:
| Field | Value |
|---|---|
| Host name | ubuntu-202-11 |
| Visible name | Ubuntu Site B |
| Groups | Linux servers |
Tab Interfaces — Add → SNMP:
| Field | Value |
|---|---|
| IP address | 10.10.202.11 |
| Port | 161 |
| SNMP version | SNMPv2 |
| SNMP community | public |
Tab Templates:
- Thêm template Linux by SNMP
Click Add để lưu host.

Sau 1–2 phút, mình vào Monitoring → Latest data → filter host ubuntu-202-11. Các item như CPU utilization, memory, network interfaces sẽ bắt đầu có data.


Bật SNMP trên Check Point Gaia
Mình vào Gaia Portal (https://10.10.200.21) → System Management → SNMP.
SNMP General Settings — tick Enable SNMP Agent, Version giữ nguyên v1 / v2 / v3 (any), click Apply.
Agent Interfaces — giữ tất cả interface được chọn (eth0, eth1, lo).
V1 / V2 Settings — điền public vào Read Only Community String, click Apply.

Bật SNMP trên pfSense
Thực hiện trên cả 2 node pfSense-1 và pfSense-2. Vào Services → SNMP:
SNMP Daemon — tick Enable the SNMP Daemon and its controls.
SNMP Daemon Settings:
| Field | Value |
|---|---|
| Polling Port | 161 |
| Read Community String | public |
SNMP Modules — giữ nguyên mặc định (MibII, Netgraph, PF, Host Resources, UCD, Regex đều được chọn).
Interface Binding:
| Field | Value |
|---|---|
| Internet Protocol | IPv4 |
| Bind Interfaces | LAN |
Click Save.

Thêm Check Point và pfSense vào Zabbix
Mình dùng toàn bộ LAN IP để tránh phụ thuộc vào WAN routing: pfSense-1/2 reach trực tiếp qua LAN 201, Check Point reach qua IPsec tunnel (LAN 202). Thêm lần lượt 3 host vào Configuration → Hosts → Create host.
Host: checkpoint — dùng IP LAN 10.10.202.254 (qua IPsec tunnel):
| Tab | Field | Value |
|---|---|---|
| Host | Host name | checkpoint |
| Host | Groups | Applications |
| Interfaces | IP address | 10.10.202.254 |
| Interfaces | Port | 161 |
| Interfaces | SNMP version | SNMPv2 |
| Interfaces | SNMP community | public |
| Templates | — | Check Point Next Generation Firewall by SNMP |
Host: pfsense-1 — dùng IP LAN 10.10.201.254:
| Tab | Field | Value |
|---|---|---|
| Host | Host name | pfsense-1 |
| Host | Groups | Applications |
| Interfaces | IP address | 10.10.201.254 |
| Interfaces | Port | 161 |
| Interfaces | SNMP version | SNMPv2 |
| Interfaces | SNMP community | public |
| Templates | — | PFSense by SNMP |
Host: pfsense-2 — tương tự pfsense-1, IP 10.10.201.253.
Click Add cho từng host. Sau 1–2 phút, mình vào Monitoring → Latest data → filter từng host để xác nhận data đang về.

13. Test Failover: Node pfSense-1 down
Thiết kế này failover theo cấp node: CARP VIP gắn với pfSense node đang sống, không tự chuyển khi chỉ tunnel drop mà node vẫn chạy. Nếu chỉ tắt tunnel trên pfSense-1 (node vẫn up), VIP 10.10.201.50 giữ nguyên ở pfSense-1 — zabbix-201-11 vẫn route qua pfSense-1, không có tunnel nên ping/SNMP sẽ fail. Kịch bản failover thực tế là pfSense-1 down hoàn toàn: VIP và tunnel cùng chuyển sang pfSense-2.
Chuẩn bị: xác nhận baseline
Mình xác nhận trạng thái ban đầu trước khi test:



# Từ zabbix-201-11 — xác nhận SNMP hoạt động trước khi test
snmpget -v2c -c public 10.10.202.11 SNMPv2-MIB::sysName.0
ping -c 4 10.10.202.11
Test — Tắt pfSense-1 hoàn toàn
Kịch bản: pfSense-1 shutdown → CARP VIP chuyển sang pfSense-2 đồng thời Tunnel-1 drop → zabbix-201-11 tự động đi qua pfSense-2 và Tunnel-2 — Zabbix không mất data.
-
Tắt pfSense-1 VM hoàn toàn.
-
CARP failover — trên pfSense-2 → Status → Dashboard → widget CARP Status: sau ~5 giây, entry
10.10.201.50chuyển từ BACKUP sang MASTER.

- Tunnel failover — trên Check Point SmartView Monitor → Tunnel-2 (
10.10.200.12) vẫn Up.

- Kiểm tra SNMP vẫn hoạt động —
zabbix-201-11lúc này đi qua VIP10.10.201.50(pfSense-2 MASTER) → Tunnel-2 →ubuntu-202-11:
# Từ zabbix-201-11
ping -c 4 10.10.202.11
snmpget -v2c -c public 10.10.202.11 SNMPv2-MIB::sysName.0
- Trên Zabbix → Monitoring → Hosts: host
ubuntu-202-11vẫn hiển thị data liên tục — không có gap.
Lưu ý Port Forward: Khi pfSense-1 down, URL
http://10.10.200.11:8080không còn hoạt động. Nếu cần admin access vào Zabbix web khi pfSense-1 down, thêm cùng rule Port Forward trên pfSense-2 (Firewall → NAT → Port Forward, WAN10.10.200.12:8080→10.10.201.11:80).

- Khôi phục: bật lại pfSense-1 → pfSense-1 giành lại MASTER (Skew 0), Tunnel-1 renegotiate tự động.
Lời kết
Trọng tâm của lab là cặp pfSense CARP: mỗi node dựng 1 tunnel riêng về Check Point, nên khi pfSense-1 down hoàn toàn, CARP VIP tự chuyển sang pfSense-2 và Tunnel-2 vẫn đang sẵn sàng — Zabbix không mất kết nối. Check Point chỉ đóng vai remote end, không cần can thiệp gì. Mô hình dễ mở rộng: thêm site mới chỉ cần tạo thêm 2 tunnel (1 từ mỗi pfSense), Zabbix server không thay đổi.