Vấn đề: Rào cản Hiệu suất của ‘Mạng Phẳng’
Hầu hết các quản trị viên mạng bắt đầu triển khai OSPF bằng cách đưa tất cả router vào Area 0. Trong một phòng lab nhỏ hoặc văn phòng startup với năm router, cách này hoạt động hoàn hảo. Tuy nhiên, thiết kế “phẳng” bắt đầu gặp khó khăn khi bạn quản lý 50, 100 hoặc 200 router chạy Linux đóng vai trò là edge gateway.
Trong một môi trường thực tế với 150 node, tôi đã chứng kiến một liên kết 1Gbps chập chờn ở chi nhánh xa khiến mức sử dụng CPU của router trung tâm (core router) nhảy từ 10% lên 95%. Bởi vì mọi router trong một vùng OSPF duy nhất phải duy trì một Cơ sở dữ liệu Trạng thái Liên kết (LSDB) giống hệt nhau, bất kỳ thay đổi nào cũng kích hoạt tính toán Shortest Path First (SPF) trên toàn bộ hệ thống. Điều này dẫn đến độ trễ hội tụ từ 10-15 giây và lãng phí tài nguyên trên phần cứng lẽ ra nên dành để chuyển tiếp gói tin thay vì tính toán lại bản đồ mạng.
Nguyên nhân gốc rễ: Sự phình to của LSDB và Quá tải SPF
Vấn đề xuất phát từ cách OSPF xử lý các Link State Advertisement (LSA). Trong thiết lập một vùng duy nhất (single-area), mọi node đều biết trạng thái chính xác của mọi liên kết trong toàn bộ hệ thống tự trị (autonomous system). Khi một subnet bị ngắt kết nối cách đó 5 bước nhảy (hop), một LSA Type 1 sẽ tràn ngập đến mọi router trong tổ chức.
Khi mạng phát triển, ba điều sau sẽ xảy ra:
- Cạn kiệt bộ nhớ: Một LSDB với hơn 5.000 prefix có thể tiêu tốn hàng trăm megabyte RAM, gây áp lực lên các node Linux cũ hoặc các máy ảo cấu hình thấp.
- Tải tính toán: Thuật toán Dijkstra (SPF) trở nên nặng nề hơn đáng kể khi số lượng node và liên kết tăng lên.
- Mất ổn định: Một sợi cáp quang chập chờn có thể tạo ra một “cơn bão định tuyến” làm mất ổn định toàn bộ mạng lưới.
Giải pháp: Thiết kế Phân tầng
Chúng ta giải quyết vấn đề này bằng cách chuyển từ cấu trúc liên kết phẳng sang cấu trúc phân tầng. Bằng cách chia mạng thành nhiều vùng (area), bạn sẽ giới hạn thông tin cấu trúc chi tiết trong các ranh giới cụ thể. Chỉ vùng xương sống (Backbone – Area 0) mới cần biết các đường dẫn tóm tắt đến các vùng khác.
Router Biên Vùng (Area Border Router – ABR) đóng vai trò là người phiên dịch tại đây. Nó tiếp nhận các LSA Type 1 và Type 2 chi tiết từ một vùng cục bộ và cô đọng chúng thành một LSA Type 3 Summary duy nhất cho phần còn lại của mạng.
So sánh phương pháp: Một vùng duy nhất vs. Đa vùng
| Tính năng | Một vùng (Phẳng) | Đa vùng (Phân tầng) |
|---|---|---|
| Kích thước LSDB | Toàn bộ cấu trúc (Lớn) | Đã tóm tắt (Nhỏ) |
| Tác động SPF | Tính toán lại toàn cầu | Cục bộ trong vùng |
| Cấu hình | Đơn giản | Trung bình |
| Khả năng mở rộng | Giới hạn khoảng 50-80 router | Hỗ trợ hơn 1000 node |
Ưu điểm & Nhược điểm
Ưu điểm:
- Giảm tải CPU và RAM trên các edge router.
- Hội tụ nhanh hơn vì SPF chỉ chạy trên một phần của bản đồ mạng.
- Khoanh vùng lỗi giúp ngăn chặn việc chập chờn liên kết cục bộ ảnh hưởng đến lõi mạng.
Nhược điểm:
- Yêu cầu một kế hoạch địa chỉ IP chặt chẽ để tóm tắt (summarization) hiệu quả.
- Tất cả các vùng không phải xương sống phải có đường dẫn vật lý hoặc logic đến Area 0.
Cấu hình Khuyến nghị
Một cấu trúc phân tầng doanh nghiệp tiêu chuẩn thường tuân theo mô hình hub-and-spoke:
- Area 0 (Backbone): Lõi tốc độ cao nơi tất cả các ABR kết nối vào.
- Regular Areas (ví dụ: Area 10): Các văn phòng khu vực yêu cầu dữ liệu định tuyến bên ngoài cụ thể.
- Stub Areas (ví dụ: Area 20): Các văn phòng chi nhánh hạn chế về tài nguyên. Các vùng này loại bỏ các tuyến đường bên ngoài (ASBR) và sử dụng một tuyến mặc định (default route) đơn giản thay thế.
Hướng dẫn triển khai: OSPF Đa Vùng với FRRouting
Chúng ta sẽ sử dụng ba node Linux chạy FRRouting (FRR) trên Ubuntu 22.04. Router-ABR kết nối Area 0 và Area 1. Router-Backbone nằm trong Area 0, và Router-Branch nằm trong Area 1.
1. Cài đặt FRRouting
Chạy các lệnh sau trên cả ba node để cài đặt bộ phần mềm định tuyến:
sudo apt update
sudo apt install frr -y
Mở file /etc/frr/daemons, đặt ospfd=yes, và khởi động lại dịch vụ:
sudo systemctl restart frr
2. Cấu hình Backbone Router (Area 0)
Truy cập vào shell của FRR. Router này chỉ xử lý lưu lượng vùng xương sống.
# vtysh
conf t
router ospf
ospf router-id 1.1.1.1
network 10.0.0.0/30 area 0
exit
write memory
3. Cấu hình Router Biên Vùng (ABR)
ABR là node quan trọng nhất. Nó kết nối cả hai vùng và thực hiện tóm tắt tuyến đường để giữ cho bảng định tuyến của Area 0 luôn gọn gàng.
# vtysh
conf t
router ospf
ospf router-id 2.2.2.2
network 10.0.0.0/30 area 0
network 192.168.10.0/24 area 1
# Tóm tắt tất cả các subnet của Area 1 vào một quảng bá duy nhất
area 1 range 192.168.10.0/24
exit
write memory
4. Cấu hình Stub Area (Router Chi nhánh)
Bằng cách định nghĩa Area 1 là một Stub, chúng ta ngăn chặn các LSA bên ngoài tràn vào router chi nhánh. Điều này giúp bảng định tuyến cục bộ luôn tinh gọn.
# vtysh
conf t
router ospf
ospf router-id 3.3.3.3
network 192.168.10.0/24 area 1
area 1 stub
exit
write memory
Lưu ý: Bạn cũng phải áp dụng lệnh area 1 stub trên ABR. Nếu các cờ stub không khớp, quan hệ láng giềng (adjacency) sẽ không bao giờ được thiết lập.
Xác minh Cấu trúc Phân tầng
Kiểm tra bảng định tuyến của Router-Branch để đảm bảo cấu trúc phân tầng đang hoạt động.
show ip route ospf
Nếu được cấu hình đúng, bạn sẽ thấy một tuyến mặc định (0.0.0.0/0) trỏ về ABR. Bạn sẽ không thấy 50 tuyến đường riêng lẻ từ các vùng khác. Trên Backbone Router, hãy xác minh việc tóm tắt:
show ip ospf database summary
Bạn sẽ thấy một LSA Type 3 duy nhất cho 192.168.10.0/24 thay vì các trạng thái liên kết riêng lẻ từ bên trong Area 1.
Tối ưu hóa SPF Timer
Các thiết lập OSPF tiêu chuẩn có thể quá nhạy bén đối với các mạng lớn dựa trên Linux. Bạn có thể ngăn chặn việc cạn kiệt CPU khi xảy ra lỗi liên kết bằng cách thêm một khoảng trễ nhỏ vào việc tính toán SPF.
conf t
router ospf
# Đặt độ trễ tính toán SPF: khởi đầu 5s, giữ tối đa 10s
timers throttle spf 5000 10000 10000
exit
Lệnh này yêu cầu FRR đợi 5 giây trước lần tính toán đầu tiên. Sau đó, nó giới hạn thời gian giữ ở mức 10 giây. Đây là một lưới bảo vệ quan trọng cho các môi trường có kết nối không dây không ổn định hoặc các liên kết cáp quang chập chờn.
Lời kết
Chuyển sang thiết kế OSPF đa vùng là cách hiệu quả nhất để mở rộng định tuyến trên Linux. Bằng cách sử dụng ABR để tóm tắt và Stub area cho các vùng biên, bạn giảm bớt tải tính toán cho phần cứng của mình. Mặc dù việc lập kế hoạch ban đầu tốn nhiều công sức hơn, nhưng một mạng lưới phân tầng sẽ dễ dàng bảo trì hơn nhiều so với một Area 0 phẳng và phình to.

