서론

아수스의 공유기가 유명하다는 사실은 알 사람들은 다 아는 사실이다. 그 중에서도 TM-AC1900 모델은 AC68U라는 정가 20만원 정도의 공유기를 미국의 티모바일에서 번들로 제공한 모델인데, 해당 제품이 워낙 싸게 풀려서 가성비 모델로 잘 알려져 있다. 필자도 해당 모델 제품을 2대 가지고 있으며 안테나 업그레이드까지 진행한 상태이다. 2대를 구매한 이유가 AiMesh를 이용한 집안에서 끊김없는 네트워크 구성이었기에 AC68U로 펌웨어 변경이 필요한 상태였다. 이전에 몇번 시도했지만 몇 차례 실패하여 점점 흥미를 잃어갔다가... 군대가 합격이 나자 갑자기 하기도 싫던 이것이 하고 싶어졌다.

뭔 변덕인가 싶을 수도 있는데 왜 그런 경험 다들 있지 않은가. 시험 전날 뭘 해도 재밌는 거 말이다.. 지금 필자의 상태가 딱 그러하다.

이번에 맥에서 공유기 펌웨어 변경 과정을 좀 정리해 보았다. 여러 블로그를 둘러보았는데 한 번에 이해하고 진행하기에는 무리가 있었고, 그래서 절차를 체계적으로 정리하고 싶어 포스팅하게 되었다.

본론

우선 해당 링크에서 파일을 다운로드한다.

.
├── TM-AC1900_3.0.0.4_376_1703.trx
├── config
├── firmware
│   ├── FW_RT_AC68U_30043763626.trx
│   └── RT-AC68U_3.0.0.4_376.47_0.trx
└── mtd-write
  • TM-AC1900_3.0.0.4_376_1703.trx: 1703 버전으로 다운그레이드하기 위한 펌웨어
  • config: ssh 접속 에러 시 사용
  • firmware/: AC68U 펌웨어
  • mtd-write: CFE 초기화시 사용

1703버전으로 다운그레이드

필자가 가지고 있던 두 제품 다 AC1900 펌웨어의 3.0.0.4.376_3199 버전이었다. 해당 버전은 ssh가 활성화할 수 없으므로 바로 AC68U 펌웨어로 변경할 수 없다. 따라서 우선 3.0.0.4.376_1703 버전으로 다운그레이드를 진행해야 한다.

  1. 네트워크 설정

    라우터와 이더넷 연결하여 진행하므로 맥북 제품의 경우 usb 젠더 등을 통해서 연결해야 한다. 네트워크 설정에서 이더넷 설정을 아래와 같이 맞춰준다.

    • ip: 192.168.29.88
    • 서브넷마스크: 255.255.255.0
    • 라우터: 192.168.29.1

    라우터의 LAN 1번 포트와 연결하는 것을 추천한다.

  2. 리커버리 모드 설정
    공유기가 전원이 꺼진 상태에서 초기화(reset) 버튼을 누르면서 30초 대기

    초기화 버튼을 누른 상태로 유지해야 한다. 절대로 중간에 때면 진입이 안될 수 있다.

  3. 공유기 설정 사이트 접속
    사파리에서 192.168.29.1로 이동
    정상적으로 접속되었다면 아래와 같은 화면을 볼 수 있을 것이다.

  4. 펌웨어 업로드
    TM-AC1900_3.0.0.4_376_1703.trx 파일을 선택하여 업로드한다.

  5. nvram 초기화
    펌웨어가 정상적으로 업로드되면 success 화면이 뜨고 공유기가 켜진다. 공유기가 완전히 켜졌다면, 전원을 끄고 10초 정도 대기한 후, wps 버튼을 누르면서 전원을 키고 20초 정도 기다린다.

    공유기가 완전 켜졌음은 무선랜 인디케이터에 불이 들어오는지를 확인하면 된다.

  6. enable SSH 활성화
    공유기 설정에서 [관리]-[시스템]로 들어가면 해당 항목을 로 바꾸어 준면 된다.

