Tích hợp LibreNMS với Oxidized: Tự động Backup Config Router, Switch, Firewall

Tích hợp LibreNMS với Oxidized: Tự động Backup Config Router, Switch và Firewall

Ở phần trước, chúng ta đã sử dụng LibreNMS để xây dựng hệ thống Network Monitoring tập trung cho Router, Switch, Firewall, Server và các thiết bị hỗ trợ SNMP.

LibreNMS giúp IT biết thiết bị nào đang hoạt động, Interface nào Down, CPU/RAM bao nhiêu, Traffic có bất thường hay không.

Nhưng có một vấn đề khác:

Nếu ngày mai một Switch chết hoàn toàn và phải thay thiết bị mới, Configuration hiện tại của nó nằm ở đâu?

Với vài thiết bị, chúng ta có thể SSH vào từng con, chạy show running-config rồi lưu thủ công.

Nhưng khi hệ thống có vài chục hoặc hàng trăm Network Device, cách làm này rất khó quản lý.

Trong phần 2 của series, chúng ta sẽ tích hợp LibreNMS + Oxidized để tự động backup configuration của thiết bị mạng và lưu lịch sử thay đổi bằng Git.

Oxidized là gì?

Oxidized là công cụ mã nguồn mở dùng để tự động lấy và lưu configuration của các thiết bị mạng.

Oxidized có thể kết nối đến Router, Switch và Firewall thông qua SSH/Telnet, thực thi các command phù hợp với từng loại thiết bị và lưu configuration lại.

Thay vì IT phải thực hiện:

SSH → Router 01 → show running-config
SSH → Router 02 → show running-config
SSH → Switch 01 → show running-config
SSH → Switch 02 → show running-config
...

Oxidized có thể thực hiện công việc này tự động theo lịch.

LibreNMS và Oxidized làm nhiệm vụ gì?

Hai hệ thống giải quyết hai bài toán khác nhau nhưng bổ trợ rất tốt cho nhau.

LibreNMS Oxidized
Network Monitoring Configuration Backup
SNMP Polling SSH/Telnet
CPU/RAM Running Configuration
Traffic Config History
Interface Up/Down Config Diff
Alert Git Versioning

Có thể hiểu đơn giản:

LibreNMS cho biết thiết bị đang xảy ra chuyện gì.
Oxidized giúp chúng ta giữ lại configuration của thiết bị.

Kiến trúc LibreNMS + Oxidized

                    ┌─────────────────┐
                    │    LibreNMS     │
                    │                 │
                    │ Device Inventory│
                    │ SNMP Monitoring │
                    │ Alerting        │
                    └────────┬────────┘
                             │
                       API / Devices
                             │
                             ▼
                    ┌─────────────────┐
                    │    Oxidized     │
                    │                 │
                    │ SSH / Telnet    │
                    │ Get Config      │
                    └────────┬────────┘
                             │
                             ▼
                    ┌─────────────────┐
                    │       Git       │
                    │                 │
                    │ Config History  │
                    │ Diff / Version  │
                    └─────────────────┘


Router ─────┐
Switch ─────┼── SNMP ─────→ LibreNMS
Firewall ───┘
     │
     └──────── SSH ────────→ Oxidized

Một điểm quan trọng trong kiến trúc này là chúng ta không nhất thiết phải quản lý hai danh sách thiết bị riêng biệt.

LibreNMS có thể đóng vai trò Source of Truth cho Device Inventory và Oxidized lấy danh sách thiết bị từ LibreNMS.

1. Cài đặt Oxidized bằng Docker

Tạo thư mục cho Oxidized:

mkdir -p ~/oxidized/config
cd ~/oxidized

Tạo file docker-compose.yml:

services:

  oxidized:
    image: oxidized/oxidized:latest
    container_name: oxidized
    ports:
      - "8888:8888"
    volumes:
      - ./config:/home/oxidized/.config/oxidized
    restart: unless-stopped

Khởi động container:

docker compose up -d

Kiểm tra:

docker ps

Xem log:

docker logs -f oxidized

2. Cấu hình Oxidized

File cấu hình chính của Oxidized:

~/oxidized/config/config

Ví dụ cấu hình cơ bản:

---
username: backupuser
password: YOUR_PASSWORD

