2주 전에 scratchbox 기반으로 크로스컴파일환경을 구축한 김에, 유무선공유기 WRT54G에 ss5 프락시 서버 설치본을 만들어보았습니다. 필요하신 분들은 깔아서 사용하시기 바랍니다.

주의사항. WRT54G에 해킹펌웨어를 설치하는 과정은 많은 위험을 동반합니다. 까딱 잘못하면 인터넷 접속이 마비될 수도 있으니, 미리 이웃집 무선랜 등을 확보해두시길 권장합니다.


0) 설치의 목적

여러가지가 있습니다만, 제일 피부에 와닿는건 아무래도 "MSN(혹은 네이트온) 메신저를 막아놓은 장소(대표적으로.. 회사)에서도 메신저를 사용할 수 있다"는 것이겠죠. 이와 더불어, 웹서핑 히스토리를 보안담당자에게 노출시키고싶지 않다거나, 집에 있는 여러대의 서버에 SSH로 접속하는 등 프락시 서버의 역할은 다양합니다.

WRT54G의 경우는 srelay라는 프락시 서버가 이미 컴파일되어 제공되고 있습니다만, 이 프로그램은 nobody로 구동되지 않아서 일단 후보에서 제외하고 ss5를 선정하였습지요.


1) DD-WRT 핵펌 설치

DD-WRT 핵펌에 관해서는 lanis 기사를 비롯해 많은 블로거들께서 정리해주신 적이 있어 자세한 내용은 생략합니다. ('WRT54G DD-WRT'로만 검색해보셔도 많이 나올 듯)

단, ss5를 설치하기 위해서는 WRT54G의 플래쉬메모리 일부를 jffs로 할당받아 여유공간을 확보해야합니다. DD-WRT 위키를 참조하셔서 micro, mini, standard 등 여러가지 버전 가운데 원하는 기능은 모두 제공하면서 용량은 가장 작은 버전을 고르시기 바랍니다. (저는 mini 깔았습니다)


2) JFFS 파일시스템 활성화

사용자 삽입 이미지
위 그림처럼 Administration > Management 들어가셔서,

사용자 삽입 이미지
JFFS2 파일시스템을 활성화시켜준 뒤에 공유기를 한번 리부팅하고 나면 됩니다. JFFS를 활성화하실 때 SSH도 같이 활성화해주시구요. SSH로 접속해보시면 다음과 같이 읽기와 쓰기가 모두 가능한 파일시스템이 /jffs에 마운트되어있음을 보실 수 있습니다.

/ # mount
/dev/root on / type squashfs (ro)
none on /dev type devfs (rw)
proc on /proc type proc (rw)
ramfs on /tmp type ramfs (rw)
/dev/mtdblock/4 on /jffs type jffs2 (rw)


3) ss5 패키지 설치

이제 패키지 설치가 가능한 파일시스템을 확보했으니 ss5를 설치할 차례입니다. 설치는 DD-WRT에 포함된 ipkg 명령어를 이용합니다.


WRT54G에 SSH로 접속하신 뒤에 아래 명령어를 실행하세요. 간혹 wget으로 다운받은 파일이 인식되지 않는 경우가 있으니(이유불명) tar tzvf 명령을 이용해서 다운받은 ipk 파일이 정상적인 .tar.gz 파일인지 확인해두는게 좋을 듯.

~ # cd /jffs

먼저 wget을 이용해 설치파일을 다운로드합니다
/jffs # wget http://hkjinlee.tistory.com/attachment/cfile10.uf@240CEE46586A8BCB19E85B.ipk
Connecting to hkjinlee.tistory.com[211.172.252.15]:80
cfile10.uf@240CEE46586A8BCB19E85B.ipk             100% |************************************|   168 KB 00:00:00 ETA

간혹 wget이 오동작하는 경우가 있더군요. tar명령어를 이용해서 control.tar.gz가 포함되어있는지 확인해봅니다.
/jffs # tar tzvf cfile10.uf@240CEE46586A8BCB19E85B.ipk
-rw-rw-r-- 0/0         4 2008-06-02 14:49:40 ./debian-binary
-rw-rw-r-- 0/0    174653 2008-06-02 14:49:40 ./data.tar.gz
-rw-rw-r-- 0/0       422 2008-06-02 14:49:40 ./control.tar.gz

파일이름을 ss5로 바꿔준 뒤에
/jffs # mv cfile10.uf@240CEE46586A8BCB19E85B.ipk ss5.ipk

ipkg 명령어를 이용해 설치
/jffs # ipkg install ss5.ipk
Unpacking ss5.ipk...Done.
Configuring ss5.ipk...Done.

설치파일 제거
/jffs # rm cfile10.uf@240CEE46586A8BCB19E85B.ipk


4) 설정파일 수정

위 파일만 정상적으로 설치하신 뒤에 공유기를 한번 리부팅해주시면, 그 다음부터는 정상적인 SOCKS5 프락시 서버가 됩니다. 접속포트는 10800이고(기본포트번호는 1080입니다만 바꿨습니다), 계정은 guest, 비밀번호는 change_on_install로 기본지정되어있으니 반드시 수정해주시기 바랍니다. 심각한 보안상의 위협이 될 수 있습니다.


