Danh mục sản phẩm
Lab: Dựng IPsec VPN Dialup (Dynamic IP) trên FortiGate
1. Liên hệ thực tế
Anh Nam dựng lại đúng 2 tình huống chị Lan đã nói: một chi nhánh dùng ADSL IP động kết nối về Hub theo kiểu Site-to-Site, và một user dùng FortiClient kết nối dialup từ bên ngoài. Chị Lan nhắc: "Lab này khác Lab Site-to-Site tĩnh ở chỗ — em không gõ remote-gw ở phía Hub, và phải kiểm tra kỹ net-device/mode-cfg cho đúng từng kịch bản, gõ nhầm là tunnel lên nhưng traffic không đi được."
Lab dựng lại đúng 2 kịch bản đã học ở bài lý thuyết: Hub (trụ sở chính, IP tĩnh) nhận kết nối từ Chi nhánh B (IP động, đóng vai trò Site-to-Site) và từ FortiClient (user di động, dùng mode-cfg + EAP).
2. Kiến thức cốt lõi — Các bước thực hành
2.1 Sơ đồ Lab
| Thiết bị | WAN IP | LAN/Pool | Vai trò |
|---|---|---|---|
| FGT-Hub | 198.51.100.5/24 (tĩnh) | 10.1.0.0/16 (internal) | Hub — type dynamic, chờ kết nối |
| FGT-ChiNhanhB | IP động (DHCP từ ADSL, giả lập trong Lab) | 10.3.0.0/16 (internal) | Peer Site-to-Site IP động |
| FortiClient PC | IP động (bất kỳ mạng nào) | Nhận IP ảo từ pool 10.9.9.1–10.9.9.100 | Peer Dialup cá nhân |
Yêu cầu môi trường: 2 FortiGate (FGT-Hub, FGT-ChiNhanhB) + 1 máy cài FortiClient VPN (hoặc FortiClient trong VM), FGT-ChiNhanhB nên đặt wan1 ở chế độ DHCP client để giả lập IP động thực sự thay đổi.
2.2 Bước 1 — Cấu hình phía Hub (FGT-Hub): Site-to-Site cho Chi nhánh B
config vpn ipsec phase1-interface
edit "vpn-chinhanh-b"
set type dynamic
set interface "wan1"
set peertype any
set authmethod psk
set psksecret "MatKhauManhCanKy2024!"
set proposal aes256gcm-prfsha384
set dhgrp 21
set net-device enable
set add-route disable
set dpd on-idle
set dpd-retrycount 3
set dpd-retryinterval 20
next
end
config vpn ipsec phase2-interface
edit "vpn-chinhanh-b-p2"
set phase1name "vpn-chinhanh-b"
set proposal aes256gcm
set pfs enable
set dhgrp 21
set src-subnet 10.1.0.0 255.255.0.0
set dst-subnet 10.3.0.0 255.255.0.0
next
end
⚠️ Điểm dễ sai #1: Gõ nhầm thêm set remote-gw vào Phase 1 dynamic — tham số này không hợp lệ với type dynamic và sẽ bị FortiGate từ chối hoặc gây lỗi cấu hình.
2.3 Bước 2 — Cấu hình phía Chi nhánh B (FGT-ChiNhanhB): peer chủ động kết nối
config vpn ipsec phase1-interface
edit "vpn-hub"
set type static
set interface "wan1"
set remote-gw 198.51.100.5
set authmethod psk
set psksecret "MatKhauManhCanKy2024!"
set proposal aes256gcm-prfsha384
set dhgrp 21
set dpd on-idle
next
end
config vpn ipsec phase2-interface
edit "vpn-hub-p2"
set phase1name "vpn-hub"
set proposal aes256gcm
set pfs enable
set dhgrp 21
set src-subnet 10.3.0.0 255.255.0.0
set dst-subnet 10.1.0.0 255.255.0.0
next
end
Lưu ý: phía Chi nhánh B vẫn dùng type static vì chi nhánh biết chính xác IP của Hub (Hub mới là bên IP không cố định theo góc nhìn kết nối — thực ra ở đây Hub có IP tĩnh, Chi nhánh B mới là bên IP động; Chi nhánh B luôn là bên chủ động gọi đi nên vẫn khai remote-gw trỏ về Hub).
2.4 Bước 3 — Routing cho Site-to-Site IP động
Vì Phase 1 phía Hub đã bật net-device enable, Hub không cần khai static route thủ công — IPsec peer route sẽ tự động được tạo khi tunnel lên. Kiểm tra route tự động này:
get router info routing-table all
Tìm dòng route tới 10.3.0.0/16 xuất hiện tự động qua interface vpn-chinhanh-b sau khi tunnel established — nếu route không tự xuất hiện, kiểm tra lại net-device có đang enable không.
Phía Chi nhánh B thì cần khai static route như Lab Site-to-Site trước:
config router static
edit 1
set dst 10.1.0.0 255.255.0.0
set device "vpn-hub"
next
end
2.5 Bước 4 — Kiểm tra Phase 1/Phase 2 của Site-to-Site IP động
diagnose vpn ike gateway list diagnose vpn tunnel list
Trên FGT-Hub, chú ý trường IP peer hiển thị trong diagnose vpn ike gateway list — đây chính là IP động hiện tại của Chi nhánh B mà Hub học được từ gói IKE đến, không phải giá trị cấu hình sẵn (vì Hub không hề khai remote-gw).
Thử nghiệm đổi IP động: Nếu môi trường cho phép, release/renew DHCP trên wan1 của FGT-ChiNhanhB để đổi IP, sau đó chờ tunnel tự tái thương lượng và kiểm tra lại diagnose vpn ike gateway list trên Hub — IP peer hiển thị phải cập nhật theo IP mới.
2.6 Bước 5 — Cấu hình Dialup cho FortiClient trên FGT-Hub
config user local
edit "nam.nguyen"
set type password
set passwd "MatKhauUser2024!"
next
end
config user group
edit "VPN-Users"
set member "nam.nguyen"
next
end
config vpn ipsec phase1-interface
edit "vpn-forticlient-dialup"
set type dynamic
set interface "wan1"
set ike-version 2
set peertype any
set net-device disable
set mode-cfg enable
set eap enable
set eap-identity send-request
set authusrgrp "VPN-Users"
set proposal aes256gcm-prfsha384
set dhgrp 21
set ipv4-start-ip 10.9.9.1
set ipv4-end-ip 10.9.9.100
set ipv4-netmask 255.255.255.0
set dns-mode auto
set dpd on-idle
set dpd-retrycount 3
set dpd-retryinterval 20
next
end
config vpn ipsec phase2-interface
edit "vpn-forticlient-dialup-p2"
set phase1name "vpn-forticlient-dialup"
set proposal aes256gcm
set pfs enable
set dhgrp 21
next
end
⚠️ Điểm dễ sai #2: Quên tạo user local + user group trước khi gán vào authusrgrp — Phase 1 sẽ báo lỗi hoặc không cho phép enable eap vì thiếu nhóm user tham chiếu.
2.7 Bước 6 — Firewall Policy cho cả hai kịch bản
config firewall address
edit "LAN-HQ"
set subnet 10.1.0.0 255.255.0.0
next
edit "LAN-ChiNhanh-B"
set subnet 10.3.0.0 255.255.0.0
next
edit "VPN-Client-Pool"
set type iprange
set start-ip 10.9.9.1
set end-ip 10.9.9.100
next
end
config firewall policy
edit 210
set name "hq-to-chinhanhb"
set srcintf "internal"
set dstintf "vpn-chinhanh-b"
set srcaddr "LAN-HQ"
set dstaddr "LAN-ChiNhanh-B"
set action accept
set schedule "always"
set service "ALL"
next
edit 211
set name "chinhanhb-to-hq"
set srcintf "vpn-chinhanh-b"
set dstintf "internal"
set srcaddr "LAN-ChiNhanh-B"
set dstaddr "LAN-HQ"
set action accept
set schedule "always"
set service "ALL"
next
edit 212
set name "forticlient-to-hq"
set srcintf "vpn-forticlient-dialup"
set dstintf "internal"
set srcaddr "VPN-Client-Pool"
set dstaddr "LAN-HQ"
set action accept
set schedule "always"
set service "ALL"
next
end
⚠️ Điểm dễ sai #3: Chỉ tạo 1 Policy chiều FortiClient → HQ mà quên rằng đa số ứng dụng cần phản hồi hai chiều trong cùng session — FortiGate xử lý stateful nên Policy 212 (một chiều) là đủ cho traffic do client khởi tạo, KHÔNG cần Policy ngược lại trừ khi HQ cần chủ động kết nối tới client (hiếm khi cần).
2.8 Bước 7 — Cấu hình và test FortiClient
Trên FortiClient (Windows/macOS):
- Tạo VPN connection mới, chọn IPsec VPN, Remote Gateway = IP public của FGT-Hub (198.51.100.5)
- Authentication Method: chọn theo đúng cấu hình Hub (ở đây EAP/username-password vì đã bật
eap enable) - Nhập username
nam.nguyen/ password đã tạo ở Bước 5 - Connect và quan sát log FortiClient
Trên FGT-Hub, kiểm tra kết nối dialup đã lên:
diagnose vpn tunnel list name vpn-forticlient-dialup get vpn ipsec tunnel summary
Xác nhận client đã được cấp IP ảo trong dải 10.9.9.1–10.9.9.100 (get vpn ipsec tunnel summary hiển thị IP ảo được gán cho từng peer đang kết nối).
Từ FortiClient, ping thử vào LAN-HQ (ví dụ 10.1.1.10):
ping 10.1.1.10
2.9 Bước 8 — Test DPD khi peer "biến mất" đột ngột
Ngắt kết nối FortiClient bằng cách rút cáp mạng/tắt wifi đột ngột (không disconnect qua UI) để giả lập peer mất kết nối không thông báo. Trên FGT-Hub, theo dõi:
diagnose vpn tunnel list name vpn-forticlient-dialup
Trong vài chu kỳ dpd-retryinterval (20 giây) x dpd-retrycount (3 lần), tunnel phải chuyển sang trạng thái down và IP ảo trong pool được giải phóng — nếu tunnel treo mãi ở trạng thái "up" dù client đã ngắt hẳn, kiểm tra lại cấu hình DPD đã bật đúng on-idle chưa.
3. Hỏi & Đáp
Trong Lab, tại sao Hub không hiện remote-gw nhưng vẫn biết traffic trả lời phải gửi về đúng peer nào?
FortiGate ghi nhận địa chỉ IP nguồn thực tế của gói IKE đến trong quá trình thiết lập Phase 1, gắn vào phiên tunnel động đó — mọi traffic trả lời trong phiên đó được gửi ngược lại đúng địa chỉ đã ghi nhận, không cần cấu hình tĩnh trước.
Nếu diagnose vpn tunnel list cho thấy dialup tunnel established nhưng FortiClient không nhận được IP ảo, nên kiểm tra gì?
Kiểm tra mode-cfg enable đã bật đúng chưa, dải ipv4-start-ip/ipv4-end-ip có bị trùng với dải IP khác đang dùng trong mạng nội bộ không, và xác nhận authusrgrp tham chiếu đúng group chứa user đang thử kết nối — sai group khiến EAP xác thực thất bại trước khi kịp cấp IP ảo.
Vì sao Lab dùng dpd on-idle thay vì tắt hẳn DPD để tiết kiệm tài nguyên Hub khi có nhiều dialup tunnel?
Tắt hẳn DPD khiến Hub giữ nguyên tunnel "sống" trong bảng dù peer đã mất kết nối từ lâu (không có gói FIN như TCP để báo đóng phiên), gây lãng phí tài nguyên và địa chỉ IP ảo trong pool bị giữ chỗ vô thời hạn. dpd on-idle là điểm cân bằng: chỉ kiểm tra khi tunnel không có traffic, không tốn tài nguyên kiểm tra liên tục nhưng vẫn phát hiện được peer chết.
4. Quiz
Câu 1: Khi cấu hình Phase 1 phía Hub với type dynamic, IP của peer được Hub biết đến từ đâu?
- A. Từ tham số
remote-gwkhai sẵn - B. Từ địa chỉ IP nguồn thực tế của gói IKE đến khi peer chủ động kết nối
- C. Từ DNS lookup tự động
- D. Hub không bao giờ biết IP của peer
Câu 2: Trong Lab, vì sao phía Chi nhánh B (dù có IP động) vẫn khai type static và remote-gw trỏ về Hub?
- A. Vì FortiOS bắt buộc luôn dùng type static
- B. Vì Chi nhánh B là bên chủ động gọi đi và biết chính xác IP tĩnh của Hub, dù bản thân Chi nhánh B có IP không cố định
- C. Vì type dynamic chỉ dùng được cho FortiClient
- D. Không có sự khác biệt, chọn loại nào cũng được
Câu 3: Nếu quên tạo user local/user group trước khi cấu hình authusrgrp cho Phase 1 dialup FortiClient, hậu quả gì?
- A. Không ảnh hưởng, FortiGate tự tạo user mặc định
- B. Phase 1 báo lỗi hoặc không cho phép enable eap vì thiếu nhóm user tham chiếu
- C. Tunnel vẫn lên bình thường nhưng không mã hóa
- D. Chỉ ảnh hưởng tới Phase 2, không ảnh hưởng Phase 1
Câu 4: Mục đích của bước test ở 2.9 (ngắt FortiClient đột ngột, không disconnect qua UI) là gì?
- A. Kiểm tra tốc độ mã hóa của tunnel
- B. Kiểm tra cơ chế DPD có phát hiện đúng peer đã mất kết nối và giải phóng IP ảo hay không
- C. Kiểm tra Phase 2 proposal có đúng không
- D. Không có mục đích cụ thể, chỉ là bước phụ
👉 Đáp án
Câu 1: B Với type dynamic, Hub không có remote-gw khai sẵn — IP của peer được Hub ghi nhận từ địa chỉ nguồn thực tế của gói IKE gửi đến khi peer chủ động kết nối.
Câu 2: B Chi nhánh B luôn là bên chủ động gọi đi tới Hub và biết chính xác IP tĩnh của Hub, nên phía Chi nhánh B vẫn dùng type static/remote-gw bình thường — bản chất "IP động" chỉ ảnh hưởng tới cấu hình phía Hub (bên nhận kết nối), không ảnh hưởng phía chủ động gọi đi.
Câu 3: B Thiếu user local/user group khiến authusrgrp tham chiếu tới một nhóm không tồn tại hoặc rỗng, khiến Phase 1 báo lỗi cấu hình hoặc không thể enable eap đúng cách.
Câu 4: B Bước này mô phỏng peer mất kết nối đột ngột không qua quy trình đóng phiên chuẩn, dùng để xác nhận DPD (dpd-retrycount x dpd-retryinterval) phát hiện đúng tunnel chết và giải phóng IP ảo trong pool, tránh tài nguyên bị giữ chỗ vô thời hạn.
📚 Bài Lab thuộc khóa học FortiGate của VNExperts
🧭 Điều hướng
| ⬅️ Bài lý thuyết | 🏠 Mục lục khóa học | Bài kế tiếp ➡️ |
|---|---|---|
| IPSec VPN qua Dynamic IP (Dialup) trên FortiGate | Mục lục khóa học FortiGate | IPsec Hardware Offload: tăng tốc bằng NP |
