Bỏ qua nội dung
InstagramYouTubeFacebook

Tutorial

RouterOS Containers: Docker trên MikroTik

Chạy container kiểu Docker trên MikroTik RouterOS v7: bật chế độ container, thiết lập mạng veth và lưu trữ, rồi triển khai và quản lý ở quy mô lớn.

Tóm tắt MikroTik RouterOS v7 có thể chạy các container tương thích Docker trực tiếp trên router, nhờ đó việc lọc DNS, các tác nhân giám sát và các dịch vụ mạng nhỏ nằm cạnh tầng định tuyến thay vì trên một thiết bị riêng. Hướng dẫn này bao gồm các yêu cầu về phần cứng và kiến trúc, cách bật container device-mode một cách an toàn, xây dựng mạng veth và bridge với NAT, triển khai container đầu tiên của bạn và quản lý container trên toàn bộ đội thiết bị. RouterOS 7.23 (tháng 5 năm 2026) đã mở rộng danh mục các ứng dụng container sẵn sàng chạy, biến đây thành một lựa chọn thiết thực cho cả các ISP lẫn người dựng phòng lab.

Sơ đồ kiến trúc container MikroTik RouterOS cho thấy một router lưu trữ các container dịch vụ kiểu Docker xếp chồng lên nhau

Containers trên MikroTik RouterOS Là Gì?

Containers trên MikroTik RouterOS là cách MikroTik triển khai Linux container, cho phép một thiết bị RouterOS v7 chạy các image ứng dụng cô lập, tương thích Docker trực tiếp trên router. Chúng hoạt động với image từ Docker Hub, GCR, Quay và các registry khác, và mặc dù RouterOS dùng cú pháp CLI riêng thay vì lệnh docker, hành vi nền tảng vẫn giống nhau — kéo một image, cấp cho nó một mạng, gắn lưu trữ và chạy nó. (Tài liệu MikroTik)

Đối với một ISP hoặc phòng lab, điều này có nghĩa là các dịch vụ nhỏ gần mạng có thể được đặt cùng với tầng định tuyến: một bộ lọc DNS Pi-hole hoặc AdGuard, một tác nhân giám sát, một reverse proxy hoặc một IoT bridge. Bản phát hành ổn định RouterOS 7.23 vào ngày 25 tháng 5 năm 2026 đã thêm một danh sách dài các ứng dụng sẵn sàng chạy — bao gồm paperless-ngx, nextcloud, lorawan-stack, birdnet-go và các giao diện quản lý Docker như portainerdockge — cùng với một công tắc network-outgoing-access mới để chặn một container khởi tạo lưu lượng đi ra. (Changelog RouterOS 7.23)

Yêu Cầu và Phần Cứng

Gói container tương thích với các kiến trúc arm, arm64 và x86, và phải được cài đặt trước mọi thứ khác. Kéo một image từ xa cần rất nhiều dung lượng trống, vì vậy MikroTik khuyến nghị dùng lưu trữ ngoài thay vì bộ nhớ flash nội bộ của thiết bị. (Tài liệu MikroTik)

Hãy dự trù phương tiện ngoài trên USB, SATA hoặc NVMe, được định dạng bằng hệ thống tệp mà RouterOS hỗ trợ. MikroTik gợi ý một đĩa có thể đạt ít nhất 100 MB/s thông lượng tuần tự và 10K IOPS ngẫu nhiên — đĩa chậm hơn khiến việc giải nén image kéo dài đau đớn. Tránh đặt các volume container trên bộ nhớ tích hợp, vốn nhỏ và hao mòn dưới các kiểu ghi của container. Các thiết bị có flash rất hạn chế nên dùng image dựng sẵn trên đĩa đã gắn thay vì kéo từ xa.

Bật Container Device-Mode Một Cách An Toàn

Container bị tắt theo mặc định và, vì lý do chính đáng, đòi hỏi quyền truy cập vật lý để bật. Bật tính năng này bằng:

/system/device-mode/update container=yes

Sau đó RouterOS chờ bạn xác nhận bằng cách nhấn nút reset hoặc khởi động lại nguội. Cổng xác nhận vật lý này là một biện pháp kiểm soát an ninh có chủ đích: một khi chế độ container đã bật, container có thể được thêm, khởi động và gỡ bỏ từ xa, và một image độc hại có thể trở thành chỗ đứng trên router. MikroTik nói thẳng về điều này — nếu thiết bị RouterOS của bạn bị xâm phạm, container khiến việc cài đặt phần mềm độc hại trở nên dễ dàng, và không có bảo đảm an ninh nào cho image của bên thứ ba.

Hãy coi router lưu trữ container an toàn đúng bằng image kém tin cậy nhất mà bạn chạy trên đó. Chỉ triển khai các image bạn tin tưởng, giữ thiết bị sau tường lửa và xem lại hướng dẫn vận hành an ninh device-mode của chúng tôi trước khi bật điều này trong môi trường sản xuất.