5) 설치파일 설명

이렇게 설치된 ss5는 공유기를 재부팅할때마다 자동으로 실행됩니다. 이건 DD-WRT가 특정 위치에 있는 파일은 '시작프로그램'처럼 항상 실행시키기 때문인데요(DD-WRT 위키 참조), /jffs/etc/config/ 디렉토리 밑에 ss5.startup과 ss5.wanup이라는 파일을 보시면 됩니다.

ss5.startup 스크립트는 공유기가 켜질때마다, 방화벽 설정 직전에 실행됩니다. nobody 계정을 추가한 뒤에 SOCKS 포트번호를 설정하고, ss5를 실행합니다.
#!/bin/sh
echo 'nobody:x:100:0:Nobody:/tmp:/bin/sh' >> /etc/passwd;
export SS5_SOCKS_PORT=10800;
/jffs/sbin/ss5;

ss5.wan 스크립트는 방화벽 설정이 끝난 뒤에 실행됩니다. 10800번 포트에 대해 방화벽을 열어주는 역할을 합니다.
#!/bin/sh
iptables -I INPUT -p tcp --dport 10800 -j ACCEPT 


6) 메신저 설정 변경

자.. 이제 메신저를 공유기에 붙이는 일만 남았는데요, 공유기 IP는 수시로 변경되므로 가급적이면 Dynamic DNS 설정을 하셔서 xxxxx.dyndns.org와 같이 접근할 수 있게 해주시고, 포트번호는 10800, 프락시 종류는 SOCKS5, 아이디와 패스워드는 /jffs/etc/ss5/ss5.passwd 파일에서 설정해주신대로 넣어주시면 메신저가 막혀있는 곳에서도 메신저를 사용하실 수 있게 됩니다.

단, 업무시간을 장황한 채팅으로 소모하는 것은 본인을 위해서도 별로 바람직한 일은 아니므로 꼭 필요한 용도에 맞게 사용하시길 권장드립니다.
신고
  1. 낙근해 2008.12.07 03:05 신고 댓글주소 | 수정 | 삭제 | 댓글

    UDP 포트는 막혀있는거 같은데요.

    사실.. 겜돌려봤는데 ;; udp포트가 막혀서 접속이 안되네요.

    어떻게 처리를 하면 할수있을까요? 답변부탁드립니다.

  2. 낙근해2 2010.04.16 14:43 신고 댓글주소 | 수정 | 삭제 | 댓글

    한번시도해보려고 했으나... 제가 설치한 mini버전에는 wget이 없나봐요 ㅠ_ㅜ

    추가
    -> wget문제는 local dns설정때문이군요.
    결론
    -> jffs기능은 v24버전에는 삭제 되었습니다. 그이후 버전에는 option으로 빠진듯하군요. 고로 older version의 firmware를 사용해서 jffs를 사용해야 하네요.-_-; 글 잘보았습니다. 감사합니다.ㅎㅎ

  3. Favicon of http://www.perueckenshop.com/ BlogIcon Perücke 2011.06.20 18:13 신고 댓글주소 | 수정 | 삭제 | 댓글

    UDP 포트는 막혀있는거 같은데요.

    사실.. 겜돌려봤는데 ;; udp포트가 막혀서 접속이 안되네요.

    어떻게 처리를 하면 할수있을까요? 답변부탁드립니다.

  4. Favicon of http://www.shadmarsh.com BlogIcon www.shadmarsh.com 2014.11.11 13:37 댓글주소 | 수정 | 삭제 | 댓글

    이용약관위배로 관리자 삭제된 댓글입니다.


집에 리눅스 기기가 3대 있습니다. (데스크탑 제외) 리눅스 매니아는 아닌데, 펌웨어 해킹이 가능해서 가격대 성능비가 잘 나오는 장비들을 사모으다 보니, 벌써 이렇게나 많아졌네요.


첫째는 유무선공유기 링크시스 WRT54G입니다. 아는 사람은 핵펌 깔아서 더 상위기종에서나 지원되는 각종 기능을 소프트웨어적으로 지원하는 아주 훌륭한 기계랍니다. 저도 DD-WRT 핵펌을 깔고 Dynamic DNS 업데이트 등의 부가적인 기능을 사용하고 있습니다.

둘째는 네트웤 스토리지 링크시스 NSLU2입니다. 이 기계에 대해서는 작년말의 포스팅에서 다룬바 있기에 설명은 생략합니다. 이 기계 역시 핵펌을 깔면 거의 완벽한 리눅스 서버로 탈바꿈시킬 수 있습니다. 현재 OpenSlug를 깔아서 조금 느린 리눅스 서버로 쓰고 있습니다.

셋째는 최근 블로그에 많이 포스팅했던 노키아 N810입니다. 핵펌같은걸 깔지 않아도 자연스럽게 쓸 수 있는 리눅스 핸드헬드기기죠.

