Cấu hình VyOS: Xây dựng Router phần mềm chuẩn doanh nghiệp với BGP, Firewall và NAT

Networking tutorial - IT technology blog
Networking tutorial - IT technology blog

Vấn đề thực tế: Bài toán nan giải tại Edge Gateway của doanh nghiệp

Sáu tháng trước, hạ tầng của chúng tôi gặp nút thắt lớn tại trung tâm dữ liệu colocation ở Ashburn. Chúng tôi cần hệ thống edge gateway dự phòng kép 10Gbps để kết nối ba cụm Kubernetes on-premise (khoảng 140 worker node) với các nhà cung cấp upstream transit và một đường truyền AWS Direct Connect 5Gbps. Dàn khung chassis Juniper MX240 cũ kỹ sắp hết vòng đời hỗ trợ (EOL). Báo giá gia hạn hỗ trợ và bản quyền từ nhà cung cấp lên tới hơn 68.000 USD, trong khi thời gian giao thiết bị thay thế kéo dài hơn 18 tuần.

Chịu áp lực phải kịp tiến độ ra mắt, chúng tôi đã thử một giải pháp tình thế. Chúng tôi triển khai hai máy chủ Dell PowerEdge R640 chạy Ubuntu 22.04, cài đặt FRRouting cho BGP, viết script nftables để xử lý NAT cùng stateful filtering, rồi gắn kết toàn bộ lại bằng Ansible.

Chỉ trong vòng ba tuần, hệ thống tự dựng này đã bộc lộ rõ sự quá tải trong vận hành thực tế. Mỗi lần thay đổi routing policy lại dễ dàng ghi đè hoặc xung đột với bảng trạng thái firewall hiện có. Khi hiện tượng BGP flap làm rớt prefix vào giờ cao điểm buổi chiều, việc truy tìm nguyên nhân đòi hỏi phải đối chiếu chéo bốn file cấu hình riêng rẽ, lần mò các hành vi bất thường của systemd-networkd và theo dõi log của từng daemon riêng biệt trên hàng loạt terminal.

Phân tích nguyên nhân gốc rễ: Vì sao Linux Router tự dựng thất bại ở quy mô lớn

Các bản phân phối Linux tiêu chuẩn có khả năng chuyển tiếp packet với tốc độ rất ấn tượng. Tuy nhiên, chúng thiếu đi kiến trúc liền mạch của một hệ điều hành mạng chuyên dụng. Việc chắp vá một edge router cho môi trường production trên nền Linux thông thường sẽ dẫn đến ba nguy cơ lỗi cố hữu:

  • Cấu hình phân mảnh: Dynamic routing (FRR/BIRD), lọc packet (nftables), gán địa chỉ IP (netplan) và tinh chỉnh kernel (sysctl) nằm rải rác ở các phân vùng tách biệt. Không có một cơ chế liên kết chung nào đồng bộ giữa việc thay đổi MTU của interface với BGP path MTU discovery hay TCP MSS clamping.
  • Thiếu tính năng Atomic Commit và Rollback: Chỉ cần đặt sai một dấu ngoặc trong ruleset của nftables là quá trình thực thi bị hủy bỏ giữa chừng. Điều này khiến packet filter bị áp dụng dang dở, dễ dẫn đến tình trạng rớt traffic hoặc ngắt kết nối các phiên quản trị out-of-band mà không hề có phương án tự động phục hồi.
  • Bất đồng bộ bảng trạng thái: Việc khởi động lại các daemon định tuyến động độc lập với hệ thống theo dõi kết nối thường xuyên làm vô hiệu hóa trạng thái conntrack. Các phiên TCP đang hoạt động sẽ bị ngắt, gây ra những sự cố gián đoạn nhỏ (micro-outage) ngay trong các đợt bảo trì định kỳ ban ngày.

So sánh các giải pháp: Thiết bị phần cứng chuyên dụng vs. Linux tự dựng vs. VyOS

Khi lựa chọn nền tảng xương sống cho tác vụ định tuyến thông lượng cao và bảo mật vùng biên, bốn kiến trúc sau thường được đưa lên bàn cân:

Tiêu chí Phần cứng chuyên dụng (Cisco/Juniper) Linux tự dựng (Ubuntu + FRR + nftables) Firewall FreeBSD (pfSense/OPNsense) VyOS (Router phần mềm)
Chi phí bản quyền & Phần cứng $30.000–$100.000+; phụ thuộc vào ASIC độc quyền của hãng $0 phần mềm; chạy trên phần cứng x86/ARM/VM phổ thông Bản cộng đồng miễn phí; có tùy chọn phần cứng chính hãng Mã nguồn mở lõi; chạy linh hoạt trên bare-metal, VM hoặc cloud
Cơ chế cấu hình CLI phân cấp với commit/rollback File cấu hình phẳng rải rác, không an toàn theo giao dịch Ưu tiên Web GUI; backend XML nguyên khối CLI phân cấp hợp nhất với khả năng atomic commit/rollback
BGP & Định tuyến động Hỗ trợ full Internet routing table; policy phong phú Daemon FRR mạnh mẽ nhưng đòi hỏi tích hợp thủ công Có plugin FRR; khả năng tùy biến policy ở mức cơ bản Backend FRR gốc với route map và prefix list nâng cao
Tự động hóa & CI/CD API độc quyền, module phức tạp phụ thuộc hãng Bộ công cụ Linux tiêu chuẩn (Ansible, bash script) REST API hạn chế, quy trình ưu tiên thao tác GUI HTTP API tích hợp sẵn, Ansible collection chính thức, Terraform provider

