블로그 이미지
훅크선장

카테고리

분류 전체보기 (361)
사진이야기 (23)
펭귄컴퓨팅 (120)
컴퓨터보안 (84)
절름발이 프로그래머 (59)
하드웨어개조 (23)
멀알려줄까 (35)
홈베이킹&홈쿠킹 (2)
잡다한것들 (15)
Total
Today
Yesterday

달력

« » 2024.4
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

공지사항

태그목록

최근에 올라온 글

준비사항 2가지 : 현재 컴퓨터에 Python3 설치하기 및 Telnet 프로그램 설치하기(준비하기)

※ Telnet 프로그램 설치하는 것이 만만치? 않아서, 요즘은 Netcat 프로그램을 Shell 모드로 사용하고 있다. 

    “nc -v 192.168.31.1 23” 명령어로 접속해서 쓰면 된다. 

 

사전 주의사항 :
공유기 판매 모델은 Xiaomi AX3200(모델 RB01, 국제 버전) 및 Redmi AX6S(모델 RB03, 중국 버전)의 두 가지 버전이 있다. 
두 버전 모두 정확히 동일한 하드웨어이지만, 유일한 차이점은 기본 펌웨어 버전(지역 잠금 여부)이 다르다는 것이다.

OpenWrt를 간단히 설치하려면 Telnet 기능이 필요한데, 문제는 일부 초기 생산 모델은 공장에서 텔넷이 활성화된 상태로 배송되었지만, 이후 장치는 대부분 텔넷이 비활성화된 상태로 배송되기 시작하여 OpenWrt를 쉽게 설치할 수 없게 되었다.
그러나 중국 버전 Redmi AX6S(모델 RB03)의 경우에는 telnet이 비활성화된 상태로 제공되더라도 기본 펌웨어(miwifi_rb03_firmware_stable_1.2.7_closedbeta.bin, 자세한 내용은 아래 참조)의 베타 버전을 설치하여 telnet 기능을 활성화할 수 있습니다. 이 베타버전 펌웨어는 Redmi AX6S(모델 RB03)에서 텔넷을 활성화하므로 OpenWrt 설치가 가능하게 할 수 있다.

 

※ 알리익스프레스에서 저렴한 중국 버전 Redmi AX6S(모델 RB03)을 구하는 것을 권장한다.
국제버전 Xiaomi AX3200(RB01 모델)인데, 공장에서 텔넷이 활성화되지 않은 경우에는 불행히도 UART 플래시 또는 "netmode: 4" 방법 외에는 텔넷을 활성화하는 알려진 방법이 없다. ㅠㅠ (많은 고난을 뚫고 펌웨어를 새로 설치할 지원자가 있는가??, UART 펌웨어 플래시는 상당히 과정이 복잡하다~!)

설치 단계:
0. 먼저 장비의 아래면에 있는 제품 라벨을 확인한다.  RB03 이라는 문자열을 확인한다. 
   가능하면, 그 옆쪽으로 장비의 시리얼넘버도 확인해서, 적어둔다. (SN: 으로 시작하는 뒤의 17자리 숫자와 글자이다.)


0. 아래 URL로 접근해서, 텔넷이 활성화되어 있는 것을 확인해보라~!
   http://192.168.31.1/cgi-bin/luci/api/xqsystem/fac_info

   아마도 아래와 같은 내용이 출력되며, 대부분 텔넷은 활성화되어 있지 않다!! ㅠㅠ

{"telnet":false,"init":false,"wl0_ssid":"xiaomi-router-rb03_miap951a_5G","ssh":false,"version":"1.0.37","facmode":false,"4kblock":false,"secboot":false,"wl1_ssid":"xiaomi-router-rb03_miap951a","uart":false}

 

1. 공유기를 인터넷에 연결하고, 중국어로 표시되는 화면에서 펌웨어 업로드 화면으로 진입한다.

현재 공유기에 인터넷을 연결하고, 추가적인 인터넷 회선이 없다면 작업용 노트북 또는 PC가 공유기에만 연결되어 있을 것이다.

