# Cài đặt cảnh báo mạng mở rộng MikroTik

## Phạm vi

Gói cảnh báo được gom thành ba nhóm độc lập:

- `router`: CPU, RAM, storage và thông báo reboot.
- `wan`: số lần rớt PPPoE, packet loss/latency, CGNAT và lỗi cổng WAN.
- `lan-security`: loop Layer 2 và DHCP Server lạ.

Tất cả dùng lại Bot Token, Chat ID, PPPoE interface và probe trong `pppoe-monitor-config`. Phải cài PPPoE Monitor trước. Không nhập lại Bot Token vào các Source bên dưới.

## Cài nhanh bằng Terminal

Dán nguyên dòng sau sau khi PPPoE Monitor đã hoạt động:

```routeros
/tool fetch url="https://mikrotik.thachanhitt.vn/network-alerts-install.rsc" dst-path="network-alerts-install.rsc" check-certificate=yes; /import file-name="network-alerts-install.rsc"; /file remove [find where name="network-alerts-install.rsc"]
```

Installer tạo ba nhóm ở trạng thái Disabled. Chạy thử rồi bật theo mục 7.

## Cập nhật lỗi tin khởi động bị lặp

Với router đã cài, không cần chạy lại installer:

1. Trong **System → Scripts → network-alert-router**, thay Source bằng [Source mới](../scripts/manual/network-alert-router.rsc).
2. Trong **System → Scripts** và **System → Scheduler**, tích thêm quyền **policy** cho các script/scheduler của gói được liệt kê bên dưới; giữ nguyên các quyền đang có. Áp dụng tương tự cho `pppoe-monitor`, `pppoe-monitor-config`, `pppoe-monitor-reset` và Scheduler `pppoe-monitor-every-3m` nếu đã cài.
3. Sau khi cập nhật, lần khởi động tiếp theo chỉ gửi một tin thành công, gồm IP WAN PPPoE. Nếu Telegram lỗi, script vẫn thử lại trong 10 phút đầu.

Quyền chạy script phụ thuộc cách gọi; xem [MikroTik Script permissions](https://help.mikrotik.com/docs/spaces/ROS/pages/47579229/Scripting#Scripting-Scriptpermissions).

## 1. Tạo Script

Trong WinBox/WebFig, vào **System → Scripts → +**. Tạo năm Script:

| Name | Policy | Source |
|---|---|---|
| `network-alert-config` | `read`, `write`, `policy`, `test` | [Mở Source](../scripts/manual/network-alert-config.rsc) |
| `network-alert-router` | `read`, `write`, `policy`, `test` | [Mở Source](../scripts/manual/network-alert-router.rsc) |
| `network-alert-wan` | `read`, `write`, `policy`, `test` | [Mở Source](../scripts/manual/network-alert-wan.rsc) |
| `network-alert-lan-security` | `read`, `write`, `policy`, `test` | [Mở Source](../scripts/manual/network-alert-lan-security.rsc) |
| `network-alert-lan-dhcp` | `read`, `write`, `policy`, `test` | [Mở Source](../scripts/manual/network-alert-lan-dhcp.rsc) |

Mở từng file Source, sao chép toàn bộ nội dung rồi dán vào ô **Source**. Không dán khối Source dài vào Terminal.

Nếu cài hoàn toàn thủ công thay vì chạy installer, chạy một lần:

```routeros
:global netAlertRouterBootSent; :set netAlertRouterBootSent true
```

Lệnh này tránh báo reboot giả ngay sau khi vừa cài.

## 2. Tạo ba Scheduler

Vào **System → Scheduler → +**. Tạo ba Scheduler và giữ **Disabled** cho tới khi thử xong.

### Router

- Name: `network-alert-router-every-1m`
- Interval: `00:01:00`
- On Event: `/system script run network-alert-router`
- Policy: `read`, `write`, `policy`, `test`

CPU được đọc mỗi phút. RAM/storage được đọc mỗi 5 lần chạy. Sau reboot, script thử gửi thông báo mỗi phút trong 10 phút đầu cho tới khi thành công. Tin khởi động liệt kê IP WAN của các PPPoE đang kết nối, không đọc hoặc đính kèm log reboot. Gửi thành công một lần thì dừng trong lần khởi động đó.

Quyền `policy` cùng `test` cần cho biến global giữ trạng thái giữa các lần Scheduler chạy. Thiếu `policy` có thể làm tin khởi động gửi lại mỗi phút dù log đã ghi `SUCCESS`; chạy thử bằng Terminal với quyền admin sẽ không phát hiện lỗi này.

### WAN

- Name: `network-alert-wan-every-1m`
- Interval: `00:01:00`
- On Event: `/system script run network-alert-wan`
- Policy: `read`, `write`, `policy`, `test`

Trạng thái PPPoE được kiểm tra mỗi phút. Packet loss/latency và counter cổng WAN được kiểm tra mỗi 5 lần chạy. CGNAT được kiểm tra mỗi 60 lần chạy.

Khi một đường PPPoE đang rớt, đang chờ gửi báo phục hồi, hoặc mới phục hồi chưa đủ 5 phút, các cảnh báo `wan` của riêng đường đó tạm dừng. Nhóm `router` và `lan-security` vẫn chạy. Cơ chế này tránh Quality, CGNAT, link flap và lỗi cổng gửi dồn khi Internet vừa lên lại.

### LAN Security

- Name: `network-alert-lan-security-every-1m`
- Interval: `00:01:00`
- On Event: `/system script run network-alert-lan-security`
- Policy: `read`, `write`, `policy`, `test`

CLI tương đương:

```routeros
/system scheduler add name="network-alert-router-every-1m" interval=1m on-event="/system script run network-alert-router" policy=read,write,policy,test disabled=yes
/system scheduler add name="network-alert-wan-every-1m" interval=1m on-event="/system script run network-alert-wan" policy=read,write,policy,test disabled=yes
/system scheduler add name="network-alert-lan-security-every-1m" interval=1m on-event="/system script run network-alert-lan-security" policy=read,write,policy,test disabled=yes
```

## 3. Cấu hình phát hiện loop mạng

`network-alert-lan-security` chỉ báo loop Layer 2 khi có bằng chứng từ RouterOS:

- Interface có `loop-protect-status=disable` vì nhận lại gói Loop Protect của chính nó.
- Không đọc log `probably loop`/`loop-protect` để suy ra sự cố; log có thể chứa source script.

Ưu tiên dùng `protocol-mode=rstp` trên bridge. Kiểm tra:

```routeros
/interface bridge print detail
```

Không tự đổi toàn bộ bridge/port từ xa nếu chưa hiểu topology. Nếu muốn chủ động chặn loop, chỉ bật Loop Protect trên cổng LAN vật lý đã xác định:

```routeros
/interface ethernet set ether2 loop-protect=on loop-protect-disable-time=5m
```

Không bật trên WAN, cổng quản trị duy nhất hoặc toàn bộ port cùng lúc.

## 4. Tạo DHCP Alert

Chỉ dùng trên interface LAN đang chạy DHCP Server hoặc dùng IP tĩnh. Không bật trên interface đang chạy DHCP Client.

Vào **IP → DHCP Server → Alerts → +**:

- Interface: interface LAN của DHCP Server, với generator là `BridgeLAN`.
- Valid Servers: MAC của MikroTik/bridge và mọi DHCP Server hợp lệ khác.
- Alert Timeout: `01:00:00`.
- On Alert:

```routeros
:global netAlertDhcpInterface $interface; :global netAlertDhcpAddress $address; :global netAlertDhcpMac $"mac-address"; /system script run network-alert-lan-dhcp
```

Giữ Disabled lúc đầu. DHCP Alert là tính năng RouterOS có sẵn; nó gửi DHCP Discover mỗi phút để tìm server lạ. Xem [MikroTik DHCP Alerts](https://help.mikrotik.com/docs/spaces/ROS/pages/24805500/DHCP#DHCP-Alerts).

## 5. Chất lượng WAN và device-mode

Nhóm WAN luôn đo packet loss bằng `/ping`. Nó dùng thêm `/tool flood-ping` để lấy độ trễ trung bình. Nếu RouterOS 7 device-mode chặn `flood-ping`, packet loss vẫn hoạt động và latency hiển thị không đo được.

Không tự bật thêm quyền device-mode từ xa. Thay đổi device-mode cần xác nhận vật lý và có thể ảnh hưởng bảo mật.

## 6. Cổng WAN được giám sát

Nhóm WAN tự lấy interface nền của PPPoE và lần qua một lớp VLAN. Nếu topology khác hoặc log báo không tìm thấy Ethernet port, sửa trong Source `network-alert-config`:

```routeros
:global netAlertWanPort1 "ether1"
:global netAlertWanPort2 "ether2"
:global netAlertWanPort3 ""
:global netAlertWanPort4 ""
```

Script chỉ đọc counter, không reset counter và không tắt cổng.

## 7. Chạy thử và bật nhóm

```routeros
/system script run network-alert-router
/system script run network-alert-wan
/system script run network-alert-lan-security
/log print where message~"NET-ALERT"
```

Không có `ERROR` hoặc `TELEGRAM ... FAILED` thì bật nhóm cần dùng:

```routeros
/system scheduler enable [find where name="network-alert-router-every-1m"]
/system scheduler enable [find where name="network-alert-wan-every-1m"]
/system scheduler enable [find where name="network-alert-lan-security-every-1m"]
/ip dhcp-server alert enable [find where on-alert~"network-alert-lan-dhcp"]
```

Muốn tắt nhóm LAN Security hoàn toàn phải tắt cả Scheduler và DHCP Alert.

## 8. Ngưỡng mặc định

Sửa đầu Source `network-alert-config` nếu cần:

- CPU: `>90%` trong 5 lần kiểm tra liên tiếp; phục hồi khi `<=80%`.
- Rớt mạng: xác nhận sau 3 lần ping lỗi liên tiếp; cảnh báo từ lần rớt thứ 4 trong ngày.
- CGNAT: `100.64.0.0/10`; đồng thời báo private IPv4 `10/8`, `172.16/12`, `192.168/16`.
- Chất lượng WAN: loss `>=30%` hoặc RTT trung bình `>=200ms` trong 3 mẫu liên tiếp; mỗi mẫu cách khoảng 5 phút.
- RAM/storage: phần trống `<=10%` trong 3 mẫu liên tiếp; phục hồi từ `>=15%`.
- Link flap: cảnh báo từ lần link down thứ 4 trong ngày.
- Counter lỗi WAN: tổng FCS/alignment/overflow/collision tăng ít nhất 100 trong khoảng 5 phút.

## 9. Tải và tính khả thi

- Nhẹ: CPU, RAM, storage, uptime, IP WAN và counter Ethernet chỉ đọc thuộc tính RouterOS.
- Trung bình: kiểm tra PPPoE dùng vài ICMP mỗi phút.
- Nặng nhất: WAN Quality gửi 10 ICMP mỗi 5 phút trên mỗi đường; vẫn rất nhỏ so với lưu lượng Internet bình thường.
- Loop log quét log trong RAM mỗi phút. Log RouterOS có kích thước hữu hạn; chi phí thường thấp, nhưng nên kiểm tra CPU thực tế trên thiết bị rất yếu.
- DHCP Alert gửi một DHCP Discover mỗi phút theo cơ chế native của RouterOS.
- Telegram chỉ gọi HTTPS khi phát sinh cảnh báo hoặc phục hồi, không gọi mỗi chu kỳ bình thường.

Ba nhóm dùng ba Scheduler vì vẫn cần bật/tắt độc lập. Gom tiếp thành một Scheduler sẽ giảm rất ít tải nhưng mất khả năng tách nhóm.

Sau khi bật, theo dõi 24 giờ:

```routeros
/system resource print
/system script job print
/log print where message~"NET-ALERT"
```

Kiểm tra thực tế trên đúng RouterOS và model router vẫn bắt buộc trước khi dùng chính thức.