Giải pháp tối ưu: Triển khai VyOS với BGP, Zone Firewall và NAT

VyOS kết hợp hiệu năng line-rate nguyên bản của Linux kernel với mô hình quản trị hợp nhất chuẩn viễn thông tương tự JunOS. Mọi câu lệnh đều hướng tới một cây cú pháp khai báo duy nhất. Bạn sở hữu ngay tính năng commit theo giao dịch (transactional commit), điểm khôi phục tức thì và khả năng xác thực trạng thái ổn định được tích hợp sẵn.

Trong đợt chuyển đổi thực tế của chúng tôi, hai máy chủ bare-metal 1U chạy VyOS 1.4 đã duy trì ổn định mức thông lượng 9.2Gbps với độ trễ dưới một mili-giây, giảm tải chi phí phần cứng xuống chỉ bằng một phần nhỏ so với thiết bị mạng chuyên dụng trước đây. Dưới đây là quy trình chi tiết để triển khai một edge gateway với hai interface—WAN (eth0) và LAN (eth1)—hoàn chỉnh cùng zone-based security policy, source NAT chiều ra và quảng bá route eBGP.

1. Thiết lập ban đầu và cấu hình Interface

Mở phiên console hoặc SSH tới node VyOS của bạn. Vào chế độ cấu hình, sau đó gán địa chỉ IP tĩnh cùng mô tả cho các cổng WAN và LAN:

configure

# Cấu hình interface WAN kết nối tới upstream ISP transit
set interfaces ethernet eth0 address '198.51.100.2/30'
set interfaces ethernet eth0 description 'WAN-Uplink-ISP1'

# Cấu hình interface LAN gateway cho các workload nội bộ
set interfaces ethernet eth1 address '10.100.0.1/24'
set interfaces ethernet eth1 description 'LAN-Production-Core'

# Thiết lập hostname và upstream recursive DNS resolver
set system host-name 'gw-core-01'
set system name-server '1.1.1.1'
set system name-server '8.8.8.8'

commit
save

2. Xây dựng Zone-Based Stateful Firewall

VyOS vận hành theo mô hình bảo mật theo vùng (zone-based security). Thay vì gắn trực tiếp rule firewall vào các physical interface, bạn phân chia interface vào các security zone và áp dụng policy định hướng giữa chúng. Cách tiếp cận này giúp ngăn chặn tình trạng phình to rule khi cấu trúc mạng mở rộng.

Xây dựng các policy rõ ràng cho chiều WAN-to-LAN, LAN-to-WAN và lưu lượng control-plane gửi trực tiếp tới chính router (LOCAL):

# Định nghĩa WAN-to-LAN: chặn traffic chiều vào nhưng vẫn cho phép phản hồi của phiên đã có
set firewall ipv4 name WAN_TO_LAN default-action 'drop'
set firewall ipv4 name WAN_TO_LAN rule 10 action 'accept'
set firewall ipv4 name WAN_TO_LAN rule 10 description 'Cho phep traffic established/related'
set firewall ipv4 name WAN_TO_LAN rule 10 state 'established'
set firewall ipv4 name WAN_TO_LAN rule 10 state 'related'
set firewall ipv4 name WAN_TO_LAN rule 20 action 'drop'
set firewall ipv4 name WAN_TO_LAN rule 20 description 'Chan cac packet loi va khong hop le'
set firewall ipv4 name WAN_TO_LAN rule 20 state 'invalid'

# Định nghĩa LAN-to-WAN: cho phép các host nội bộ truy cập Internet chiều ra
set firewall ipv4 name LAN_TO_WAN default-action 'accept'

# Định nghĩa WAN-to-LOCAL: bảo vệ luồng quản trị và routing engine của router
set firewall ipv4 name WAN_TO_LOCAL default-action 'drop'
set firewall ipv4 name WAN_TO_LOCAL rule 10 action 'accept'
set firewall ipv4 name WAN_TO_LOCAL rule 10 description 'Cho phep control plane established/related'
set firewall ipv4 name WAN_TO_LOCAL rule 10 state 'established'
set firewall ipv4 name WAN_TO_LOCAL rule 10 state 'related'
set firewall ipv4 name WAN_TO_LOCAL rule 20 action 'accept'
set firewall ipv4 name WAN_TO_LOCAL rule 20 description 'Cho phep BGP chieu vao tu upstream peer'
set firewall ipv4 name WAN_TO_LOCAL rule 20 protocol 'tcp'
set firewall ipv4 name WAN_TO_LOCAL rule 20 destination port '179'
set firewall ipv4 name WAN_TO_LOCAL rule 20 source address '198.51.100.1'