추가적인 인터넷 회선이 있다면, 작업용 노트북 또는 PC를 직접 인터넷에 연결된 상태에서 중국어로 표시된 화면을 영어로 번역해서 볼 수 있을 것이다. 아래의 과정을 인터넷이 연결되지 않은 상태에서도 진행할 수 있도록, 중국어 화면과 영어 화면을 같이 표시한다.

 

1) 웹 브라우저로 http://192.168.31.1/ 공유기로 접속하면, 먼저 다음과 같은 화면이 표시된다.

화면 아래에 네모 체크박스 2개항과 아래에 버튼이 있다.

두개의 항은 각각 “사용자 라이선스 동의”와 “사용자 경험 개선 프로그램 가입”에 관련된 것으로 그냥 모두 체크하고, 아래 버튼을 눌러서 다음 단계로 진행하면 된다.  

※ 비록 사용자 관련 동의와 가입을 했더라도, 우리는 펌웨어를 완전히 교체하기 때문에 공유기의 정보가 향후 샤오미 회사에게 넘어갈 수가 없다.

2) 만약 공유기가 인터넷에 연결되어 있지 않다면, 다음의 화면이 표시된다. 

공유기의 WAN 포트를 반드시 인터넷 회선(DHCP)에 연결하여야 한다.  연결이 되었다면, 하단의 넓은 파란바 버튼을 눌러서 다음 단계로 진행한다.

 

3) 공유기가 인터넷에 연결되어 있으면, 바로 Internet Wizard 화면이 출력된다.

위에서부터 첫번째에는 슬라이드 옵션으로 무선 주파수 두 개를 동일한 모드로 운용할 지를 선택하는 것이고, 그 다음은 무선랜 Wi-Fi의 SSID와 비밀번호를 지정하는 곳이다. 이 두 가지는 지금 우리에게 꼭 필요하지 않지만, 그래도 설정한다.

무엇보다 Wi-Fi 비밀번호는 설정하여야 한다. 관리자 로그인 비밀번호로 사용하기 때문이다.

그 다음으로 네모 체크박스 2개항이 있다. 첫번째 항은 Wi-Fi 비밀번호를 관리자 암호로 같이 사용한다는 것이다. 반드시 체크하도록 한다.

그 다음 두번째 항은 최신 펌웨어를 자동으로 확인하여 업데이트하는 것인다. 우리에게 필요없는 것이다. 

요약) Wi-Fi 비밀번호를 설정하고, 첫번째 체크박스를 체크해준다. 그러면, Wi-Fi 비밀번호가 관리자 로그인 비밀번호가 된다. 

맨 하단의 버튼을 눌러서 다음으로 진행한다.

 

4) 앞에서 설정한 Wi-Fi의 SSID가 보이고, 임시로 내가 설정한 Passw-rd 라는 패스워드가 보인다.

 

5) 설정한 내용으로 공유기가 동작하는 상황이 표시된다. 이제 펌웨어 업데이트 화면으로 이동해야 한다. 

이 상태에서는 공유기를 통한 인터넷이 활성화 되어 있으므로, 구글 브라우저등을 통해서 페이지 번역이 가능할 것이다. 페이지 번역을 통해서 메뉴를 찾을 수 있지만, 중국어 메뉴에서 찾는 방법을 설명한다.

아래의 화면에서 상단 부분에 중국어 한자 네글자씩 세개가 보일 것이다. 이중에서 가운데 있는  “常用设置” 글자를 선택한다.

 

6) “常用设置” 글자가 선택되면, 그 아래에 5개의 동그란 아이콘이 보이는데, 그중에서 맨 오른쪽에 있는 영어 i 글자가 있는 오렌지색 동그라미를 선택한다. 오렌지색 동그라미를 선택하면 아래와 같은 화면이 보인다.

