반응형

Device: Buffalo WZR-600DHP

OS: OpenWRT 14.07 Barrier Breaker

IPTraf version: 3.0.1


OpenWRT에서 iptraf 실행 시, 콘솔 창에 아래와 같이 메세지가 뜨면서 엔터 키를 입력받아야 진입되는 경우가 있다.

Warning: unable to tag this process


IPTraf는 여러 개의 인스턴스 실행을 방지하기 위해서 자체적으로 태그를 사용하는데, 그 태그 파일을 저장할 위치가 없어서 생기는 문제이다아래와 같이 디렉토리를 만들어 주면 해결된다 [1].


# mkdir -p /var/run/iptraf


OpenWRT는 어차피 /var 디렉토리가 /tmp로 잡히기 때문에, /tmp/run/iptraf 폴더가 생성될 것이다.

/tmp/run/ 에 직접 만들어도 상관 없다.



<참고자료>

[1] https://lists.openwrt.org/pipermail/openwrt-tickets/2012-June/046623.html



반응형
블로그 이미지

Bryan_

,
반응형

Tested device: Raspberry Pi 2 (model B)

OpenWrt version: 15.05 (Chaos Calmer)


라즈베리파이에서 이더넷 포트를 외부 인터넷 접속용 wan 인터페이스로 변경해서 연동했더니, LuCI 웹 인터페이스에 접근하지 못할 뿐만 아니라 SSH 접속도 막히게 되었다. 즉, 외부 인터넷에서 SSH(포트 22)와 LuCI(포트 80) 접속이 기본적으로 막혀 있다. 이것은 비단 라즈베리파이 뿐만 아니라 모든 OpenWRT 라우터에 해당된다.

애초에 이더넷 포트를 wan으로 연결하기 전에 LuCI의 System > Administration 페이지에서 "Allow  remote hosts to connect to local SSH forwarded ports" 옵션에 체크를 했지만 기대하던 대로 작동하지 않았다.


이 경우는 /etc/config/firewall 파일을 수정해서 쉽게 해결할 수 있다.


/etc/config/firewall 파일에 아래 내용을 추가해 준다.

# for SSH access

config rule

option src 'wan'

option proto tcp

option dest_port '22'

option target 'ACCEPT'


# for LuCI webpage access

config rule

option src 'wan'

option proto tcp

option dest_port '80'

option target 'ACCEPT'


만약 SSH와 웹 인터페이스의 포트 번호가 다르게 설정되어 있다면 22, 80 대신 해당하는 포트번호를 입력한다.


파일을 저장하고 나서 아래와 같이 firewall을 재시작하고 나면 외부 접속이 가능해진다.

root@OpenWrt:~# /etc/init.d/firewall restart




반응형
블로그 이미지

Bryan_

,
반응형

Target: Raspberry Pi 2, Type B

OS: OpenWRT 15.05 Chaos Calmer


라즈베리파이에 OpenWRT 이미지가 flash된 SD카드를 넣고 맨 처음 부팅을 하면, 네트워크와 관련해서 두 가지 문제점이 있다. 첫번째는 유선랜(Ethernet)이 DHCP client가 작동하지 않아서 랜선을 공유기에 꽂아도 IP주소를 받지 않는 것이고, 두번째는 USB 무선랜 카드(wireless interface card)를 꽂아도 (device driver가 있다는 가정 하에) 인식은 되지만 네트워크 설정이 없는 것이다.


첫번째 유선랜 문제는 OpenWRT 공식 사이트에 있는 라즈베리파이 설명 페이지의 맨 아래쪽 "How to connect via Ethernet"을 참고하면 된다 [1]. 랜선으로 연결이 안되므로 직접 HDMI 케이블과 모니터, USB 키보드를 사용하거나, Serial 케이블 등을 이용해야 한다.


두번째 문제는 /etc/config/wireless 파일이 아예 없어서 어떻게 세팅해야 될 지 모르는 상황에 대한 것이다.

해당 파일이 없으면 심지어 LuCI 웹페이지에서도 "Network > Wifi" 메뉴가 보이지 않아서 설정이 불가능하다.

이와 같이 USB 무선랜카드는 인식이 되지만(dmesg, iw list 등을 실행해 보면 알 수 있다) 설정을 못하겠는 경우에는 아래와 같은 명령으로 wireless 설정 파일을 만들어 주면 된다 [2].


# wifi detect > /etc/config/wireless



<참고자료>

[1] http://wiki.openwrt.org/toh/raspberry_pi_foundation/raspberry_pi#how_to_connect_via_ethernet

[2] https://forum.openwrt.org/viewtopic.php?id=24079



반응형
블로그 이미지

Bryan_

,
반응형

