Bookmark

Chuẩn bị TFTP recovery qua Ethernet cho OpenWrt

TFTP recovery qua Ethernet chỉ là phần chuẩn bị máy chủ. Bootloader của từng router mới quyết định IP, tên file, nút bấm, port và cách ghi firmware; không phải model nào cũng hỗ trợ TFTP. Trang OpenWrt mô tả hai hướng: router chạy TFTP client để tải file từ máy tính, hoặc router chạy TFTP server để máy tính upload file. Bài này tập trung vào việc dựng host TFTP và không bịa quy trình trigger theo model.1

Cảnh báo: Chỉ bật TFTP trên interface LAN, chỉ cho phép UDP 69 từ mạng riêng, tắt server ngay sau khi recovery xong và không để firmware ngoài ý muốn trong thư mục phục vụ.1

Quy trình chung

  1. Tải đúng OpenWrt hoặc stock firmware, đổi tên đúng filename mà Device Page yêu cầu và đặt vào thư mục TFTP.
  2. Đặt IP Ethernet của máy tính đúng như Device Page.
  3. Khởi động TFTP server.
  4. Nối máy tính và router bằng Ethernet.
  5. Bật router, nhấn nút hoặc vào bootloader recovery theo hướng dẫn riêng của model.
  6. Chờ file truyền và quá trình flash hoàn tất.
  7. Dừng TFTP server.

TFTP recovery thường giữ bootloader nguyên vẹn sau khi flash OpenWrt, nhưng tài liệu nhấn mạnh phải kiểm tra chính xác model trong Device Page. Trang generic này không mô tả bước ghi flash của từng hãng.1

Giới hạn firewall bắt buộc

  • Cho TFTP UDP 69 chỉ khi nguồn và đích là IP LAN riêng.
  • Không cho traffic từ/đến 127.0.0.1 hoặc lo.
  • Không cho nguồn là IP Internet/public.
  • Dùng cáp trực tiếp hoặc switch riêng khi cần; tránh để server mở ra WAN.

macOS

dnsmasq

Nguồn đưa hai đường dẫn cài đặt khác nhau cho dnsmasq. Chọn đúng đường dẫn của máy, đúng interface enX và đúng thư mục TFTP:

1
sudo /usr/local/opt/dnsmasq/sbin/dnsmasq -i enX -p 0 -z --enable-tftp --tftp-root /tmp

Hoặc:

1
sudo /opt/local/sbin/dnsmasq -i enX -p 0 -z --enable-tftp --tftp-root /tmp

Native command-line tftpd

Chép file vào thư mục TFTP mặc định với đúng tên mà router yêu cầu, sau đó load daemon:

1
2
sudo cp path/to/file/to/serve.bin /private/tftpboot/the_name_the_device_is_looking_for.bin
sudo launchctl load -F /System/Library/LaunchDaemons/tftp.plist

Kiểm tra UDP 69:

1
2
$ netstat -an | fgrep \*.69
udp4       0      0  *.69                   *.*

Khi xong, unload daemon:

1
sudo launchctl unload -F /System/Library/LaunchDaemons/tftp.plist

Ứng dụng TftpServer.app và PumpKIN

Nếu dùng TftpServer.app, tải từ nguồn đáng tin cậy của tác giả, đặt app và thư mục tftpfiles cùng một nơi, đặt IP macOS theo Device Page, mở app, kiểm tra đúng file rồi bấm Start TFTP. Trạng thái phải đổi thành Running; khi router đã lấy file, bấm Stop TFTP hoặc thoát app. Nếu app báo permission, dùng nút Fix của app, không tự nới quyền toàn hệ thống. PumpKIN cũng phải được firewall giới hạn LAN và tắt ngay sau khi dùng.1

Nếu cài công cụ qua MacPorts, nguồn nêu:

1
sudo port install inetutils dnsmasq

Windows

Windows TFTP và firewall

Bật thành phần TFTP:

1
Dism /online /Enable-Feature /FeatureName:TFTP /All

Mở UDP 69 có giới hạn interface/profile LAN:

1
netsh advfirewall firewall add rule name="TFTP" dir=in action=allow protocol=udp localport=69 remoteip=localsubnet interfacetype=lan profile=private,public

