Bookmark

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

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 đó tôi 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]

1
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. Tôi 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]

1
2
3
4
5
6
7
8
uci -q delete uhttpd.main.listen_http
uci 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_https
uci 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, tôi 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]

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]

1
2
luci-nginx
luci-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; tôi 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]

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
liblua
libubus
libubus-lua
libuci-lua
lua
luci-base
luci-lib-ip
luci-lib-jsonc
luci-lib-nixio
luci-mod-admin-full
luci-theme-bootstrap
rpcd
uhttpd

Danh sách Extended:[28]

1
2
3
4
5
luci
luci-app-firewall
luci-app-opkg
luci-proto-ipv6
luci-proto-ppp

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

1
2
3
4
5
6
7
8
9
# Upload packages to the router
ssh root@openwrt.lan mkdir -p /tmp/luci-offline
scp *.ipk root@openwrt.lan:/tmp/luci-offline

# Install packages
ssh root@openwrt.lan opkg install /tmp/luci-offline/*.ipk

# Clean up
ssh root@openwrt.lan 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]

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
cat << "EOF" > opkg-offline-luci.sh
#!/bin/sh

# Exit on error
set -e

# Configuration parameters
OWRT_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 release
eval $(ssh "${OWRT_USER}@${OWRT_HOST}" cat /etc/os-release)

# Fetch LuCI packages
REPO_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}" ;;
esac
REPO_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|")
EOI
done

# Upload packages to OpenWrt
ssh "${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}"
EOF
chmod +x opkg-offline-luci.sh
./opkg-offline-luci.sh

Script dùng eval với /etc/os-release lấy từ router nên tôi 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ị; tôi 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


0 Bình luận

Góp Ý / Bình Luận / Đánh giá