하얀 바탕 화면에서 세번째 줄에 보면, 1.0.37 과 같은  숫자가 보일 것이다. 그리고 그 아래에 회색 바탕에 직사각형 버튼이 보인다. (직사가형 버튼에 중국어 한자로 “手动升级”라고 쓰여 있다.) 바로 그 버튼을 누른다.  ※ manual upgrade 라는 의미이다.

 

7) 아래와 같이, manual upgrade를 위한 펌웨어 지정 다이얼로그가 나오면, “파일 선택” 을 눌러서 베타 펌웨어 파일을 지정하면 된다.

현재 여기에서 Redmi AX6(RB03 모델)인 경우, miwifi_rb03_firmware_stable_1.2.7_closedbeta.bin 베타 펌웨어를 아래의 링크에서 다운로드하고, “파일 선택” 에서 그 베타 펌웨어를 지정하면 된다.
https://github.com/YangWang92/AX6S-unlock/raw/master/miwifi_rb03_firmware_stable_1.2.7.bin
(MD5: 5eedf1632ac97bb5a6bb072c08603ed7)

8) miwifi_rb03_firmware_stable_1.2.7_closedbeta.bin 베타 펌웨어를 선택해서, 지정하면 아래와 같이 된다.

다이얼로그의 하단 파란색 버튼을 선택하여, 펌웨어 업그레이드를 진행시킨다.

 

9) manual upgrade 화면을 통해, 베타 펌웨어를 업로드하고 장비를 플래시하면, 아래와 같은 화면이 나오고 몇 분간 기다리는 시간이 필요하다.

 

10) 장비에 베타 펌웨어가 다 올라가면, 자동으로 아래와 같은 화면이 보일 것이다.

만약 자동으로 접속이 안된다면, 웹 브라우저에서  다시 192.168.31.1로 접속하면, 아래 화면이 보일 것이다.

QR코드 네모의 아래 빈칸에 이전 Internet Wizard 과정에서 지정한 Wi-Fi 비밀번호(로그인 암호)를 넣으면, 장비에 로그인된다.

 

11) 이전에서 했던 것과 같이, “常用设置” 글자를 선택하고, 화면에서 맨 오른쪽에 있는 영어 i 글자가 있는 오렌지색 동그라미를 선택한다.

하얀 바탕 화면에서 세번째 줄에 보면, 우리가 업로드한 베타 펌웨어 버전 번호 1.2.7 이라는 숫자가 보여야 한다.

1.2.7 버전의 베타 펌웨어가 정상적으로 업로드되었으므로, OpenWRT 펌웨어를 설치할 수 있는 환경이 되었다.

※ 1.2.7 버전 번호가 보이지 않는다면, 앞의 과정을 잘 반복해서 베타 펌웨어가 잘 설치될 수 있도록 한다.

 

3. 공유기의 환경 준비가 완료되었으므로,

https://github.com/YangWang92/AX6S-unlock/raw/master/unlock_pwd.py

에 있는 Python 프로그램 파일을 다운로드하고, unlock_pwd.py라는 이름으로 여러분의 컴퓨터 로컬 디스크에 저장한다. 그런 다음 커맨드창을 열어서, 다음 명령어줄의 <S/N>을 장비의 아래면에 있는 실제 시리얼 번호로 대체하여 실행한다. 
python3 unlock_pwd.py <S/N> 

위와 같은 형태로 명령을 실행하는데, 내 경우에는 
python3 unlock_pwd.py "36000/K1WW00000"
로 가능하면, “” 쌍따옴표를 이용해서 시리얼넘버를 둘러싸준다. (/ 특수문자 때문에 이렇게 한다.)

※ 인터넷 검색을 해서, 컴퓨터에 python3 를 먼저 설치해야만 한다.

이렇게 실행하면, 텔넷 접속을 위한 패스워드가 출력된다.
$ python3 unlock_pwd.py "36000/K1WW00000"
aeb5b9ac

 

4. 위 과정에서 확보된 패스워드 8자리 문자열을 가지고, telnet 으로 라우터 장비로 로그인한다.
$ telnet 192.168.31.1
Trying 192.168.31.1...
Connected to xiaoqiang.
Escape character is '^]'.