CFE 초기화

  1. ssh로 CFE 파일 다운로드

    아래 코드에 적어둔 대로 진행하면 되나, Unable to negotiate with 192.168.29.1 port 22: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1와 같은 에러가 발생할 수 있다. 이러한 경우에는 ~/.ssh 폴더에 config 파일을 옮겨주면 해결된다.

    $ ssh admin@192.168.29.1
    admin@192.168.29.1's password:
    
    ASUSWRT RT-AC68U_3.0.0.4 Wed Jul 16 08:39:37 UTC 2014
    admin@(none):/tmp/home/root# cat /dev/mtd0 > original_cfe.bin
    admin@(none):/tmp/home/root# ll
    -rw-rw-rw-    1 admin    root        524288 Dec 31 16:11 original_cfe.bin
    admin@(none):/tmp/home/root# exit
    Connection to 192.168.29.1 closed.
    
    $ scp admin@192.168.29.1:/tmp/home/root/original_cfe.bin ~/Desktop
    admin@192.168.29.1's password:
    original_cfe.bin                              100%  512KB   5.5MB/s   00:00
  2. CFE 파일 수정
    원래는 hex 코드 수정하는 과정이 필요하나 해당 사이트를 이용하면 쉽게 이용가능하다.
    해당 사이트에서 1.0.2.0으로 진행하고 AiMesh가 필요한 경우 해당 항목으로 선택한다. 컨트리max 체크박스를 선택하면 공유기 출력과 속도가 상승되니 해당 옵션도 상황에 맞게 설정하면 되겠다.

    위 작업이 끝나면 수정된 CFE 파일이 생기는데, 이후 AiMesh를 이용하기 위해서 다시 사용될 수 있으므로 따로 보관하는 것이 좋다. 또한 해당 파일은 공유기마다 부여되는 맥주소에 따라 다른 파일이므로 다른 공유기의 CFE를 사용해서는 안된다.

  3. 수정한 CFE 적용

    수정한 CFE 파일과 mtd-write 파일을 공유기에 업로드하여 수정사항을 적용한다.

    필자는 파일 이름을 rt-ac68u_1.0.2.0_us.bin라 가정하고 명령어를 적었다. 혹시 다른 파일명이라면 그에 맞게 수정하여 적용하면 된다.

    $ scp ~/Desktop/rt-ac68u_1.0.2.0_us.bin admin@192.168.29.1:/tmp/home/root/
    admin@192.168.29.1's password:
    rt-ac68u_1.0.2.0_us.bin                       100%  226KB   3.5MB/s   00:00
    
    $ scp ~/Desktop/mtd-write admin@192.168.29.1:/tmp/home/root/
    admin@192.168.29.1's password:
    mtd-write                                     100%  716KB   3.3MB/s   00:00
    
    $ ssh admin@192.168.29.1
    admin@192.168.29.1's password:
    
    ASUSWRT RT-AC68U_3.0.0.4 Wed Jul 16 08:39:37 UTC 2014
    admin@(none):/tmp/home/root# chmod u+x mtd-write
    admin@(none):/tmp/home/root# ./mtd-write -i rt-ac68u_1.0.2.0_us.bin -d boot
    admin@(none):/tmp/home/root# reboot
    admin@(none):/tmp/home/root# Connection to 192.168.29.1 closed by remote host.
    Connection to 192.168.29.1 closed.
  4. nvram 초기화 진행
    3번 과정에서 공유기가 완전히 켜진 것(무선랜 인디케이터까지 불이 들어온 상태)을 확인하고 진행한다. 전원을 끄고 10초 정도 대기한 후, wps 버튼을 누르면서 전원을 키고 20초 정도 기다린다. 정상적으로 변경사항이 적용되었다면 공유기 정보가 AC68U로 바뀐 것을 확인할 수 있다.

파티션 확장