# Gán các interface vào các security zone tương ứng
set firewall zone WAN interface 'eth0'
set firewall zone LAN interface 'eth1'
set firewall zone LOCAL local-zone

# Áp dụng policy lọc theo chiều cho từng cặp zone
set firewall zone LAN from WAN firewall name 'WAN_TO_LAN'
set firewall zone WAN from LAN firewall name 'LAN_TO_WAN'
set firewall zone LOCAL from WAN firewall name 'WAN_TO_LOCAL'

commit
save

3. Cấu hình Outbound Source NAT (Masquerade)

Các workload trong dải mạng nội bộ 10.100.0.0/24 cần được biên dịch địa chỉ để có thể truy cập mạng bên ngoài qua đường truyền WAN:

# NAT lưu lượng subnet private đi ra ngoài qua WAN eth0
set nat source rule 100 description 'Masquerade ket noi Internet chieu ra'
set nat source rule 100 outbound-interface name 'eth0'
set nat source rule 100 source address '10.100.0.0/24'
set nat source rule 100 translation address 'masquerade'

commit
save

4. Cấu hình eBGP Peering chuẩn doanh nghiệp

Định tuyến động giúp luồng traffic không bị gián đoạn nếu một đường truyền upstream gặp sự cố. Trong mô hình này, autonomous system cục bộ của bạn (AS 65001) sẽ thiết lập quan hệ peer với ISP upstream (AS 64512 tại 198.51.100.1) và quảng bá dải IP public được cấp của bạn (203.0.113.0/24).

Các bộ lọc prefix giúp bảo vệ routing table của phía upstream bằng cách đảm bảo bạn chỉ quảng bá những địa chỉ IP thực sự thuộc quyền sở hữu của mình:

# Thiết lập số Autonomous System (AS) cục bộ và router ID
set protocols bgp system-as '65001'
set protocols bgp parameters router-id '198.51.100.2'

# Cấu hình upstream transit peer
set protocols bgp neighbor 198.51.100.1 address-family ipv4-unicast
set protocols bgp neighbor 198.51.100.1 remote-as '64512'
set protocols bgp neighbor 198.51.100.1 description 'Transit-ISP1-Uplink'
set protocols bgp neighbor 198.51.100.1 update-source 'eth0'

# Giới hạn quảng bá route chiều ra chỉ cho các subnet được phê duyệt của công ty
set policy prefix-list PL-EXPORT-PREFIXES rule 10 action 'permit'
set policy prefix-list PL-EXPORT-PREFIXES rule 10 prefix '203.0.113.0/24'

# Áp dụng bộ lọc prefix-list vào route-map chiều ra
set policy route-map RM-BGP-OUT rule 10 action 'permit'
set policy route-map RM-BGP-OUT rule 10 match ip address prefix-list 'PL-EXPORT-PREFIXES'

# Gán route-map vào thông báo quảng bá chiều ra cho ISP neighbor
set protocols bgp neighbor 198.51.100.1 address-family ipv4-unicast route-map export 'RM-BGP-OUT'

# Tạo static anchor route và đưa prefix vào BGP
set protocols static route 203.0.113.0/24 blackhole
set protocols bgp address-family ipv4-unicast network '203.0.113.0/24'

commit
save

5. Kiểm tra xác thực và Runbook vận hành

Gõ exit để thoát khỏi chế độ cấu hình. Thực thi các lệnh kiểm tra sau để xác nhận quan hệ láng giềng BGP, các phiên NAT đang hoạt động và số lượng packet bị chặn:

# Xác nhận trạng thái BGP hiển thị Established cùng số lượng prefix được chấp nhận
show bgp summary

# Kiểm tra các route được quảng bá tới upstream provider
show ip bgp neighbors 198.51.100.1 advertised-routes

# Kiểm tra các bản ghi NAT conntrack đang hoạt động dưới tải
show nat source translations

# Giám sát bộ đếm packet thời gian thực cho firewall WAN-to-LAN
show firewall name WAN_TO_LAN statistics

Cấu hình sai sót là điều khó tránh khỏi. Khi một rule chưa được kiểm thử kỹ lưỡng vô tình chặn đứng traffic trong lúc bảo trì, bạn có thể hoàn tác ngay lập tức về trạng thái hoạt động tốt trước đó mà không cần khởi động lại thiết bị:

# Xem lại lịch sử commit và các mốc thời gian đã lưu
show system commit-history

# Khôi phục ngay lập tức về cấu hình hoạt động trước đó
configure
rollback 1
commit
exit

VyOS mang lại khả năng kiểm soát linh hoạt của Linux nhưng loại bỏ hoàn toàn sự phân mảnh. Bằng cách kết hợp cơ chế cấu hình theo giao dịch, định tuyến FRR tích hợp sẵn và bộ lọc theo vùng trên phần cứng x86 phổ thông, bạn hoàn toàn làm chủ vùng biên mạng của mình—mà không còn phải bận tâm về những hóa đơn gia hạn hỗ trợ lên tới 5 chữ số.

Share: