Giao diện
8. Bảo mật & tuân thủ
8.1. Provider dùng phiên OAuth thuê bao
Một số provider trong 9router dùng phiên đăng nhập (OAuth) của gói thuê bao cá nhân thay cho API key. 9router hiển thị cảnh báo sau cho các provider này:
Risk Notice (nguyên văn từ 9router)
⚠️ Risk Notice: This provider uses a subscription/OAuth session not officially licensed for proxy/router use. Account may be restricted or banned. Use at your own risk.
Nghĩa là: provider này dùng phiên thuê bao hoặc OAuth chưa được cấp phép chính thức để dùng qua proxy hoặc router. Tài khoản có thể bị hạn chế hoặc bị khoá. Người dùng tự chịu rủi ro.
| Provider | Alias (tiền tố của id model) |
|---|---|
| Antigravity | ag |
| OpenAI Codex | cx |
| Claude Code | cc |
| Gemini CLI | gc |
| GitHub Copilot | gh |
| Kiro AI | kr |
Khuyến nghị: ngắt kết nối các provider này trong 9router và dùng provider có API key chính thức. Nếu chưa ngắt được ngay, ẩn model của chúng khỏi opencode theo 3.5.
8.2. Tài khoản Claude
Theo điều khoản của Anthropic, phiên đăng nhập OAuth của các gói Claude Free, Pro và Max chỉ dùng cho Claude Code và Claude.ai. Không kết nối phiên này vào 9router hay công cụ bên thứ ba khác. Nếu cần model Claude qua 9router, dùng API key tạo trong Claude Console. Chi phí tính theo mức sử dụng.
8.3. Quản lý API key
- Không ghi key vào file cấu hình, script hay kho mã nguồn. Dùng biến môi trường theo 2.4.
- Mỗi máy hoặc mỗi người dùng một key riêng.
- Đổi key định kỳ, ví dụ 90 ngày một lần:
- Khi nghi key bị lộ, xoá key đó trên 9router ngay. Sau đó tạo key mới theo các bước trên.
8.4. Lệnh nhạy cảm
| Lệnh | Rủi ro | Cách dùng an toàn |
|---|---|---|
opencode auth export | In toàn bộ credential đã lưu | Không chạy khi chia sẻ màn hình hoặc ghi log terminal |
echo $NINE_ROUTER_KEY, $env:NINE_ROUTER_KEY | In key ra màn hình | In độ dài key theo 2.4 |
opencode service get | Có thể in mật khẩu của service | Chỉ chạy khi cần, không chia sẻ kết quả |
curl -v | In header Authorization chứa key | Bỏ -v khi gọi 9router |
--print-logs | Log có thể chứa đường dẫn và thông tin cấu hình | Lọc dòng cần xem trước khi chia sẻ |
8.5. Giới hạn truy cập mạng
Mặc định, 9router lắng nghe trên 0.0.0.0. Mọi máy kết nối được tới máy của bạn đều gọi được 9router. Khi khởi động ở chế độ này, 9router in cảnh báo:
text
⚠ Network-exposed: reachable at http://<LAN-IP>:20128 (bound 0.0.0.0). Use --host 127.0.0.1 for local-only.| Tình huống | Khuyến nghị |
|---|---|
| Dùng một mình | Chạy 9router với --host 127.0.0.1, xem 2.3.1 |
| Dùng chung trong LAN hoặc VPN của team | Bật Require API key, cấp key riêng cho từng người, giới hạn bằng tường lửa |
| Truy cập từ xa | Dùng VPN hoặc SSH tunnel |
| Mở ra Internet | Không làm |
8.5.1. Kiểm tra endpoint danh sách model
Tuỳ cấu hình, GET /v1/models có thể trả kết quả mà không cần key. Kiểm tra bằng lệnh sau. Lệnh không gửi key:
bash
curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:20128/v1/modelspowershell
curl.exe -s -o NUL -w "%{http_code}`n" http://127.0.0.1:20128/v1/models| Kết quả | Ý nghĩa |
|---|---|
401 | Danh sách model yêu cầu key |
200 | Ai kết nối được tới cổng 20128 đều xem được danh sách model. Giới hạn mạng là lớp bảo vệ chính |
8.5.2. Kiểm tra địa chỉ lắng nghe
bash
netstat -ano | grep ':20128' | grep LISTENINGpowershell
Get-NetTCPConnection -LocalPort 20128 -State Listen | Select-Object LocalAddress, LocalPort, OwningProcess| Địa chỉ lắng nghe | Ý nghĩa |
|---|---|
127.0.0.1 | Chỉ máy này truy cập được |
0.0.0.0 hoặc :: | Máy khác trong mạng có thể truy cập, tuỳ theo tường lửa |
8.5.3. Tường lửa Windows
Các lệnh dưới đây cần PowerShell chạy với quyền quản trị.
Máy cá nhân. Chặn mọi kết nối từ máy khác vào cổng 20128:
powershell
New-NetFirewallRule -DisplayName "9router - block inbound 20128" -Direction Inbound -Protocol TCP -LocalPort 20128 -Action BlockRule này không ảnh hưởng kết nối từ chính máy (loopback). Trong Windows Firewall, rule Block được ưu tiên hơn rule Allow.
Máy chạy 9router cho team. Chỉ cho phép máy trong cùng mạng con:
powershell
New-NetFirewallRule -DisplayName "9router - LAN only (TCP 20128)" -Direction Inbound -Protocol TCP -LocalPort 20128 -RemoteAddress LocalSubnet -Action AllowRule Allow này chỉ giới hạn được truy cập khi không có rule Allow nào khác cho node.exe đang bật. Khi Node.js mở cổng lần đầu, Windows thường hỏi quyền truy cập mạng và tự tạo rule Allow cho node.exe. Liệt kê các rule đó:
powershell
Get-NetFirewallApplicationFilter | Where-Object Program -like '*node.exe' | Get-NetFirewallRule | Select-Object DisplayName, Enabled, Direction, Action, ProfileTắt rule không cần thiết bằng Disable-NetFirewallRule -DisplayName "<tên-rule>", hoặc giới hạn RemoteAddress của rule đó.
Hide to Tray bỏ tham số --host
Mục Hide to Tray (Background) trong menu của 9router ghi đè 9router.vbs và bỏ --host. Sau khi dùng mục này, làm lại 2.3.1 và kiểm tra lại địa chỉ lắng nghe theo 8.5.2.
8.6. Đánh giá plugin
Kết quả đánh giá mã nguồn opencode-models-discovery@2.1.1 ngày 04/11/2026:
- Không có script cài đặt (install script), không chạy lệnh hệ thống, không dùng
eval. - API key chỉ được gửi trong header
AuthorizationtớibaseURLđã cấu hình. - Với
modelInfoFormatlàomniroute, plugin chỉ gọi 9router. Chỉ hai định dạngmodels.devvàaiproxytải dữ liệu từhttps://models.dev/models.json.
Phiên bản plugin được ghim trong plugins. Đánh giá lại trước mỗi lần nâng cấp theo 5.5.