XiaoQiang login: root
Password: aeb5b9ac

 

BusyBox v1.25.1 (2021-10-25 11:02:56 UTC) built-in shell (ash)

 -----------------------------------------------------
       Welcome to XiaoQiang!
 -----------------------------------------------------
  $$$$$$\  $$$$$$$\  $$$$$$$$\      $$\      $$\        $$$$$$\  $$\   $$\
 $$  __$$\ $$  __$$\ $$  _____|     $$ |     $$ |      $$  __$$\ $$ | $$  |
 $$ /  $$ |$$ |  $$ |$$ |           $$ |     $$ |      $$ /  $$ |$$ |$$  /
 $$$$$$$$ |$$$$$$$  |$$$$$\         $$ |     $$ |      $$ |  $$ |$$$$$  /
 $$  __$$ |$$  __$$< $$  __|        $$ |     $$ |      $$ |  $$ |$$  $$<
 $$ |  $$ |$$ |  $$ |$$ |           $$ |     $$ |      $$ |  $$ |$$ |\$$\
 $$ |  $$ |$$ |  $$ |$$$$$$$$\       $$$$$$$$$  |       $$$$$$  |$$ | \$$\
 \__|  \__|\__|  \__|\________|      \_________/        \______/ \__|  \__|


root@XiaoQiang:~# 

 

5. OpenWrt 펌웨어를 설치하기 위한 준비과정으로 다음 명령을 차례로 실행한다.
root@XiaoQiang:~# nvram set ssh_en=1
root@XiaoQiang:~# nvram set uart_en=1
root@XiaoQiang:~# nvram set boot_wait=on
root@XiaoQiang:~# nvram set flag_boot_success=1
root@XiaoQiang:~# nvram set flag_try_sys1_failed=0
root@XiaoQiang:~# nvram set flag_try_sys2_failed=0
root@XiaoQiang:~# nvram set "boot_fw1=run boot_rd_img;bootm"
root@XiaoQiang:~# nvram commit

 

6.

https://downloads.openwrt.org/releases/22.03.2/targets/mediatek/mt7622/openwrt-22.03.2-mediatek-mt7622-xiaomi_redmi-router-ax6s-squashfs-factory.bin

컴퓨터에 다운로드한 openwrt-mediatek-mt7622-xiaomi_redmi-router-ax6s-squashfs-factory.bin 파일의 이름을 factory.bin으로 변경한다.
factory.bin 파일이 있는 동일한 디렉터리에서 새로운 커맨드 창을 열고, 다음 명령을 실행한다.
$ ll factory.bin 
-rw-r--r--@ 1 myname  staff  10485760 12  9 23:14 factory.bin
$ python3 -m http.server