Tắt media sensing trong lúc recovery nếu Device Page yêu cầu:

1
2
netsh interface ipv4 set global dhcpmediasense=disabled
netsh interface ipv6 set global dhcpmediasense=disabled

Tftpd64, Tiny PXE và SolarWinds

Với Tftpd64/Tiny PXE, đặt thư mục root đúng, chỉ bật chế độ server cần thiết và đổi tên firmware theo model. Với SolarWinds, nguồn nhắc đặt service chạy thủ công khi cần:

1
2
sc config "Solarwinds TFTP Server" start=demand
sc stop "Solarwinds TFTP Server"

Trong Tftpd64, giới hạn security chỉ Send files nếu router là TFTP client; dùng switch giữa host và router khi reboot làm Windows mất link. Với SolarWinds, thư mục mặc định có thể là C:\TFTP-Root; vào File | Configure | Security và đặt “Send files” là hành động duy nhất. Đặt IP LAN tĩnh, trigger recovery theo Device Page và quan sát console để biết file đã được tải.1

Linux

dnsmasq

Tạo thư mục và chép image:

1
2
mkdir /srv/tftp
cp ~/tp_recovery.bin /srv/tftp

Khởi động dnsmasq ở chế độ TFTP:

1
dnsmasq --listen-address=0.0.0.0 --port=0 --enable-tftp --tftp-root=/srv/tftp --tftp-no-blocksize --user=root --group=root

Kiểm tra server đang lắng nghe:

1
netstat -lunp | grep 69

atftpd

Cài package tùy distro:

1
apt install atftpd

Hoặc:

1
yum install atftpd

Chuẩn bị file, quyền và daemon:

1
2
3
4
mkdir /srv/tftp
cp ~/tp_recovery.bin /srv/tftp
chown nobody:nogroup -R /srv/tftp
atftpd --daemon --no-fork --logfile - /srv/tftp

Kiểm tra bằng một trong hai lệnh:

1
netstat -lunp | grep 69
1
ss -lunp | grep 69

Tài liệu có ví dụ dùng TFTP client để đọc thử file:

1
2
3
4
tftp 192.168.0.66
tftp> get tp_recovery.bin
Received 8152633 bytes in 0.8 seconds
tftp> quit

Chỉ coi file đã sẵn sàng khi kích thước, tên, quyền và hash đúng; file truyền một phần không được dùng để recovery.1

Troubleshooting theo thứ tự

Nếu router không tải file, kiểm tra lần lượt:

  1. TFTP server có thực sự running và lắng nghe UDP 69 không?
  2. Thư mục TFTP có đúng vị trí và permission không?
  3. Firmware có đúng tên, đúng thư mục và đúng quyền không?
  4. Cáp mạng và port router có đúng không?
  5. IP server có đúng với IP mà router đang tìm không?
  6. Host có đúng subnet mask và IP tĩnh mà bootloader yêu cầu không?
  7. Host firewall đã cho UDP 69 từ local subnet chưa?
  8. Sau khi đổi IP host, đã restart TFTP server chưa?
  9. Dùng Wireshark/tcpdump với filter TFTP để xem có BOOTP/TFTP request không.
  10. Thử cáp khác, crossover cable, switch khác hoặc tốc độ khác.
  11. Thử port khác trên router/switch.
  12. Đọc output của console hoặc LED activity nếu model có.
  13. Kiểm tra ARP cache; xóa entry cũ bằng arp -d hoặc tạo mapping tĩnh bằng arp -s khi phù hợp.
  14. Dùng host thứ ba ping router trong cùng subnet để tách lỗi L2/L3.
  15. Thử phần mềm server/client khác hoặc mode truyền khác.
  16. Canh thời điểm power cycle và bắt đầu transfer sớm/muộn hơn theo cửa sổ bootloader.
  17. Xác nhận filename có chứa tftp nếu Device Page yêu cầu, rồi rename đúng OEM filename.1

Sau khi thành công, dừng server, xóa image khỏi thư mục phục vụ nếu không cần, đóng port UDP 69 và ghi lại filename/IP/recovery method trong tài liệu riêng của model. TFTP server không nên chạy liên tục trên máy HomeLab.1

Nguồn


0 Bình luận

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