model: ios
resolve_dns: false
interval: 86400
use_syslog: false
debug: false
threads: 30
timeout: 20
retries: 3
prompt: !ruby/regexp /^([\w.@()-]+[#>]\s?)$/
rest: 0.0.0.0:8888
input:
  default: ssh
  debug: false
output:
  default: git
  git:
    user: Oxidized
    email: oxidized@example.local
    repo: "/home/oxidized/.config/oxidized/configs.git"

source:
  default: csv
  csv:
    file: "/home/oxidized/.config/oxidized/router.db"
    delimiter: !ruby/regexp /:/
    map:
      name: 0
      model: 1

Trong ví dụ trên:

  • interval: 86400 – backup mỗi 24 giờ.
  • input: ssh – kết nối thiết bị bằng SSH.
  • output: git – lưu configuration vào Git repository.
  • router.db – danh sách thiết bị cần backup.

3. Test Oxidized độc lập trước khi tích hợp LibreNMS

Đây là bước mình khuyến nghị nên thực hiện trước.

Đừng tích hợp LibreNMS ngay.

Trước tiên cần đảm bảo:

  • Oxidized chạy ổn định.
  • SSH được vào thiết bị.
  • Credential chính xác.
  • Model thiết bị chính xác.
  • Configuration được lấy thành công.

Tạo file:

~/oxidized/config/router.db

Ví dụ:

192.168.1.1:ios
192.168.1.2:ios
192.168.1.3:ios

Restart Oxidized:

docker restart oxidized

Sau đó theo dõi log:

docker logs -f oxidized

4. Kiểm tra Oxidized Web/API

Oxidized đang expose REST API trên port:

8888

Truy cập:

http://IP-OXIDIZED:8888

Hoặc kiểm tra danh sách node:

curl http://localhost:8888/nodes.json

Nếu cấu hình đúng, API sẽ trả về danh sách thiết bị mà Oxidized đang quản lý.

5. Kiểm tra kết nối từ LibreNMS sang Oxidized

Nếu LibreNMS và Oxidized chạy bằng Docker, cần đảm bảo container LibreNMS có thể truy cập được Oxidized.

Ví dụ:

docker exec librenms curl http://oxidized:8888/nodes.json

Nếu trả về JSON danh sách thiết bị thì kết nối giữa hai container đã hoạt động.

Nếu không truy cập được, cần kiểm tra:

  • Docker Network.
  • Container name.
  • Port.
  • Firewall.
  • Oxidized REST listener.

6. Tích hợp Oxidized vào LibreNMS

LibreNMS hỗ trợ tích hợp Oxidized để hiển thị configuration của thiết bị ngay trong giao diện LibreNMS.

Trong LibreNMS, bật Oxidized integration và cấu hình URL của Oxidized.

Ví dụ URL nếu hai container cùng Docker Network:

http://oxidized:8888

Nếu Oxidized nằm trên Server khác:

http://IP-OXIDIZED:8888

Sau khi cấu hình thành công, LibreNMS có thể liên kết thiết bị với configuration tương ứng trong Oxidized.

7. Không nên quản lý router.db thủ công

Ở bước test ban đầu, chúng ta sử dụng:

router.db

Điều này phù hợp để kiểm tra Oxidized.

Nhưng trong hệ thống Production có hàng chục hoặc hàng trăm thiết bị, việc duy trì:

LibreNMS Device List
và
Oxidized router.db

sẽ tạo ra hai nguồn dữ liệu riêng biệt.

Ví dụ IT thêm Switch mới vào LibreNMS nhưng quên thêm vào Oxidized:

LibreNMS

SW-01
SW-02
SW-03
SW-04
SW-05

Oxidized

SW-01
SW-02
SW-03
SW-04
SW-05 → không được backup

Đây là lý do nên để:

LibreNMS trở thành Source of Truth cho Device Inventory.

8. Cho Oxidized lấy danh sách thiết bị từ LibreNMS

Thay vì sử dụng CSV router.db, Oxidized có thể lấy danh sách node từ LibreNMS thông qua HTTP/API source.

Kiến trúc lúc này trở thành:

                 LibreNMS
                    │
                    │ Device Inventory
                    │
                    ▼
              Oxidized Source
                    │
                    ▼
                 Oxidized
                    │
                  SSH
                    │
        ┌───────────┼───────────┐
        ▼           ▼           ▼
      Router      Switch     Firewall

Khi thêm một Network Device vào LibreNMS, Oxidized có thể lấy danh sách thiết bị từ nguồn này thay vì phải duy trì danh sách thủ công.

Điều này giúp giảm đáng kể nguy cơ:

  • Thiết bị có trong LibreNMS nhưng không có trong Oxidized.
  • Sai hostname/IP giữa hai hệ thống.
  • Quên thêm thiết bị mới vào hệ thống backup.
  • Phải maintain hai inventory khác nhau.

9. Lưu configuration bằng Git

Một trong những điểm mình thích nhất khi sử dụng Oxidized là khả năng lưu configuration bằng Git.

Điều này có nghĩa là chúng ta không chỉ có:

SW-01.cfg

mà còn có lịch sử thay đổi của configuration.

Ví dụ hôm qua:

interface GigabitEthernet0/1
 switchport access vlan 10

Hôm nay:

interface GigabitEthernet0/1
 switchport access vlan 20

Git sẽ ghi nhận sự thay đổi:

- switchport access vlan 10
+ switchport access vlan 20

Điều này cực kỳ hữu ích khi troubleshoot.

Ví dụ User báo:

“Hôm qua mạng vẫn chạy bình thường, sáng nay không vào được.”

Thay vì chỉ kiểm tra trạng thái hiện tại, IT có thể xem:

Configuration của thiết bị đã thay đổi gì từ hôm qua đến hôm nay?

10. Kiểm tra Git repository của Oxidized

Truy cập container:

docker exec -it oxidized sh

Di chuyển đến repository:

cd /home/oxidized/.config/oxidized/configs.git

Xem lịch sử:

git log

Hoặc:

git log --oneline

Git giúp chúng ta có lịch sử configuration thay vì chỉ giữ bản backup cuối cùng.

11. Security khi triển khai Oxidized

Đây là phần rất quan trọng.

Oxidized cần credential để đăng nhập Network Device, vì vậy không nên sử dụng tài khoản Administrator nếu không cần thiết.

Nên tạo một tài khoản chuyên dụng:

oxidized-backup

hoặc:

network-backup

và chỉ cấp quyền đủ để đọc configuration.

Nguyên tắc:

  • Ưu tiên SSH thay vì Telnet.
  • Sử dụng account riêng cho Network Backup.
  • Áp dụng Least Privilege.
  • Giới hạn IP được phép SSH vào thiết bị.
  • Không expose port 8888 trực tiếp ra Internet.
  • Bảo vệ thư mục chứa configuration.
  • Bảo vệ Git repository.
  • Không commit credential vào Git public.

12. Mask Password và Secret trong Configuration

Một vấn đề cần lưu ý là configuration của Network Device có thể chứa thông tin nhạy cảm như:

SNMP Community
Password
Enable Secret
VPN PSK
RADIUS Secret
TACACS Secret
API Token

Vì vậy trước khi đồng bộ repository backup ra hệ thống bên ngoài, cần kiểm tra kỹ configuration có chứa secret hay không.

Đặc biệt:

Không nên push nguyên repository configuration lên GitHub Public.

Network configuration có thể tiết lộ topology, IP Address, VLAN, username, SNMP community và nhiều thông tin quan trọng của hệ thống.

13. Troubleshooting Oxidized

Oxidized không SSH được vào thiết bị

Test từ chính container:

docker exec -it oxidized sh

Sau đó kiểm tra kết nối đến thiết bị.

Cần kiểm tra:

  • IP Address.
  • Routing.
  • TCP/22.
  • Username/Password.
  • SSH Algorithm.
  • ACL trên Network Device.

Oxidized nhận sai Model

Oxidized sử dụng model để biết phải chạy command nào trên từng loại thiết bị.

Ví dụ:

Cisco IOS → ios
Juniper    → junos

Nếu model sai, Oxidized có thể SSH thành công nhưng không lấy được configuration đúng.

LibreNMS không truy cập được Oxidized

Test trực tiếp:

docker exec librenms curl http://oxidized:8888/nodes.json

Nếu không có response, kiểm tra Docker Network và REST listener của Oxidized trước khi kiểm tra cấu hình LibreNMS.

Configuration không cập nhật ngay

Kiểm tra giá trị:

interval: 86400

86400 giây tương đương 24 giờ.

Nếu đang test, có thể giảm interval để không phải chờ quá lâu. Sau khi hệ thống ổn định thì điều chỉnh lại phù hợp với số lượng thiết bị và nhu cầu backup.

14. Backup repository của Oxidized

Đến đây chúng ta đã có:

Network Device
      ↓
   Oxidized
      ↓
Configuration
      ↓
     Git

Nhưng nếu Server chạy Oxidized chết thì sao?

Đây chính là lý do repository của Oxidized cũng cần được backup.

Có thể triển khai:

Network Device
      ↓
   Oxidized
      ↓
Local Git Repository
      ↓
┌─────┼──────────┐
↓     ↓          ↓
NAS   S3     Cloud Storage

Hoặc đồng bộ repository sang một Git Server nội bộ.

Nguyên tắc ở đây rất đơn giản:

Backup configuration mà chỉ tồn tại trên chính Server backup thì vẫn chưa phải một chiến lược backup tốt.

Kết quả sau khi tích hợp LibreNMS + Oxidized

Sau khi hoàn thành, chúng ta có một hệ thống:

                    NETWORK DEVICES
                          │
             ┌────────────┴────────────┐
             │                         │
            SNMP                      SSH
             │                         │
             ▼                         ▼
         LibreNMS                  Oxidized
             │                         │
     Monitoring / Alert          Configuration
             │                         │
             │                         ▼
             │                        Git
             │                         │
             └────────────┬────────────┘
                          ▼
                  Network Operations

LibreNMS giúp trả lời:

  • Thiết bị có đang Up không?
  • Interface nào đang Down?
  • Traffic hiện tại thế nào?
  • CPU/RAM có bất thường không?

Oxidized giúp trả lời:

  • Configuration hiện tại là gì?
  • Configuration đã được backup chưa?
  • Configuration thay đổi lúc nào?
  • Thay đổi những dòng nào?
  • Có configuration để restore khi thiết bị hỏng hay không?

LibreNMS + Oxidized có đáng triển khai không?

Nếu chỉ quản lý 2–3 Switch thì việc backup configuration thủ công vẫn có thể chấp nhận được.

Nhưng khi hệ thống có hàng chục hoặc hàng trăm Network Device, việc tự động hóa Network Monitoring và Configuration Backup giúp giảm đáng kể công việc thủ công.

Quan trọng hơn, nó giúp IT chuyển từ cách vận hành:

Có sự cố
   ↓
Đi tìm nguyên nhân
   ↓
Tìm configuration
   ↓
Không biết bản nào mới nhất

sang:

Monitoring
   +
Alerting
   +
Automatic Config Backup
   +
Configuration History
   +
Git Diff

Đây cũng là nền tảng để đi tiếp đến những bài toán lớn hơn như Network Automation, Configuration Compliance và Infrastructure Audit.

Câu hỏi thường gặp

Oxidized có miễn phí không?

Có. Oxidized là một dự án mã nguồn mở.

Oxidized có cần LibreNMS không?

Không. Oxidized có thể hoạt động độc lập. LibreNMS được tích hợp để quản lý Network Monitoring và Device Inventory thuận tiện hơn.

Oxidized sử dụng SNMP để backup configuration không?

Không. LibreNMS thường sử dụng SNMP để thu thập thông tin Monitoring, trong khi Oxidized thường đăng nhập thiết bị thông qua SSH hoặc Telnet để lấy configuration.

Tại sao nên lưu configuration bằng Git?

Git không chỉ giữ configuration mà còn giúp theo dõi lịch sử và so sánh sự thay đổi giữa các phiên bản. Điều này đặc biệt hữu ích khi troubleshoot sự cố xảy ra sau một thay đổi cấu hình.

Có nên backup Oxidized lên GitHub không?

Không nên đưa configuration Network Infrastructure lên repository public. Configuration có thể chứa thông tin nhạy cảm về topology, IP, VLAN, credential hoặc secret. Nếu sử dụng Git Server bên ngoài cần có chính sách bảo mật phù hợp và kiểm tra dữ liệu trước khi đồng bộ.


Series Network Monitoring & Automation

Phần 1: LibreNMS – Xây dựng hệ thống Network Monitoring miễn phí.

Phần 2: LibreNMS + Oxidized – Tự động backup configuration Router, Switch và Firewall.

Phần tiếp theo: Có thể đi sâu vào Git Config History, Alert khi configuration thay đổi và tự động backup repository ra hệ thống lưu trữ bên ngoài.

Share:

nhienphan1 writes for NhienPhan.

Comments are closed.