🌐 VI | EN

LuCI essentials trên OpenWrt: cài đặt, HTTPS, port thay thế và offline

Nghia Phan
Nghia Phan
🌐 English version Bài viết kỹ thuật Lượt xem

LuCI là giao diện web cho nhiều tác vụ quản trị OpenWrt. Stable release thường có sẵn LuCI, còn snapshot có thể cần cài thêm; máy chỉ có 4 MB flash hoặc 32 MB RAM có thể không đủ chỗ cho full install. Khi đó mình chọn image có LuCI sẵn hoặc dùng build tối giản, không cố cài mù rồi làm đầy flash.[28]

1. Dùng Firmware Selector

Mở:[28]

https://firmware-selector.openwrt.org/?version=SNAPSHOT

Nhập đúng thiết bị, bấm mũi tên nhỏ cạnh Customize installed packages and/or first boot script, rồi:[28]

  1. Kéo xuống bấm REQUEST BUILD.[28]
  2. Chờ build xong và tải image SYSUPGRADE.[28]
  3. Chuyển image lên router và thực hiện sysupgrade theo hướng dẫn upgrade tương ứng.[28]

Bật truy cập HTTP

Luồng Firmware Selector ở trên dùng cho các bản mới hơn 24.10 và snapshot theo nội dung nguồn. Mình không đoán target; luôn chọn đúng model trong selector trước khi build.[28]

Thay HTTP bằng HTTPS

  1. Mở cùng URL và mở phần tùy chỉnh package.[28]
  2. Thêm dấu - trước luci để bỏ package HTTP.[28]
  3. Thêm luci-ssl.[28]
  4. Generate image như bước trên, tải SYSUPGRADE và upgrade.[28]

Thêm ngôn ngữ

Nếu biết tên language package, thêm package đó vào danh sách tùy chỉnh, generate image, rồi transfer và sysupgrade. Tên package phải đúng release/target; không copy package của bản khác.[28]

2. Đổi LuCI sang port khác

Các port mẫu của nguồn là HTTP 8080/TCP và HTTPS 8443/TCP:[28]

uci -q delete uhttpd.main.listen_httpuci add_list uhttpd.main.listen_http="0.0.0.0:8080"uci add_list uhttpd.main.listen_http="[::]:8080"uci -q delete uhttpd.main.listen_httpsuci add_list uhttpd.main.listen_https="0.0.0.0:8443"uci add_list uhttpd.main.listen_https="[::]:8443"uci commit uhttpd/etc/init.d/uhttpd restart

Sau khi restart, mình dùng đúng scheme/port mới và cập nhật firewall quản trị nếu cần. Không expose LuCI cho Internet hoặc guest network chỉ vì đã đổi port.[28]

Quảng cáo

LuCI, uHTTPd và file cấu hình

LuCI là meta package kéo theo nhiều package, đáng chú ý là uHTTPd. Cấu trúc mặc định trong tài liệu:[28]

  • document root: /www;[28]
  • /www/index.html chuyển tới /cgi-bin/luci;[28]
  • CGI gateway gọi Lua tại /usr/bin/lua;[28]
  • file cấu hình chính: /etc/config/uhttpd/etc/config/luci.[28]

Có thể chạy LuCI trên nginx với một trong hai package:[28]

luci-nginxluci-ssl-nginx

Bản luci-ssl-nginx thêm nginx-ssl, uwsgi-cgi và cấu hình mặc định để redirect HTTP sang HTTPS. Nguồn cũng nêu BusyBox httpd cho image quá hạn chế dung lượng, nhưng setup này ít được dùng và cần cấu hình thủ công; mình chỉ chọn khi hiểu rõ giới hạn.[28]

3. Cài offline các package LuCI

Tải package đúng platform và release trước. Danh sách Basic trong tài liệu:[28]

liblualibubuslibubus-lualibuci-lualualuci-baseluci-lib-ipluci-lib-jsoncluci-lib-nixioluci-mod-admin-fullluci-theme-bootstraprpcduhttpd

Danh sách Extended:[28]

luciluci-app-firewallluci-app-opkgluci-proto-ipv6luci-proto-ppp

Transfer vào RAM disk của router, cài rồi xóa thư mục tạm:[28]