OpenWRT version: 14.07 (Barrier Breaker)

Tested device: Buffalo WZR-600DHP

설치에 사용한 PC: Ubuntu 12.04.1 LTS (64-bit)


이 글에서는 라우터(또는 액세스 포인트, 여기서는 라우터로 표현)에 OpenWRT를 설치하는 여러가지 방법들 중에서 TFTP를 활용한 설치 방법을 설명한다. 라우터가 TFTP 서버를 돌리고 있는 경우에 한해 TFTP를 통해서 펌웨어 파일을 라우터에 전송하고, 라우터는 이렇게 전송받은 펌웨어를 설치하는 방식으로 진행된다. 이 글에서 설치 과정에 사용한 라우터 모델은 Buffalo WZR-600DHP이다.




<설치에 필요한 준비물>


  • OpenWRT 펌웨어(.bin 확장자) 중에서 TFTP 설치용 파일 (파일명에 tftp가 들어가 있음)
    (예: openwrt-ar71xx-generic-wzr-600dhp-squashfs-tftp.bin)
  • 랜선 연결 가능한 리눅스 컴퓨터
  • 라우터(Buffalo WZR-600DHP)


크로스 컴파일 환경에서 직접 빌드해서 펌웨어를 만드는 방법은 이전 포스팅(http://skylit.tistory.com/76)을 참고할 것. 또는 이미 빌드된 펌웨어를 여기(http://wiki.openwrt.org/toh/buffalo/wzr-600dhp)에서 받을 수 있다. 하지만 자신에게 필요한 소프트우어 패키지를 추가하는 등의 customization을 하고 싶다면 크로스 컴파일 환경을 구축해야 한다.


크로스 컴파일 환경에서 빌드(make)를 끝내고 나면 아래 위치에 펌웨어 파일이 생성된다:

[OpenWRT 최상위 디렉토리]/bin/ar71xx/openwrt-ar71xx-generic-wzr-600dhp-squashfs-tftp.bin




<설치 과정>


1. 라우터 전원을 끄고(전원 케이블을 뽑아 둔다), 끈 상태로 랜선을 리눅스 컴퓨터와 라우터의 LAN 포트 4개 중 아무 곳에나 연결한다.


2. 리눅스 컴퓨터에 TFTP가 설치되어 있는지 확인하고, 설치되어 있지 않으면 설치한다.

(Ubuntu 12.04를 기준으로)

$ sudo apt-get install tftp


3. 여전히 라우터를 꺼둔 상태에서 리눅스 컴퓨터에서 커맨드 라인 쉘을 열고 아래와 같이 입력한다. 

(Ubuntu 12.04를 기준으로 작성)

  $ cd [OpenWRT 최상위 디렉토리]/bin/ar71xx

        ↑ tftp에서는 디렉토리 변경불가. bin 파일이 있는 위치에 미리 가 있어야 한다


  $ sudo ifconfig eth0 192.168.11.2

        ↑ 600DHP 라우터는 복구 모드에서 이 IP주소를 갖는 클라이언트만 허용


  $ sudo arp -s 192.168.11.1 02aabbccdd20

        ↑ 라우터가 복구 모드일 때 클라이언트에서 이 IP주소/MAC주소로 연결 가능


  $ tftp 192.168.11.1

  >



4. 위와 같이 하고 나면 TFTP가 실행이 된다. 아래와 같이 펌웨어 전송에 필요한 명령을 입력한다.

  > binary

  > verbose

  > trace

  > rexmt 1       <-- 전송 실패 시 1초마다 재시도

  > timeout 60    <-- 60초 동안 전송을 시도함

  > put openwrt-ar71xx-generic-wzr-600dhp-squashfs-tftp.bin


5. 마지막의 "put" 명령을 치고 나면 전송을 시도하는 메세지가 1초마다 1개씩 올라오는데, 이 때 얼른 라우터 전원을 켠다. 60초 내로 연결이 성공해야 하므로 미리 랜선을 연결해둔 상태에서 전원 케이블만 바로 꽂을 수 있도록 준비해 두면 좋다.

WZR-600DHP 라우터는 맨 처음 전원이 켜졌을 때 정상적으로 부팅되기 전에 복구 모드에 잠시 들르는데, 이 때 위의 tftp 설정을 통해서 펌웨어가 라우터에 전달된다.

sent DATA <block=1, 512 bytes>

received ACK <block=1>

sent DATA <block=2, 512 bytes>

received ACK <block=2>

...

Sent XXXXXXX bytes in XX seconds

>


위와 같이 데이터가 전송이 되었다는 메세지가 뜨고 전송이 끝이 나면 이제 라우터가 펌웨어를 자동으로 설치할 것이다. 이제 TFTP의 역할은 끝났으므로 quit 를 입력하고 종료한다.

빨간색 LED가 깜빡거리면서 펌웨어를 재설치하는 과정이 몇 분(체감상 5분 가량) 지속된다. 빨간색 LED가 꺼지고 전원 LED만 켜진 상태가 되면 설치가 완료된 것이다.




<설치 후 준비>


OpenWRT를 설치(flashing)하고 나면 SSH 접속이 가능하도록 비밀번호를 설정할 필요가 있다.

랜선을 뽑았다가 다시 연결하고 (제대로 IP 주소를 받기 위해), 콘솔 창에 아래와 같이 입력한다.

$ telnet 192.168.1.1


그러면 바로 OpenWRT 라우터에 연결될 것이다. 이제 비밀번호를 설정한다.

# passwd


비밀번호 설정이 완료되면 telnet을 종료하고 잠시 기다렸다가(2~3초), 이제 SSH로 로그인을 시도해 본다.

$ ssh root@192.168.1.1


비밀번호를 물어볼 때, 방금 설정한 비밀번호를 입력해서 똑같이 로그인이 된다면 정상적으로 설정된 것이다.

여기까지 하고 나면 이제 원하는 대로 OpenWRT를 활용하면 된다.




<참고자료>

* TFTP를 이용한 OpenWRT 설치 방법(공식 페이지): http://wiki.openwrt.org/doc/howto/generic.flashing.tftp

* OpenWRT - Buffalo WZR-600DHP 관련 페이지: http://wiki.openwrt.org/toh/buffalo/wzr-600dhp




반응형
블로그 이미지

Bryan_

,
반응형

OpenWRT version: 14.07 (Barrier Breaker)

Tested device: Buffalo WZR-600DHP

외부 머신: Ubuntu 12.04 (64-bit)


*목적: 인터넷에 접속할 수 있는 OpenWRT 라우터에서 특정 리눅스 머신에 SSH 또는 SCP를 사용할 때, 비밀번호 입력 절차 없이 자동으로 인증되도록 하고 싶다.


일반적으로 리눅스에서 쓰는 잘 알려진 방법을 활용하면 (openssh를 쓴다는 가정 하에):

1. OpenWRT 기기에서 ssh-keygen 도구를 이용하여 RSA key를 생성하고,

2. OpenWRT에는 private key 파일을 보관하고,

3. 접속할 원격 머신에는 public key 파일을 $HOME/.ssh/authorized_keys 파일에 추가한다.

(참고: OpenTutorials에 있는 egoing님의 글: SSH Key - 비밀번호 없이 로그인)


그런데 위와 같이 하고 아래와 같이 RSA key를 이용한 로그인을 시도하면 에러가 뜬다.

root@OpenWrt:~# ssh -i /root/.ssh/id_rsa [원격 머신 계정 아이디]@[원격 머신 주소]

ssh: Exited: String too long

root@OpenWrt:~# 


이 경우 일반적인 ssh-keygen 대신 dropbearkey를 활용해야 한다.

(참고: https://forum.openwrt.org/viewtopic.php?id=14148)


root@OpenWrt:~# dropbearkey -t rsa -f /root/.ssh/id_rsa

Generating key, this may take a while...

Public key portion is:

ssh-rsa AAAAB3NzaC1yc2EAAADAQAB...(중략) root@OpenWrt

Fingerprint: md5 7e:aa:9b:...(생략)


위의 화면에서 "ssh-rsa ..."로 시작하는 내용은 public key이므로 복사해서 따로 파일로 저장해 두자. (예: id_rsa.pub) dropbearkey에서는 ssh-keygen과는 달리 화면상에 출력만 하고 별도로 .pub 파일로 저장하지 않는다. 그리고 이 내용을 원격 머신의 $HOME/.ssh/authorized_keys 파일에 추가해야 한다.


참고로 dropbearkey를 생성하기 전에 이미 같은 위치에 id_rsa 파일이 있으면 덮어쓰기가 안되므로, 새로 만들 파일 이름을 다르게 하거나, 기존의 id_rsa 파일을 지우도록 하자. (어차피 OpenWRT 기기에서 쓸 수 없으니까 지워도 무방함. 정 필요하면 나중에 ssh-keygen으로 다시 만들면 된다.)


이제 dropbearkey로 새로 만든 private key를 사용해서 비밀번호 입력 없이 SSH, SCP에 접속할 수 있다.


root@OpenWrt:~# scp -i /root/.ssh/id_rsa [보낼 파일] [원격 머신 계정 아이디]@[원격 머신 주소]:[파일 받을 경로]



반응형
블로그 이미지

Bryan_

,