공유기 정보가 정상적으로 변경은 되었으나 다른 펌웨어로 바로 변경은 불가능하다. 이를 해결하기 위한 파티션 확장 방법은 아래와 같다.

  1. 리커버리 모드 진입
    전원을 끈 상태에서 초기화 버튼을 누르면서 30초 대기

  2. 펌웨어 업로드
    이제 본인 공유기를 정펌으로 할지, 멀린펌(커스텀펌)으로 할지 결정해야 한다. 이것에 따라서 올리게 되는 펌웨어가 달라진다. 다운그레이드했을 때와 동일한 방법으로 펌웨어를 업로드하면 된다.

    • 정펌: FW_RT_AC68U_30043763626.trx
    • 멀린: RT-AC68U_3.0.0.4_376.47_0.trx

    참고로 필자는 aimesh 기능을 활성화하기 위해서 정펌을 선택하였다.

  3. 재부팅 후 적용 확인
    펌웨어가 정상적으로 업로드 되었는지 확인한다.

롤백 방지 명령어

펌웨어를 업로드하는 과정에서 롤백될 가능성이 있으므로 꼭 잊지말고 해당 명령어를 실행해주는 것을 권장한다.

$ cat /dev/mtd5 > /jffs/mtd5_backup.bin
$ mkdir /tmp/asus_jffs
$ mount -t jffs2 /dev/mtdblock5 /tmp/asus_jffs
$ rm -rf /tmp/asus_jffs/*
$ sync && umount /tmp/asus_jffs
$ rm -rf /jffs/.sys/RT-AC68U
$ nvram unset fw_check && nvram commit && reboot

ssh로 접속하여 명령어를 실행하면 된다.

nvram을 초기화하여 ssh 접속이 안된다면 해당 항목을 다시 활성화하여 시도한다.
nvram을 초기화하여 RSA 키가 인증되지 않는다는 에러가 뜬다면 로컬에 저장된 키를 초기화해주면 된다. 해당 명령어는 ssh-keygen -R 192.168.29.1이다.

최신 펌웨어 올리기

이제 남은 일은 최신 펌웨어로 올리는 것이다. 관리 - 시스템 - 펌웨어 업그레이드에서 진행한다.

  • 정펌은 자동 업데이트로 진행된다.
  • 멀린펌은 직접 다운받은 파일로 진행한다.

최신 멀린펌은 해당 링크에서 받으면 된다.

AiMesh 사용하기

해당 방법을 이 포스팅에서 소개하기엔 너무 길어질 것 같아 별도의 포스팅으로 작성하였다. 해당 글을 참고하기 바란다.

마치며

AC1900을 AC68U로 변경하는 과정은 사실 순탄치 않았다. 작년에 윈도우로 시도했을 때는 연결이 안정하지 않아 실패하였다. 이번에는 맥으로 시도해보았는데 확실히 윈도우보다는 쾌적하게 진행되었다. 하지만 과정이 복잡하기 때문에 여러 블로그를 참고하여 시도하였다. 이번에 진행하는 도중에 실패한 적은 없었는데 AiMesh 기능이 멀린펌에서 안되는지 모르고 멀린펌으로 올렸다가 정펌으로 내리기 위한 삽질이 조금 있었다.. 역시 사전 준비는 중요하고, 급하게 하는게 꼭 빠른 길이 아니라는 것을 새삼 느꼈다.

그리고 최근에 정보보호병을 지원하면서 얕게나마 공부한 네트워크 개념들이 실제로 라우터를 구성하면서 많은 도움이 되었다. (역시 세상에 도움안되는 공부는 없다...) 작년에 도전했을때 실패했었는데 이렇게 네트워크 구성을 성공하고 나니, 그새 성장했구나?하는 괜한 뿌듯함도 들었다. 나라의 부름이 있은 뒤 처음한 일로 나름 만족한다. 앞으로 남은 시간동안에 이렇게 군대가서 할 수 없는 일들을 다하고 가고 싶다.

참고한 문서