# Upload packages to the routerssh [email protected] mkdir -p /tmp/luci-offlinescp *.ipk [email protected]:/tmp/luci-offline# Install packagesssh [email protected] opkg install /tmp/luci-offline/*.ipk# Clean upssh [email protected] rm -f -R /tmp/luci-offline

Nếu router không có Internet, tải package từ máy khác. Không để .ipk lâu trong /tmp vì đó là RAM.[28]

4. Script offline cho 24.10 và cũ hơn

Nguồn có script dưới đây cho trường hợp router có Internet hoặc chia script thành hai phần: phần rsync chạy ở máy có kết nối package repository, phần upload/install chạy tới router. Thay OWRT_HOST bằng hostname/IP thật trước khi chạy:[28]

cat << "EOF" > opkg-offline-luci.sh#!/bin/sh# Exit on errorset -e# Configuration parametersOWRT_USER="root"OWRT_HOST="openwrt.lan"OWRT_TEMP="/tmp/luci-offline"OWRT_PKGS="libiwinfo20210430 libiwinfo-lua liblua5.1.5 \liblucihttp0 liblucihttp-lua libubus20220601 libubus-lua \libuci-lua lua luci-base luci-lib-ip luci-lib-jsonc \luci-lib-nixio luci-mod-admin-full luci-mod-network \luci-mod-status luci-mod-system luci-theme-bootstrap \rpcd uhttpd"# Fetch OpenWrt releaseeval $(ssh "${OWRT_USER}@${OWRT_HOST}" cat /etc/os-release)# Fetch LuCI packagesREPO_LOCAL="file://${1:-${OWRT_TEMP}}/"REPO_URL="https://downloads.${HOME_URL#*//}"case "${VERSION_ID}" in(snapshot) REPO_DIR="downloads/snapshots" ;;(*) REPO_DIR="downloads/releases/${VERSION_ID}" ;;esacREPO_CORE="${REPO_DIR}/targets/${OPENWRT_BOARD}"REPO_PKGS="${REPO_DIR}/packages/${OPENWRT_ARCH}"for REPO_DIR in "${REPO_CORE}" "${REPO_PKGS}"do mkdir -p "${REPO_LOCAL#*//}${REPO_DIR#*/}"rsync -n --bwlimit="8M" --del -r -t -v \--include="*/" --include-from="-" --exclude="*" \"${REPO_URL/https/rsync}${REPO_DIR}/" \"${REPO_LOCAL#*//}${REPO_DIR#*/}/" << EOI$(echo "${OWRT_PKGS// /$'\n'}" \| sed -e "s|^|/**/|;s|$|_*.ipk|")EOIdone# Upload packages to OpenWrtssh "${OWRT_USER}@${OWRT_HOST}" "mkdir -p ${OWRT_TEMP}"find "${OWRT_TEMP}" -name "*.ipk" -exec scp "{}" "${OWRT_USER}@${OWRT_HOST}:${OWRT_TEMP}" ";"ssh "${OWRT_USER}@${OWRT_HOST}" "opkg install ${OWRT_TEMP}/*.ipk"ssh "${OWRT_USER}@${OWRT_HOST}" "rm -f -R ${OWRT_TEMP}"rm -f -R "${OWRT_TEMP}"EOFchmod +x opkg-offline-luci.sh./opkg-offline-luci.sh

Script dùng eval với /etc/os-release lấy từ router nên mình chỉ chạy với host/đường SSH tin cậy. Nó cũng giả định package names khớp release; nếu target khác, phải lấy đúng repository thay vì sửa bừa path.[28]

Kiểm tra cuối

Sau khi cài, mở IP/hostname của router, thử HTTP hoặc HTTPS đúng port, đăng nhập bằng tài khoản cục bộ và kiểm tra System → Software/các menu LuCI. LuCI là lớp quản trị; mình vẫn giữ SSH/console dự phòng và không coi HTTPS trên port 8443 là lý do để mở giao diện ra WAN.[28]

Nguồn

Tài liệu gốc: [LuCI essentials]1, đăng/cập nhật 2026-08-26.[28]

[28] https://openwrt.org/docs/guide-user/luci/luci.essentials — OpenWrt Wiki: LuCI essentials

Footnotes

  1. https://openwrt.org/docs/guide-user/luci/luci.essentials — LuCI essentials.

Bình Luận & Thảo Luận

Góp ý, hỏi đáp và chia sẻ suy nghĩ của bạn

Markdown & QQ Emoji
Đang tải khung bình luận...