Hướng dẫn mở SSH và flash OpenWRT cho Viettel NR3053

MỤC LỤC BÀI VIẾT (Nhấn để xem)
Bài viết được tham khảo từ bài gốc https://github.com/quytttb/immortalwrt-mt798x-rebase
của tác giả quytttb. Nếu được, hãy ủng hộ tác giả 1 Star trên github nhé.
Khám phá phần cứng Viettel SDMC NR3053
Tải các file cần thiết tại thư mục Github releases
Nạp firmware qua SSH từ ROM gốc (Không cần tháo vỏ)
- Máy tính chạy Linux và Windows cần cài sẵn
git,python, các chương trình hỗ trợ truy cập ssh/telnet như Putty, …
Bước 1 — Mở khoá SSH
Kết nối PC vào cổng LAN của router.
Factory reset router (nhấn giữ nút Reset >10 giây cho đến khi đèn tắt rồi sáng lại). Mật khẩu admin trang web lúc này sẽ là Serial Number (S/N) in dưới đáy router.
Clone và chạy công cụ unlock riêng cho NR3053:
Linux:
git clone https://github.com/quytttb/nr3053-tools.git cd nr3053-tools pip3 install -r requirements.txt python3 unlock_nr3053.py --password SERIAL_NUMBER_CUA_BANWindows (PowerShell):
git clone https://github.com/quytttb/nr3053-tools.git cd nr3053-tools py -m pip install -r requirements.txt py unlock_nr3053.py --password SERIAL_NUMBER_CUA_BANNếu script báo
config.cgichỉ trả JSON, hãy tảiconfig.binthủ công trong giao diện web ở mục Sao lưu / Backup, rồi chạy lại. Tham số--passwordvẫn bắt buộc vì script cần đăng nhập để upload file đã sửa:Linux:
python3 unlock_nr3053.py --password SERIAL_NUMBER_CUA_BAN --config-input /duong/dan/config.binWindows (PowerShell):
py unlock_nr3053.py --password SERIAL_NUMBER_CUA_BAN --config-input "C:\duong\dan\config.bin"Đợi script chạy xong và router khởi động lại, bạn sẽ có quyền truy cập SSH:
ssh root@192.168.1.1 # Mật khẩu: admin
Bước 2 — Hiểu sự khác biệt partition layout (quan trọng!)
⚠️ Cực kỳ quan trọng: Layout phân vùng của ROM gốc Viettel khác hoàn toàn với ImmortalWrt ở phần OS/firmware. Không thể dùng
sysupgradetrực tiếp vì ROM gốc dùngfirmware/firmware2kiểu flat, còn ImmortalWrt dùng UBI volumes.
ROM gốc Viettel và ImmortalWrt dùng cùng địa chỉ vật lý cho BL2/FIP (bootloader), nhưng tổ chức phần OS hoàn toàn khác:
| Offset NAND | ROM gốc Viettel (NR3053) | ImmortalWrt |
|---|---|---|
0x000000 – 0x100000 | BL2 (mtd1) | BL2 (mtd0) |
0x100000 – 0x200000 | u-boot-env (mtd2) | u-boot-env (mtd1) |
0x200000 – 0x400000 | Factory (mtd3) ← KHÔNG GHI | Factory (mtd2) ← KHÔNG GHI |
0x400000 – 0x600000 | FIP (mtd4) ← cùng offset vật lý | FIP (mtd3) ← cùng offset vật lý |
0x600000 → hết NAND | firmware (32MB) + firmware2 (32MB) + các vùng khác | ubi (~234MB) — toàn bộ hệ điều hành |
Chiến lược: Ghi FIP mới (U-Boot ImmortalWrt) vào đúng offset 0x400000 từ SSH của ROM gốc → reboot → U-Boot mới chạy → vào Web Failsafe → flash sysupgrade.itb qua HTTP (U-Boot sẽ tự định dạng lại vùng UBI).
Xác nhận layout từ SSH vào ROM gốc:
cat /proc/mtd
Kết quả điển hình ROM gốc NR3053:
dev: size erasesize name
mtd0: 10000000 00020000 "spi0.0" ← Raw toàn bộ NAND 256MB
mtd1: 00100000 00020000 "BL2"
mtd2: 00100000 00020000 "u-boot-env"
mtd3: 00200000 00020000 "Factory" ← TUYỆT ĐỐI KHÔNG GHI
mtd4: 00200000 00020000 "FIP" ← Ghi FIP mới vào đây
mtd5: 02000000 00020000 "firmware"
mtd6: 02000000 00020000 "firmware2"
mtd7: 08e00000 00020000 "rootfs_data"
...
Bước 3 — Ghi U-Boot ImmortalWrt vào NAND
Copy file FIP đúng thiết bị từ PC sang router:
# Chạy trên PC (Linux/macOS/Git Bash) — KHÔNG chạy trong SSH router
# NR3053:
scp immortalwrt-mediatek-filogic-viettel_nr3053-bl31-uboot.fip root@192.168.1.1:/tmp/fip.bin
# 32X6:
scp immortalwrt-mediatek-filogic-viettel_32x6-bl31-uboot.fip root@192.168.1.1:/tmp/fip.bin
Windows (PowerShell):
Windows 10/11 có sẵn OpenSSH Client. Trong PowerShell hoặc CMD:
scp immortalwrt-mediatek-filogic-viettel_nr3053-bl31-uboot.fip root@192.168.1.1:/tmp/fip.bin
Mật khẩu sau unlock: admin
Sử dụng Powershell/cmd hoặc Putty để SSH vào router, ghi FIP. Vì ROM gốc NR3053 có MTD tên FIP — có thể dùng trực tiếp:
# Xác nhận mtd4 là FIP (kích thước 0x200000 = 2097152 bytes)
cat /proc/mtd | grep FIP
# Ghi FIP ImmortalWrt vào phân vùng FIP
mtd write /tmp/fip.bin FIP
Kết quả thành công:
Unlocking FIP ...
Writing from /tmp/fip.bin to FIP ... [w]
Nếu ROM gốc của thiết bị không có MTD tên FIP (kiểm tra cat /proc/mtd), dùng lệnh dd ghi theo offset vật lý. Offset FIP = 0x400000, erase block = 0x20000 (128KB) → seek = 0x400000 / 0x20000 = 32:
# Ghi raw vào NAND tại offset 0x400000 (bỏ qua BL2 + env + Factory)
dd if=/tmp/fip.bin of=/dev/mtd0 bs=131072 seek=32 conv=sync
Sau khi ghi xong, reboot:
sync && reboot
Bước 4 — Cài firmware ImmortalWrt qua Web Failsafe
Sau khi reboot, router chạy U-Boot ImmortalWrt. Do vùng NAND chưa có hệ điều hành hợp lệ theo định dạng UBI của ImmortalWrt, U-Boot sẽ tự động vào chế độ Web Failsafe.
serverip = 192.168.1.254 (khác với 192.168.1.2 mà một số hướng dẫn khác dùng). Đặt IP PC là 192.168.1.254.- Đặt IP tĩnh cho card mạng PC:
192.168.1.254/24.
Linux:
# Linux — thay eth0 bằng tên interface thật
sudo ip addr flush dev eth0
sudo ip addr add 192.168.1.254/24 dev eth0
sudo ip link set eth0 up
Windows
# Thay name bằng tên cổng LAN đang cắm (tổ hợp Win+R -> gõ ncpa.cpl -> Enter để xem)
netsh interface ip set address name="Ethernet" static 192.168.1.254 255.255.255.0
Mở trình duyệt, vào
http://192.168.1.1/— giao diện “FIRMWARE UPDATE” sẽ hiện ra.Chọn file
*-squashfs-sysupgrade.itbđúng thiết bị:- NR3053:
immortalwrt-mediatek-filogic-viettel_nr3053-squashfs-sysupgrade.itb
- NR3053:
Bấm Upload → Update. Đợi ~3 phút. Router tự reboot vào ImmortalWrt.
Nếu không vào được Web Failsafe: Ping thử
ping 192.168.1.1. Nếu không ping được nghĩa là FIP ghi sai (sai thiết bị hoặc file bị lỗi). Cần UART để debug, hoặc thử lại từ Bước 3 với cách ghiddraw.
Gỡ lỗi
mtk_uartboot — handshake timeout / không kết nối
- Kiểm tra TX/RX đã đảo (TX adapter ↔ RX board).
- Đúng mức 3.3 V, không dùng 5 V.
- Thử cổng khác: Linux
/dev/ttyUSB0,/dev/ttyUSB1; WindowsCOM3,COM4(Device Manager). - Chạy
mtk_uartboottrước, rồi mới cắm nguồn hoặc nhấn reset. - Kẹp 2 cửa sổ sẵn: mtk_uartboot + picocom/PuTTY — không mở picocom/PuTTY trong lúc mtk_uartboot đang chạy.
- Dùng đúng file BL2 RAM Payload tải từ quytttb/bl-mt798x-dhcpd Releases cho thiết bị tương ứng (
bl2-viettel-nr3053-ram.binhoặcbl2-viettel-32x6-ram.bin).
Sau FIP received không thấy log U-Boot:
Ctrl+Ccửa sổ mtk_uartboot ngay.- Cửa sổ kia: Enter (picocom) hoặc Open (PuTTY) trong 1–2 giây — đây là lý do nên kẹp 2 cửa sổ từ đầu.
- Nếu vẫn trống: rút nguồn, lặp lại.
- Hai chương trình không cùng chiếm
/dev/ttyUSB0hoặcCOMxmột lúc.
TFTP timeout / không tải được file
- TFTP server đang chạy và lắng nghe UDP 69.
- IP máy tính
192.168.1.254, subnet/24, không gateway, tắt VPN. - Tên file trong thư mục TFTP khớp chính xác (phân biệt hoa/thường trên Linux TFTP).
- Trong U-Boot:
printenv serverip ipaddr→ phải là192.168.1.254và192.168.1.1.
Windows thêm:
- Tftpd64 chạy Administrator, tab Tftp Server, Server interfaces = card
192.168.1.254(không phải127.0.0.1). - Current Directory trùng thư mục chứa file
.itb. - Cho phép Tftpd64 qua Windows Firewall (UDP 69).
- Cửa sổ Tftpd64 phải hiện dòng
Read requestkhi router tải — không thấy = router chưa kết nối tới PC. - Không dùng Wi-Fi — chỉ cáp Ethernet trực tiếp PC ↔ cổng LAN router.
Sau cài đặt, thiết bị không khởi động được
- Vào bootmenu, chọn [4] Boot recovery system from NAND — nếu đã cài recovery.
- Nếu recovery chưa có, dùng Tuỳ chọn A để boot initramfs từ TFTP.
- Trong initramfs, chạy
firstboothoặc xoá partition từ CLI.
Reset về mặc định
Từ U-Boot bootmenu, chọn [a] Reset all settings to factory defaults.
Hoặc lệnh thủ công:
run reset_factory
reset
NR3053 — cảnh báo NMBM cũ
Nếu thiết bị trước đây dùng firmware có NMBM, khi lần đầu boot initramfs V2, chạy:
# Trong ImmortalWrt initramfs shell
ubirmvol /dev/ubi0 -N rootfs_data 2>/dev/null
ubirename /dev/ubi0 fit fit
Nếu UBI không nhận do bảng NMBM cũ, cần xoá toàn bộ phân vùng ubi từ U-Boot:
ubi part ubi
run ubi_format
# Thiết bị sẽ reset, sau đó chạy lại cài đặt từ bước đầu
Firmware: GitHub Releases hoặc bin/targets/mediatek/filogic/ sau build
Cập nhật: 2026-07-03
Bình luận & Thảo luận 0
Chia sẻ thắc mắc, phản hồi hoặc kinh nghiệm thực chiến của bạn