WRT54G와 NSLU2의 경우는 각각 OpenWRTNSLU2-Linux에서 toolchain을 제공하는데, 문제는 제가 임베디드 소프트웨어에는 전혀 경험도 감각도 없기 때문에 이걸 사용해서 뭔가를 만들거나 컴파일하는게 불가능했다는데 있었습니다. 남들이 이미 컴파일해놓은 패키지를 다운로드받아 설치하는 정도가 제가 할 수 있는 한계였지요.

헌데 N810의 경우는 노키아에서 Scratchbox를 이용해 상당히 깔끔한 개발환경을 꾸며놓았더군요. 임베디드에 익숙하지 않는 저도 그닥 어렵지 않게 실행파일을 만들 수 있을 정도로.. 그래서 scratchbox를 이용해서 나머지 장비들용 소프트웨어를 빌드해보기로 마음먹었습니다.

그런데 결정적으로 scratchbox 자체는 간단한데, 이 scratchbox 위에서 돌아가는 크로스컴파일용 툴체인을 build하는게 정말 어렵더군요. 대충 알아보니 Dan Kegel(자꾸 괄약근 운동을 떠올리게 하는.. 구글 직원입니다)이 만든 crosstool을 이용하는 것 같은데, 대충 줏어들은대로 스크립트를 실행하니 각각의 gcc버전과 glibc버전에 해당하는 소스를 받아다가 뭔가 컴파일하긴 하더군요. 그런데 하드디스크 몇 GB는 한방에 그냥 잡아먹어버리는데다가 중간에 알 수 없는 오류와 경고를 마구 토해냈다는...

한 3주 고생하다가 결국 포기해버리고, 뭔가 Scratchbox 위에서 돌아가는 WRT54G와 NSLU2용 툴체인을 누군가가 이미 컴파일해두지 않았을까 하는 생각으로 검색을 하다가... 체코의 한 미러 서버에서 뭔가 심상치않아보이는 파일들을 발견했습니다.

사용자 삽입 이미지

뭔가 돌리면 돌아갈 듯한 분위기가...


N810을 위해 설치했던 /scratchbox 디렉토리에 armv5b(NSLU2용)와 mipsel-uclibc(WRT54G용)를 받아 압축을 풀고 sb-menu를 실행시켜 새로운 타겟을 설정해주었는데, 아주 간단히 크로스컴파일 환경이 구축되더군요. 검색하고 다운로드받으면서 삽질했던걸 생각하니 눈물이 그냥 주룩...

그래도 scratchbox 자체가 그닥 익숙하진 않기에, 한 세시간 정도 삽질한 끝에 WRT54G용 ss5 SOCKS5 프락시서버의 native 실행파일을 생성할 수 있었습니다. 그리고 sigma6님의 블로그를 참조하여 WRT54G를 리부팅할때마다 ss5 대몬이 자동실행되도록 설정 완료!!

아직 프로그래밍은 시작도 못했고 간신히 크로스컴파일환경을 구축한 정도입니다만, 의외로 임베디드 프로그래밍 재미있네요. 꼭 공CD를 굽는 느낌이랄까.. 아무것도 못하는 공기계에 소프트웨어를 이용해서 생명을 불어넣는 것같은 느낌도 들구요.

앞으로 당분간은 주말에 심심할 일 없을 듯합니다.

덧. 알고보니 집에서 쓰는 DivX 플레이어(미디어게이트 MG-35 NDAS)도 리눅스 기반이라네요. 이미 해외에서는 미디어게이트 위키를 중심으로 핵펌들이 만들어지고 있는 상황인 듯.

신고
  1. Leaper 2008.05.21 06:55 신고 댓글주소 | 수정 | 삭제 | 댓글

    주말삽질의 결과가 행복하게 끝났으면 좋겠습니다. 행복하게 끝내시고 .. 포스팅 해주세요 ~~ ^^

  2. Favicon of http://www.noish.org BlogIcon noish 2008.05.22 08:31 신고 댓글주소 | 수정 | 삭제 | 댓글

    미디어게이트 MG-35 NDAS~ 요놈 괜찮아 보이네요 ^^)b
    이런-ㅁ- 좋은 제품있으면~~~ 소개 좀 많이 해주세요~~
    넘 좋아요^_^b

  3. Favicon of http://www.noish.org BlogIcon noish 2008.05.22 12:23 신고 댓글주소 | 수정 | 삭제 | 댓글

    MG-35 NDAS 위키 보니까~ 넘 좋아서 -ㅁ-;;;
    결국 중고 질렀습니다^^;;

    ... N810을 질러야 하는데~
    확~ 지르기가 ㅎㅎㅎ ^^;;

  4. Favicon of http://www.perueckenshop.com/ BlogIcon Perücke 2011.06.20 18:12 신고 댓글주소 | 수정 | 삭제 | 댓글

    MG-35 NDAS 위키 보니까~ 넘 좋아서 -ㅁ-;;;
    결국 중고 질렀습니다^^;;





티스토리 툴바