Xây Dựng Mạng Container

Container cần một virtual interface, một bridge và NAT để truy cập internet. Mẫu dưới đây phản ánh mạng “bridge” trong Docker. Trước tiên hãy tạo một veth interface và một bridge chia sẻ địa chỉ gateway của nó:

/interface/veth/add name=veth1 address=172.17.0.2/24 gateway=172.17.0.1
/interface/bridge/add name=containers
/ip/address/add address=172.17.0.1/24 interface=containers
/interface/bridge/port add bridge=containers interface=veth1

Một veth có thể phục vụ nhiều container, và việc tạo thêm các cặp veth/bridge cho phép bạn cô lập các nhóm container với nhau. Nếu bạn mới làm quen với bridging trên RouterOS, hướng dẫn cấu hình bridge của chúng tôi giải thích mô hình nền tảng. Tiếp theo, thêm một quy tắc masquerade để lưu lượng container đi ra được dịch — xem hướng dẫn cấu hình NAT để có bức tranh đầy đủ:

/ip/firewall/nat/add chain=srcnat action=masquerade src-address=172.17.0.0/24

Triển Khai Container Đầu Tiên Của Bạn

Trỏ registry và thư mục giải nén tạm thời vào đĩa ngoài của bạn, rồi thêm image. Ví dụ Pi-hole dưới đây là ví dụ chuẩn từ tài liệu của MikroTik:

/container/config/set registry-url=https://registry-1.docker.io tmpdir=disk1/tmp
/container/add remote-image=pihole/pihole interface=veth1 root-dir=disk1/images/pihole name=pihole logging=yes

Việc thêm container bắt đầu tải xuống và giải nén nhưng không chạy nó. Kiểm tra tiến trình bằng /container/print và chờ đến khi status=stopped, rồi khởi động nó:

/container/start pihole

Cuối cùng, công bố dịch vụ bằng cách chuyển tiếp một cổng từ router tới địa chỉ veth:

/ip firewall nat add action=dst-nat chain=dstnat dst-address=192.168.88.1 dst-port=80 protocol=tcp to-addresses=172.17.0.2 to-ports=80

Pi-hole giờ trả lời trên IP LAN của router. Chạy lọc DNS theo cách này là một lựa chọn thay thế cho các blocklist gốc của RouterOS — nếu bạn thích cách không dùng container, hãy xem hướng dẫn RouterOS adlist của chúng tôi.

Quản Lý Containers Trên Toàn Đội Thiết Bị

Một container trên một router thì dễ. Câu hỏi vận hành thực sự đối với một ISP là tính nhất quán: cùng một image, cùng một sơ đồ veth và NAT, cùng một bố cục lưu trữ, và cùng các giới hạn start-on-boot và bộ nhớ trên mọi thiết bị. RouterOS cung cấp cho bạn các nguyên thủy — start-on-boot=yes tồn tại qua các lần khởi động lại, và memory-high hoặc memory-max giới hạn RAM cho mỗi container để một dịch vụ mất kiểm soát không thể bỏ đói tầng định tuyến:

/container/config/set memory-high=200M
/container/set pihole start-on-boot=yes

Phần khó là làm điều này giống hệt nhau trên hàng chục hoặc hàng trăm router từ xa, rồi chứng minh từng cái thực sự trở lại sau khi khởi động lại — đặc biệt khi thiết bị nằm sau CGNAT và bạn không thể dễ dàng tiếp cận IP công cộng của nó.

Mẹo

  • Giữ mọi volume container trên đĩa ngoài; không bao giờ trên NAND nội bộ.
  • Dùng một cặp veth/bridge riêng để cô lập container không tin cậy khỏi container tin cậy.
  • Đặt memory-max cho bất cứ thứ gì bạn không hoàn toàn tin tưởng để giữ router luôn phản hồi.
  • Để có một môi trường thử nghiệm sạch trước khi đụng tới sản xuất, hãy chạy cùng các image trên một instance CHR ảo hóa trước khi triển khai lên router vật lý.

Bước Tiếp Theo

Container biến một router MikroTik thành một host ứng dụng nhỏ, nhưng một đội các host như vậy cần được điều phối. MKController lập mẫu cấu hình RouterOS một cách tập trung, áp dụng nó cho mọi thiết bị trong kho của bạn, và theo dõi sự sai lệch để bạn thấy router nào đã đi chệch — và thông qua NATCloud nó tiếp cận các thiết bị sau CGNAT để xác nhận một container đã khởi động lại sau bảo trì. Điều đó thu hẹp khoảng cách giữa việc cấu hình một container bằng tay và vận hành chúng một cách đáng tin cậy trên toàn bộ một mạng ISP.

Bắt đầu dùng thử MKController miễn phí