Serving HTTP on :: port 8000 (http://[::]:8000/) ...
위와 같은 메시지가 출력되면,

다음, 다른 쪽의 텔넷 세션으로 이동해서 다음 명령어를 실행한다. 반드시 공유기에 연결된 현재 컴퓨터의 IP 주소를 먼저 확인해두어야 한다. 내 경우에는 192.168.31.234 이었다.

 

root@XiaoQiang:~# cd /tmp
root@XiaoQiang:/tmp# wget http://192.168.31.234:8000/factory.bin
Connecting to 192.168.31.234:8000 (192.168.31.234:8000)
factory.bin          100% |***********************************************************************************************| 10240k  0:00:00 ETA
root@XiaoQiang:/tmp# ls -la factory.bin
-rw-r--r--    1 root     root      10485760 Dec  9 22:20 factory.bin

공유기 쪽 세션에서 다운로드 받은 factory.bin 파일의 크기와 전송하는 쪽에서 확인한 파일의 크기를 확인한다. 꼭 제대로 확인한다.
펌웨어를 업로드한다.
root@XiaoQiang:/tmp# mtd -r write factory.bin firmware
Unlocking firmware ...

Writing from factory.bin to firmware ...     
Rebooting ...

잠시 대기한다. 한 1분 정도...

 

7. 공유기가 재부팅되면서, 컴퓨터 쪽의 IP 주소가 192.168.1.x 대역으로 바뀌면, 정상적으로 OpenWRT가 설치된 것이다.
웹브라우저로 192.168.1.1로 접근해서 확인한다. 패스워드 없이 그냥 로그인 하면 된다. 


먼저 system -> administration 으로 이동해서 패스워드를 설정하고, 그다음은 ssh 접근해서, 여러 패키지를 설치한다~!


$ ssh root@192.168.1.1
The authenticity of host '192.168.1.1 (192.168.1.1)' can't be established.
ED25519 key fingerprint is SHA256:FnxpFDIR5ay8gj2oDEcTD6dN8KiYOvfEnLZ4YUbGuXg.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.1.1' (ED25519) to the list of known hosts.
root@192.168.1.1's password: 


BusyBox v1.35.0 (2022-10-14 22:44:41 UTC) built-in shell (ash)

  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 -----------------------------------------------------
 OpenWrt 22.03.2, r19803-9a599fee93
 -----------------------------------------------------
root@OpenWrt:~# 

 

root@OpenWrt:~# opkg update
Downloading https://downloads.openwrt.org/releases/22.03.2/targets/mediatek/mt7622/packages/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_core
Downloading https://downloads.openwrt.org/releases/22.03.2/targets/mediatek/mt7622/packages/Packages.sig
Signature check passed.
Downloading https://downloads.openwrt.org/releases/22.03.2/packages/aarch64_cortex-a53/base/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_base
Downloading https://downloads.openwrt.org/releases/22.03.2/packages/aarch64_cortex-a53/base/Packages.sig
Signature check passed.
Downloading https://downloads.openwrt.org/releases/22.03.2/packages/aarch64_cortex-a53/luci/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_luci
Downloading https://downloads.openwrt.org/releases/22.03.2/packages/aarch64_cortex-a53/luci/Packages.sig
Signature check passed.
Downloading https://downloads.openwrt.org/releases/22.03.2/packages/aarch64_cortex-a53/packages/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_packages
Downloading https://downloads.openwrt.org/releases/22.03.2/packages/aarch64_cortex-a53/packages/Packages.sig
Signature check passed.
Downloading https://downloads.openwrt.org/releases/22.03.2/packages/aarch64_cortex-a53/routing/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_routing
Downloading https://downloads.openwrt.org/releases/22.03.2/packages/aarch64_cortex-a53/routing/Packages.sig
Signature check passed.
Downloading https://downloads.openwrt.org/releases/22.03.2/packages/aarch64_cortex-a53/telephony/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_telephony
Downloading https://downloads.openwrt.org/releases/22.03.2/packages/aarch64_cortex-a53/telephony/Packages.sig
Signature check passed.
root@OpenWrt:~# 

 

한글 UI 패키지를 설치해준다. 
root@OpenWrt:~# opkg install luci-i18n-base-ko
Installing luci-i18n-base-ko (git-22.339.56129-deebfa0) to root...
Downloading https://downloads.openwrt.org/releases/22.03.2/packages/aarch64_cortex-a53/luci/luci-i18n-base-ko_git-22.339.56129-deebfa0_all.ipk
Configuring luci-i18n-base-ko.
root@OpenWrt:~# 

8. 이제 한글로 된 최신 OpenWRT의 모습을 보게 된다.

 

 

 

------ 참고 -------------------

※ Telnet 설치하는 것이 너무 귀찮아서, 요즘은 그냥 Netcat을 쉘모드로 쓰고 있다. 참고하시라~! 

 

Mac OS X 에서 HomeBrew로 Telnet 명령어 설치하는 방법

 

$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

==> Checking for `sudo` access (which may request your password)...
Password:
==> This script will install:
/opt/homebrew/bin/brew
/opt/homebrew/share/doc/homebrew
/opt/homebrew/share/man/man1/brew.1
/opt/homebrew/share/zsh/site-functions/_brew
/opt/homebrew/etc/bash_completion.d/brew
/opt/homebrew
==> The following new directories will be created:
/opt/homebrew/Caskroom

 

Press RETURN/ENTER to continue or any other key to abort:
==> /usr/bin/sudo /bin/mkdir -p /opt/homebrew/Caskroom
==> /usr/bin/sudo /bin/chmod ug=rwx /opt/homebrew/Caskroom
==> /usr/bin/sudo /usr/sbin/chown myname /opt/homebrew/Caskroom
==> /usr/bin/sudo /usr/bin/chgrp admin /opt/homebrew/Caskroom
==> /usr/bin/sudo /usr/sbin/chown -R myname:admin /opt/homebrew
==> Downloading and installing Homebrew...
remote: Enumerating objects: 914, done.
remote: Counting objects: 100% (376/376), done.
remote: Compressing objects: 100% (15/15), done.
remote: Total 914 (delta 363), reused 372 (delta 361), pack-reused 538
Receiving objects: 100% (914/914), 446.39 KiB | 2.40 MiB/s, done.
Resolving deltas: 100% (615/615), completed with 159 local objects.
From https://github.com/Homebrew/brew
   4abca3fa1..11cdffb4f  master              -> origin/master
 * [new branch]          setup-homebrew-test -> origin/setup-homebrew-test
 * [new tag]             3.6.13              -> 3.6.13
 * [new tag]             3.6.14              -> 3.6.14
HEAD is now at 11cdffb4f Merge pull request #14235 from Homebrew/dependabot/bundler/Library/Homebrew/json_schemer-0.2.24
Updated 1 tap (homebrew/core).
Warning: /opt/homebrew/bin is not in your PATH.
  Instructions on how to configure your shell for Homebrew
  can be found in the 'Next steps' section below.
==> Installation successful!

==> Homebrew has enabled anonymous aggregate formulae and cask analytics.
Read the analytics documentation (and how to opt-out) here:
  https://docs.brew.sh/Analytics
No analytics data has been sent yet (nor will any be during this install run).
==> Homebrew is run entirely by unpaid volunteers. Please consider donating:
  https://github.com/Homebrew/brew#donations
==> Next steps:
- Run these three commands in your terminal to add Homebrew to your PATH:
    echo '# Set PATH, MANPATH, etc., for Homebrew.' >> /Users/myname/.profile
    echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/myname/.profile
    eval "$(/opt/homebrew/bin/brew shellenv)"
- Run brew help to get started
- Further documentation:
    https://docs.brew.sh

 

$ echo '# Set PATH, MANPATH, etc., for Homebrew.' >> /Users/myname/.profile
$ echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/myname/.profile
$ eval "$(/opt/homebrew/bin/brew shellenv)"
$ brew help
Example usage:
  brew search TEXT|/REGEX/
  brew info [FORMULA|CASK...]
  brew install FORMULA|CASK...
  brew update
  brew upgrade [FORMULA|CASK...]
  brew uninstall FORMULA|CASK...
  brew list [FORMULA|CASK...]

Troubleshooting:
  brew config
  brew doctor
  brew install --verbose --debug FORMULA|CASK

Contributing:
  brew create URL [--no-fetch]
  brew edit [FORMULA|CASK...]

Further help:
  brew commands
  brew help [COMMAND]
  man brew
  https://docs.brew.sh

 

$ brew install telnet
==> Downloading https://ghcr.io/v2/homebrew/core/telnet/manifests/64
######################################################################## 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/telnet/blobs/sha256:cf76f3b47cf35efd4d271adf52227e463298005ec9b1ac586b629d5ad94522cf
==> Downloading from https://pkg-containers.githubusercontent.com/ghcr1/blobs/sha256:cf76f3b47cf35efd4d271adf52227e463298005ec9b1ac586b629d5ad94
######################################################################## 100.0%
==> Pouring telnet--64.arm64_monterey.bottle.tar.gz
🍺  /opt/homebrew/Cellar/telnet/64: 4 files, 175.2KB
==> Running `brew cleanup telnet`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).

Posted by 훅크선장
, |