::: 강좌/소스/문서 :::

강좌/소스/문서 성격에 맞지 않는 광고,비방,질문의 글은 즉시 삭제하며
내용을 복사하여 사용할 경우 반드시 이곳(http://www.howto.pe.kr)을 출처로 명시하여 주세요


Category

  김영대(2004-06-16 11:22:19, Hit : 14908, Vote : 1774
 http://www.howto.pe.kr
 [강좌] 유무선 공유기 제작: PCMCIA, HostAP, Bridge 설치 [2]

// 제  목: 유무선 공유기 제작: PCMCIA, HostAP, Bridge 설치 [2]
// 작성자: 김영대( http://www.howto.pe.kr )

이 문서에서는 오픈 소스 프로젝트로 진행중인 HostAP 를 이용하여 IEEE802.11b AP를 만들어 본다.
유선 환경에서의 허브(Hub) 장비와 비슷하게 무선 랜 카드를 장작한 단말기 사이의 통신을 연결해주는
장비를 액세스 포인트(AP, AccessPoint)라고 한다. 무선 랜 카드가 장착된 컴퓨터들만으로도 P2P
와 같이 직접 무선 통신이 가능하지만(이러한 구조를 ad-hoc network 라고 한다) 여기서는 AP 를
기반으로 하는 infrastructure mode 로 구축하고자 한다.

Wireless LAN 에서의 service의 구현을 위해 host에서 동작되는 wireless LAN 서비스는 구축시 계층적인
구조로 이루어져 있다. 최하위 물리계층 PCMCIA CARD 를 시작으로 Socket Service, Card Service, Driver
Service, Card Driver 그리고 이를 사용하는 Application 으로 이루어졌다.
이중 PCMCIA 카드의 각종 동작에 필요한 API를 제공하는 드라이버로 드라이버 로드 시 처음으로 등록되는
Card Service 는 pcmcia-cs 를 사용할것이고 실제 PCMCIA Card Driver는 HostAP 를 사용할것이다.

참고 사이트:
  - http://trekweb.com/~jasonb/articles/hostap_20021012.shtml
  - http://www.sown.org.uk/index.php/HostAPWalkthru
  - http://pachome2.pacific.net.sg/~yanghwee/sub/How-To-wirelessAP.html

설치할 파일 다운:
  - pcmcia-cs source (pcmcia-cs-3.1.28.tar.gz)
      http://pcmcia-cs.sourceforge.net
  - HostAP source (hostap-2002-10-12.tar.gz)
      http://hostap.epitest.fi/releases
  - wireless-tools source (wireless_tools.23.tar.gz)
      http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html#latest
  - bridge-utils source (bridge-utils-0.9.6.tar.gz)
      http://bridge.sourceforge.net


1.pcmcia-cs 설치
  pcmcia-cs 는 무선 랜 카드 와 소켓 인터페이스의 사이의 적절한 서비스 수행을 위한 드라이버 소스 및
  실행 유틸리티를 담고 있다.
  Linux 에서 제공하는 PCMCIA 형태는 두가지이다. 첫 번째는 커널버전 2.4. 이상에서 사용할 수 있는
  커널 PCMCIA 이고 두 번째는 PCMCIA 카드 서비스 형태다. 즉 커널 PCMCIA 는 커널 내부에 존재하는
  드라이버이며, PCMCIA 카드 서비스는 모듈 형식으로 커널과 상호 인터페이스하는 방식으로 구현되어 있다.
  커널 2.4 이상이라면 두 가지를 선택해서 사용할 수 있지만 2.4 이전에서는 커널 PCMCIA 를 지원하지 않기
  때문에 사용할 수 없다. 본 실습에서는 커널 PCMCIA 를 사용하지 않고 카드 서비스 방식으로 구현하여
  insmod 수행을 통해 직접 모듈을 올려서 사용하겠다.

  먼저 PCMCIA 를 위한 커널을 설정해야 한다..
  커널 소스가 있는 디릭토리(Linux 의 경우는 보통 /usr/src/linux) 로 이동하여 make menuconfig 한다.
    [root@cozylinux /]# cd /home/LDS/LDS2000/kernel-2.4.18
    [root@cozylinux /]# make menuconfig

  설정의 메인 메뉴에서 "General Setup" 서브 메뉴 항목으로 이동하여 "Support hot-pluggable devices"
  항목을 설정한 후 "PCMCIA/CardBus support" 항목을 선택하여 주도록 한다. 이곳에는 자신의 타겟보드에
  맞는 프로세서 목록이 나타나면 그것을 설정하면 된다. 이것은 보통 타겟 보드 제조회사마다 커널소스
  패치를 통해서 제공될것이다. 여기서는 LDS2000 타겟 보드를 사용하므로 "PXA250/210 support"를 선택했다.
  그리고 여기서는 PCMCIA 카드 서비스를 모듈로 직접 올릴 것이므로 "Network device support" 항목의
  "PCMCIA network device support"를 해제한다.

  나중에 이런 설정이 유효한지는 타겟 장비의 부팅 과정중 다음과 같은 메시지에서 확인할 수 있다.
    Linux Kernel Card Services 3.1.22
      options:  none
     Intel PXA250/210 PCMCIA (CS release 3.1.22)
     LDS2000 Xscale PCMCIA Initialize

  pcmcia-cs 의 압축을 푼 후 해당 디렉토리로 이동하여 config.in 파일을 수정한다.
  "LINUX" 에는 커널 소스가 있는 디렉토리를, "PREFIX" 는 호스트 장비에서 타켓 장비로 NFS 를 통하여
  전달해줄 디렉토리(타겟 장비의 NFS Root 디렉토리)의 root 를 말하며 실제 설치하게 되면 /sbin 아래에
  cardmgr, ifport, ifuser 등과 같은 PCMCIA 관련 유틸리티들이 몇개 설치된다. "MODDIR" 은 타겟 장비의
  root 아래에 있는 모듈 디렉토리로 이곳에는 pcmcia-cs 에서 직접 설치하는 파일은 없지만 나중에
  HostAP 같은 PCMCIA Card Driver 를 설치한 후 HostAP 에서 설치한 hostap_cs.o 모듈을 pcmcia-ca
  에서 설치한 CARD Manager 인 cardmgr 이 로드하기 위해 필요한것이다.
  "UCC","KCC","LD" 는 크로스 컴파일러 실행 파일명을 적는다. "ARCH" 는 하드웨어 아키텍처로 PXA250 는
  ARM 계열 이므로 arm 이라고 적었다.
    LINUX=/home/LDS/LDS2000/kernel-2.4.18
    PREFIX=/home/LDS/LDS2000/External/RootFS/image
    MODDIR=/lib/modules/2.4.18-rmk7-pxa3
    UCC=arm-linux-gcc
    KCC=arm-linux-gcc
    LD=arm-linux-ld
    PCDEBUG=
    KFLAGS=
    UFLAGS=
    ARCH=arm
    UNSAFE_TOOLS=n
    CONFIG_CARDBUS=n
    CONFIG_PNP=n
    USE_PM=y
    CONF_SRC=1

  위의 파일 정보를 설정하였다면, "make config” 명령의 수행을 통해 PCMCIA 의 인터페이스 설정 및 컴파일
  수행에 필요한 설정 정보를 맞추어 Makefile을 생성하도록 한다. 화면에서 물어보는 내용들은 이미 config.in
  에 등록했으므로 default 값 그대로 설정하도록 하며, 다만 커널 소스의 위치가 정확한지를 체크 하여 올바른
  디렉토리 정보를 입력하여 주도록 한다. 또한 이 명령어를 통해 생성되는 config.mk 파일을 열러 PREFIX 항목이
  올바른지 보고 틀리다면 config.in 의 해당 항목과 같에 수정한다.
  마지막으로 “make all” 명령 수행을 통해 컴파일을 수행하도록 하며, “make install” 명령 수행을 통해
  설치하도록 한다.

  설치가 완료된 후 PREFIX 항목에 명시한 디렉토리의 sbin 디렉토리에는 다음과 같은 파일이 생성될것이다.
    cardctl  cardmgr  dump_cis  ftl_check  ftl_format  ide_info  ifport  ifuser  pack_cis  pcinitrd

  그리고 한가지 주의할것은 나중에 cardmgr 을 실행할때 modprobe 를 실행할 수 없다는 메시지가 날 수
  있는데 이것은 타겟 장비로 임베디드 개발 툴킷을 쓸경우 busybox 를 많이 쓰는데 여기에 modprobe 를
  추가하지 않아서 /sbin 아래에 modprobe 가 busybox 로 링크되지 않아서 그렇다.
  이떄는 busybox 소스 드렉토리로 이동하여 Config.h 파일에서 "#define BB_MODPROBE" 을 찾아 주석을 제거
  하고 다시 컴파일하여 설치한다.
  참고로 busybox 의 Makefile 은 아래와 같다.
    CROSS =arm-linux-
    CC = $(CROSS)gcc -I/usr/local/LDS-ARM-Linux/arm-linux/include
    AR = $(CROSS)ar  
    STRIP = $(CROSS)strip
    PREFIX = /home/LDS/LDS2000/External/RootFS/image
  
2.HostAP 설치
  HostAP는 Intersil(보통 Prism2/2.5/3) 기반의 PCMCIA 무선 카드를 이용하여 AccessPoint로 동작시키기
  위한 리눅스용 PCMCIA Card Driver 이다. Intersil 칩을 위한 또 다른 프로젝트인 linux-wlan-ng 도 있지만
  이것을 사용하려면 Intersil 칩을 위한 특별한 펌웨어가 필요하다. 이 펌웨어는 Intersil 과 라이센스
  계약이 필요하기 때문에 보통 HostAP를 많이 사용한다.

  다운받은 HostAP 의 압축을 푼 후 디렉토리로 이동하여 Makefile 을 수정한다.
    [root@cozylinux temp]# tar xvfz hostap-2002-10-12.tar.gz
    [root@cozylinux temp]# cd hostap-2002-10-12
    [root@cozylinux hostap-2002-10-12]# vi Makefile

  "KERNEL_PATH" 에는 커널 소스가 있는 디렉토리를, "PCMCIA_PATH"는 pcmcia-cs 압축을 푼 디렉토리를
  "PREFIX" 는 호스트 장비에서 타켓 장비로 NFS 를 통하여 전달해줄 디렉토리(타겟 장비의 NFS Root
  디렉토리)의 root 를 의미하며 "CC"는 크로스 컴파일러 실행 파일명을 그리고 중간쯤에 hostap_cs.conf
  파일을 복사하는 스크립트 문장이 있는데 이 부부에 오류가 있으므로 아래와 같이 변경한다.
    KERNEL_PATH=/home/LDS/LDS2000/kernel-2.4.18
    PCMCIA_PATH=/home/LDS/LDS2000/External/Wireless/pcmcia-cs-3.1.28
    PREFIX=/home/LDS/LDS2000/External/RootFS/image
    CC=arm-linux-gcc
    ....
    @if [ ! -r $(PREFIX)/etc/pcmcia/hostap_cs.conf ]; then \
        echo "Installing /etc/pcmcia/hostap_cs.conf"; \
        cp driver/etc/hostap_cs.conf $(PREFIX)/etc/pcmcia/hostap_cs.conf; \
    fi

  그리고 디렉토리를 보면 pcmcia-cs-patches, kernel-patches 두개의 디렉토리가 보일것이다. 두 디렉토리
  안에 README 파일이 있으니 해당 사항이 있다면 패치를 적용해 준다. 특히 kernel-patches 를 적용해
  주어야만 커널 설정 메뉴에서 "Host AP driver for Prism2/2.5/3 PC Cards" 메뉴를 볼 수 있다.

  HostAP를 컴파일하고 설치 한다
    [root@cozylinux hostap-2002-10-12]# make clean
    [root@cozylinux hostap-2002-10-12]# make pccard
    [root@cozylinux hostap-2002-10-12]# make install_pccard

  HostAP 컴파일시 .config 파일이 없다는 에러나 modversions.h 파일이 없다고 하면 먼저 리눅스 커널을
  컴파일 하여야 한다.

  Makefile 내의 MODPATH 변수에 지정된 디렉토리에 보면 net, pcmcia 두개의 디렉토리가 있을것이다.
  pcmcia 디렉토리 내에는 hostap_cs.o 모듈이 있는데 이것이 PCMCIA 용 카드 드라이버이며 만약 PCI 로
  설치했다면 hostap_pci.o 가 보일것이다.

  HostAP 와 관련된 설정이나 내용은 타겟 장비의 /etc/pcmcia 밑에 위치하고 있으며, hostap_cs.conf 과
  network.opts 파일을 수정 해주면 된다.
  예를들어 hostap_cs.conf 의 맨 아래에 같이 적는다면,
    # Optional configuration parameters for hostap_cs.o
    module "hostap_cs" opts "channel=3 iw_mode=3 essid=ssap ignore_cis_vcc=0"

  channel 은 AP가 사용할 주파수 대역을 설정하는 것이며(대부분1~13번까지 있다) iw_mode는 infrastructure
  mode 로 설정하는 것이고 essid는 BSSID 의 그룹을 만들어 사용하는 확장SSID 이다.
  또한 무선 랜카드가 사용할 가상 IP를 설정하는 파일은 network.opts 파일이다.
  하지만 본 강좌에서는 위 두개의 파일을 사용하지 않을것이다. 그 대신 다음에 설치할 wireless tool 에서
  제공하는 몇가지 명령어를 이용하여 위 두개의 환경파일을 대신하는 방법을 설명할것이다.
  그러니 위 두개의 파일은 수정하지 말고 저런 파일이 있었다는 정도로 넘어간다.

3.wireless-tools 설치
  wireless-tools 은 유선 LAN 환경에서 네트워크의 인터페이스를 설정하기 위해 사용되는 ifconfig과 비슷
  하게 wireless LAN 환경에서 네트워크 인터페이스 설정에 유효한 유틸리티들을 담고 있다.

  다운받은 소스의 압축을 푼 후 디렉토리로 이동하여 Makefile 을 수정한다.
  "PREFIX" 는 원래 Makefile 에 없는 항목인데 편리를 위해 넣은것으로 호스트 장비에서 타켓 장비로 NFS 를
  통하여 전달해줄 디렉토리(타겟 장비의 NFS Root 디렉토리)의 root 를 의미한다.
    [root@cozylinux temp]# tar xvfz wireless_tools.23.tar.gz
    [root@cozylinux temp]# cd wireless_tools.23
    [root@cozylinux wireless_tools.23]# vi Makefile
    PREFIX=/home/LDS/LDS2000/External/RootFS/image
    INSTALL_DIR= $(PREFIX)/usr/local/sbin/
    INSTALL_LIB= $(PREFIX)/usr/local/lib/
    INSTALL_INC= $(PREFIX)/usr/local/include/
    INSTALL_MAN= $(PREFIX)/usr/local/man
    CC = arm-linux-gcc

  아래와 같이 컴파일을 하고 설치를 한다.
    [root@cozylinux wireless_tools.23]# make clean
    [root@cozylinux wireless_tools.23]# make
    [root@cozylinux wireless_tools.23]# make install

  설치를 하면 위의 INSTALL_DIR 디렉토리 아래에 다음과 같은 명령어가 생성된다.
    iwconfig  iwlist  iwpriv  iwspy  iwgetid

  이전 HostAP 설치시 hostap_cs.conf, network.opts 파일을 수정하지 않았는데 그 이유는 지금 생성된
  iwconfig, iwpriv 명령어로 직접 해당 환경값을 줄 수 있기 때문이며 이렇게 하는것이 PCMCIA 를 사용하지
  않는 예를들어 PCI 랜카드를 사용하는 사용자들도 이 명령어들을 이용하여 동일한 방법으로 환경을 설정할
  수 있기 때문이다.

4.bridge-utils 설치
  Bridge 유틸은 다양한 이더넷 인터페이스들을 연결하여 하나의 커다란 network 구성을 위해 사용되며,
  여기서는 Wireless LAN의 network과 wired LAN network의 접목으로 통합 network 환경을 구성한다.
  AccessPoint 의 역할이 무선랜카드에서 들어온 패킷을 유선랜카드로 보내는 역할을 하므로 이를 AP에서는
  보통 bridge 로 구현한다. 그리고 bridge 에 IP를 부여하고 NAT와 방화벽을 구성하여 완성되는것이다.

  먼저 커널을 다시 컴파일 해야 한다. 무선 랜 과 유선 네트워크 환경 사이의 브릿지 기능을 위해
  "802.1d Ethernet Bridging"항목을 설정하여 주도록 한다. 그 설정은 커널 설정 메인 메뉴에서
  "Networking options"의 서브 메뉴 항목에서 체크 하고 있다. 커널을 컴파일 한 후 다음을 진행한다.

  다운받은 소스의 압축을 푼 후 디렉토리로 이동하여 configure 를 다음과 같이 설정하여 Makefile 을 만든다.
  옵션 인자로 커널 소스의 include 위치, 이 유틸리티들이 설치될 위치(호스트 장비에서 타켓 장비로 NFS 를
  통하여 전달해줄 디렉토리 타겟 장비의 NFS Root 디렉토리)와 크로스 컴파일러에 대한 정보 등이다.
    [root@cozylinux temp]# tar xvfz bridge-utils-0.9.6.tar.gz
    [root@cozylinux temp]# cd bridge-utils
    [root@cozylinux bridge-utils]# ./configure --with-linux=/home/LDS/LDS2000/kernel-2.4.18/include \
    --prefix=/home/LDS/LDS2000/External/RootFS/image --host=arm-8xx -build=i686 CC=arm-linux-gcc

  아래와 같이 컴파일을 하고 설치를 한다.
    [root@cozylinux bridge-utils]# make clean
    [root@cozylinux bridge-utils]# make
    [root@cozylinux bridge-utils]# make install

  설치를 하면 타겟 장비의 /sbin 디렉토리 아래에 다음과 같은 명령어가 생성된다.
    brctl  brctld

5.실행 및 동작 확인
  이제 커널을 다시 컴파일한다. 아래에서 "make dep" 는 매번 수행할 필요가 없다. make 는 ELF 형식의 커널
  이미지를 생성하므로 메모리에 제약이 있는 타겟 보드에 올리기 위해 압축된 ELF 를 위해 "make zImage"
  로 컴파일 한다. 만든 커널 이미지를 올리는(flash) 방법은 타겟 보드마다 틀리므로 설명은 생략한다.
    [root@cozylinux /]# cd /home/LDS/LDS2000/kernel-2.4.18
    [root@cozylinux kernel-2.4.18]# make dep
    [root@cozylinux kernel-2.4.18]# make clean
    [root@cozylinux kernel-2.4.18]# make zImage

  지금까지 설치한 파일들이나 환경 설정을 타겟 장비 부팅시 마다 실행하도록 하기 위해 rc.???? 계열을
  파일에 등록해 놓으면 편할것이다. 그래서 본인의 경우는 rc.sysinit 에 아래와 같이 차례대로 등록하여
  부팅시 자동 실행되도록 하였다.

    #### [1] HostAP Card Driver ####
    insmod /lib/modules/2.4.18-rmk7-pxa3/net/hostap_crypt.o
    insmod /lib/modules/2.4.18-rmk7-pxa3/net/hostap_crypt_wep.o
    insmod /lib/modules/2.4.18-rmk7-pxa3/net/hostap.o

    #### [2] Activate NIC ####
    /sbin/ifconfig eth0 211.204.72.60 netmask 255.255.255.0 up
    route add default gw 211.204.72.254
    route add -host 255.255.255.255 dev eth0

    /sbin/ifconfig eth1 0.0.0.0 promisc up
    /sbin/cardmgr -ov
    /sbin/ifconfig wlan0 down
    /sbin/ifconfig wlan0 0.0.0.0 promisc up

    #### [3] bridge utils ####
    /sbin/brctl addbr br0        # add virtual ethernet bridge interface
    /sbin/brctl stp br0 off      # spanning tree protocol off: a loop is highly improbable
    /sbin/brctl addif br0 eth1   # now, physical ethernet interface become a logical bridge port
    /sbin/brctl addif br0 wlan0
    /sbin/ifconfig br0 192.168.0.1 netmask 255.255.255.0 up
    route add -host 255.255.255.255 dev br0

    #### [4] Access Point ####
    /usr/local/sbin/iwconfig wlan0 mode master
    /usr/local/sbin/iwconfig wlan0 essid ssap
    /usr/local/sbin/iwconfig wlan0 nickname "cozykyd's AP (ssap)"
    #/usr/local/sbin/iwconfig wlan0 key s:12345
    #/usr/local/sbin/iwconfig wlan0 key s:1234567891234

    /usr/local/sbin/iwpriv wlan0 prism2_param 3 1
    /usr/local/sbin/iwpriv wlan0 prism2_param 8 2
    /usr/local/sbin/iwpriv wlan0 prism2_param 9 100
    /usr/local/sbin/iwpriv wlan0 prism2_param 10 1
    #/usr/local/sbin/iwpriv wlan0 prism2_param 30 1   # Operation not supported

  각각을 설명하면,

  먼저 "[1] HostAP Card Driver" 부분은 말 그대로 HostAP 를 설치하여 생성된 카드 드라이버를 모듈로
  등록하는 것이다. 총 3개이다.
  아래는 실행시 출력되는 메시지이다.
    Using /lib/modules/2.4.18-rmk7-pxa3/net/hostap_crypt.o
    Using /lib/modules/2.4.18-rmk7-pxa3/net/hostap_crypt_wep.o
    Using /lib/modules/2.4.18-rmk7-pxa3/net/hostap.o

  "[2] Activate NIC" 부분은 네트워크 카드 즉 NIC 의 환경을 설정하는 부분이다.
  본인이 사용하는 타겟 보드에는 CS8900A Ethernet 카드 2장 있다. 그래서 각각은 eth0 와 eth1 이다.
  이 2개의 유선 NIC 는 동일한 허브에서 나온 랜선을 꼽아 인터넷이 가능하게 했다.
  혹시 유선 랜카드가 2장인데 eth1 이 잡히지 않는다면(이유는 보통 커널은 하나의 ethernet 카드만을
  부팅시 검색하며 만약 찾게되면 더이상의 검색은 하지 않는다. 그러므로 커널에게 수동으로 알려주어야
  한다) 커널 환경설정의 "Network device support" 으로 들어가 "Ethernet (10 or 100Mbit)" 부분에 보면
  "Ethernet1 support","Ethernet2 support" 와 같은 체크 옵션이 있다면 둘 다 체크하여 커널을 컴파일 한다.
  본 강좌에서는 호스트 장비와 타겟 장비를 NFS 로 연결하여 사용하는데 이때 eth0 를 사용한다. 그러므로
  eth0 는 신경쓸 필요 없고 eth1 과 wlan0 를 설정하는 부분을 주의깊게 보기 바란다.
  eth1 과 wlan0 는 둘 다 promiscous mode 로 설정하여 자신에게 오는 MAC 프래임 뿐만 아니라 모든
  MAC 프래임을 받을 수 있도록 했다. 그리고 마찬가지로 둘 다 네트워크 환경에서 투명한 장치인 브릿지의
  포트로 사용될것이므로 IP 가 필요없어 "0.0.0.0" IP를 주어 IP 를 제거했다
  아래는 실행시 출력되는 메시지이다.
    device eth1 entered promiscuous mode
    device wlan0 entered promiscuous mode

  중간에 cardmgr 실행 부분이 있는데 이것은 card manager 프로그램의 수행을 통해 무선 랜 카드 드라이버와
  소켓 드라이버간의 카드 서비스 수행을 통해 무선 랜 인터페이스를 생성하고 이에 대한 초기화 작업을 수행
  하는 것으로 이것을 통하여 hostap_cs.o Card Service 구현 모듈이 메모리로 올라오는 것이다.
  아래는 실행시 출력되는 메시지이다.
    cardmgr[26]: starting, version is 3.1.22
    cardmgr[26]: watching 2 sockets
    cardmgr[26]: initializing socket 0
    cardmgr[26]: socket 0: Senao SL-2011CD/SL-2011CDPLUS
    cardmgr[26]:   product info: "MMC_Technology", "WAVECAST_MW2000PCM_B", "Version 01.02", ""
    cardmgr[26]:   manfid: 0x0156, 0x0002  function: 6 (network)
    cardmgr[26]: executing: 'modprobe hostap_cs'
    cardmgr[26]: modprobe exited with status 1
    cardmgr[26]: executing: 'insmod /lib/modules/2.4.18-rmk7-pxa3/pcmcia/hostap_cs.o'
    hostap_cs: hostap_cs.c 0.0.0 2002-10-12 (SSH Communications Security Corp, Jouni Malinen)
    hostap_cs: (c) Jouni Malinen <jkmaline@cc.hut.fi>
    cardmgr[26]: + Using /lib/modules/2.4.18-rmk7-pxa3/pcmcia/hostap_cs.o
    hostap_cs: index 0x01: Vcc 3.3, Vpp 3.3, irq 28, io 0xf6000000-0xf600003f
    hostap_cs: Registered netdevice wlan0
    hostap_cs: Registered netdevice wlan0ap for AP management
    wlan0: NIC: id=0x800c v1.0.0
    wlan0: PRI: id=0x15 v1.1.0
    wlan0: STA: id=0x1f v1.4.9
    cardmgr[26]: executing: './network start wlan0'
    cardmgr[26]: + Sample private network setup
    cardmgr[26]: exiting

  가장 중요한 "bridge utils" 부분이다.
  이전에 "802.1d Ethernet Bridging" 커널 설정과 bridge-utils 설치를 했을것이다.
  지금 하고자 하는것은 wireless LAN (wlan0)과 wired LAN (eth1) 과의 통합(bridge)으로 외부의 인터넷
  망으로 패킷을 전달하는 것이다. 이를 위해서는 AP로 동작하는 스테이션의 wireless LAN 인터페이스 (wlan0)
  와 wired LAN 인터페이스(eth1)를 bridge 시켜 하나의 통합된 인터페이스(br0)를 생성하도록 한다.
  이를 위해 brctl이란 bridge-utils 을 사용하는 것이다.
  원래 브릿지라는 것은 2계층 장비로서 충돌 지역을 분리 하기 위해 하나의 segment 를 분할하거나 반대로
  같은 subnetwork 을 하나로 통합할때도 사용하는 것으로 네트워크 환경에서 투명한 장치로 동작하므로 IP 할당을
  하지 않으나 나중에 bridge에 SSH 나 SNMP 들을 이용하여 관리를 해야 하므로 여기서는 IP 를 할당해 주었다.
  IP는 반드시 줄 필요는 없다. 왜냐하면 bridge 는 wlan0 에서 받은 프래임을 eth1 으로 바로 전달하고 그 반대
  동작도 하여 단순히 프래임을 양방향으로 전달하는 역할이기 때문이다.
  아래는 실행시 출력되는 메시지이다.
    br0: port 2(wlan0) entering listening state
    br0: port 1(eth1) entering listening state
    br0: port 1(eth1) entering learning state
    br0: port 2(wlan0) entering forwarding state
    br0: topology change detected, propagating

  마지막으로 "[4] Access Point" 부분이다.
  wireless-tools 설치시 hostap_cs.conf, network.opts 파일을 수정하지 않고 iwconfig, iwpriv 명령어로 직접
  해당 환경값을 줄 수 있다고 했는데 바로 이 부분이다.
  위에서 부터 차례대로 설명하면 "mode master" 는 이 wlan0 랜카드는 AP 로 동작한다는 의미이다.
  만약 리눅스에 AP 로 동작하는 무선랜이 아닌 단지 클라이언트로서 무선랜을 윈한다면 여기에 "mode managed"
  를 적어주면 된다. 확장 SSID는 "ssap" 로 설정하는 것이고 이 AP 의 네트워크 별칭은 "cozykyd's AP (ssap)"
  로 하는것이다. 바로 아래 두 줄은 주석으로 처리해놨는데 이것은 무선 랜 보안의 기본 요소인 WEP(Wired
  Equivalent Privacy) 키를 설정하는 방법을 보여주기 위해 적어놓은 것이다.

  아래 단락의 "iwpriv" 명령어들은 무선랜 디바이스 드라이버의 파라미터를 변경하는 부분들로 차례대로
  beacon 간격(3), beacon 정책 설정(8), STA 리스트 제거 시점(9), 브릿지 패킷 정책(10) 을 말하며
  마지막것은 향상된 패킷 정책(30) 인데 이것은 나온지 얼마 안된 파라미터라 본인의 랜카드에서는 설정이
  안되는 파라미터였다.

  실제 환경이 설정된 화면을 적절한 명령어를 사용하여 보여줄것이니 각각의 명령어 사용법은 각자 메뉴얼을
  숙지하여 익히기 바란다.

    [root@cozyLDS etc]$ifconfig
    br0    Link encap:Ethernet  HWaddr 00:0A:D4:00:31:2C
           inet addr:192.168.0.1  Bcast:192.168.0.255  Mask:255.255.255.0
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
           RX packets:8974 errors:0 dropped:0 overruns:0 frame:0
           TX packets:375 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:0
           RX bytes:1145540 (1.0 Mb)  TX bytes:33983 (33.1 kb)

    eth0   Link encap:Ethernet  HWaddr 00:50:DA:D0:33:CD
           inet addr:211.204.72.60  Bcast:211.204.72.255  Mask:255.255.255.0
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
           RX packets:45713 errors:3 dropped:3 overruns:0 frame:0
           TX packets:13553 errors:0 dropped:0 overruns:0 carrier:0
           collisions:318 txqueuelen:100
           RX bytes:8316848 (7.9 Mb)  TX bytes:1989440 (1.8 Mb)
           Base address:0x300

    eth1   Link encap:Ethernet  HWaddr 00:0A:D4:00:31:2C
           UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1
           RX packets:8977 errors:0 dropped:0 overruns:0 frame:0
           TX packets:373 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:100
           RX bytes:1271464 (1.2 Mb)  TX bytes:33899 (33.1 kb)
           Interrupt:35 Base address:0x300

    wlan0  Link encap:Ethernet  HWaddr 00:30:0D:1A:FA:72
           UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1
           RX packets:0 errors:0 dropped:0 overruns:0 frame:0
           TX packets:147 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:100
           RX bytes:0 (0.0 b)  TX bytes:23904 (23.3 kb)
           Interrupt:28

    [root@cozyLDS etc]$iwconfig wlan0
    wlan0  IEEE 802.11-b  ESSID:"ssap"  Nickname:"cozykyd's AP (ssap)"
           Mode:Master  Frequency:2.422GHz  Access Point: 00:30:0D:1A:FA:72
           Bit Rate:11Mb/s   Tx-Power:-15 dBm   Sensitivity=1/3
           Retry min limit:8   RTS thr:off   Fragment thr:off
           Encryption key:off
           Power Management:off
           Link Quality:0  Signal level:0  Noise level:0
           Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
           Tx excessive retries:257  Invalid misc:101027   Missed beacon:0

    [root@cozyLDS etc]$brctl show
    bridge name     bridge id               STP enabled     interfaces
    br0             8000.000ad400312c       no              eth1
                                                            wlan0
    [root@cozyLDS etc]$brctl showmacs br0
    port no mac addr                is local?       ageing timer
      1     00:0a:d4:00:31:2c       yes                0.00
      2     00:30:0d:1a:fa:72       yes                0.00
      1     00:50:da:d0:33:cd       no                15.72

    [root@cozyLDS etc]$iwlist wlan0 channel
    wlan0     14 channels in total; available frequencies :
              Channel 01 : 2.412 GHz
              Channel 02 : 2.417 GHz
              Channel 03 : 2.422 GHz
              Channel 04 : 2.427 GHz
              Channel 05 : 2.432 GHz
              Channel 06 : 2.437 GHz
              Channel 07 : 2.442 GHz
              Channel 08 : 2.447 GHz
              Channel 09 : 2.452 GHz
              Channel 10 : 2.457 GHz
              Channel 11 : 2.462 GHz
              Channel 12 : 2.467 GHz
              Channel 13 : 2.472 GHz

    [root@cozyLDS etc]$iwlist wlan0 rate
    wlan0     4 available bit-rates :
              1 Mb/s
              2 Mb/s
              5.5 Mb/s
              11 Mb/s

    [root@cozyLDS etc]$iwlist wlan0 key
    wlan0     2 key sizes : 40, 104bits
              4 keys available :
                    [1]: off
                    [2]: off
                    [3]: off
                    [4]: off
              Current Transmit Key: [0]

  아래는 proc 파일을 통하여 현재 wlan0 의 상태를 알 수 있다.
    [root@cozyLDS net]$cat /proc/net/wireless
    Inter-| sta-|   Quality        |   Discarded packets               | Missed
     face | tus | link level noise |  nwid  crypt   frag  retry   misc | beacon
     wlan0: 0000    0     0     0        0      0      0    257 104039        0

  아래는 현재 AP 에 접속(association)한 사용자의 MAC 주소 하나가 보이는 화면이다.
    [root@cozyLDS wlan0]$ls -la /proc/net/hostap/wlan0/
    dr-xr-xr-x    2 root     root            0 .
    dr-xr-xr-x    3 root     root            0 ..
    -r--r--r--    1 root     root            0 00:e0:63:50:9a:9e
    -r--r--r--    1 root     root            0 ap_debug
    -r--r--r--    1 root     root            0 debug
    -r--r--r--    1 root     root            0 pda
    -r--r--r--    1 root     root            0 registers
    -r--r--r--    1 root     root            0 scan_results
    -r--r--r--    1 root     root            0 stats
    -r--r--r--    1 root     root            0 wds

  아래와 같이 하여 접속한 사용자의 자세한 현재 무선 네트워크 상태를 알 수 있다.
    [root@cozyLDS wlan0]$cat /proc/net/hostap/wlan0/00\:e0\:63\:50\:9a\:9e
    STA=00:e0:63:50:9a:9e
    users=0
    aid=1
    flags=0x0027 AUTH ASSOC PS AUTHORIZED
    capability=0x01
    listen_interval=0
    supported_rates=
    jiffies=742201
    last_auth=0
    last_assoc=0
    last_rx=742192
    last_tx=719499
    rx_packets=1032
    tx_packets=5
    rx_bytes=6359
    tx_bytes=1260
    buffer_count=0
    last_rx: silence=13 signal=63 rate=20 flow=0
    tx_rate=110
    tx[1M]=0
    tx[2M]=0
    tx[5.5M]=0
    tx[11M]=9
    rx[1M]=0
    rx[2M]=996
    rx[5.5M]=5
    rx[11M]=38
    txexc=0

  모든 설정을 마쳤다.
  기억해야 할것은 지금까지 AccessPoint 를 설치한 것이지 유무선 공유기를 설치한것은 아니라는 점이다.
  일단 제작된 AP 를 테스트하기 위하여 무선 랜카드가 꼽힌 일반 PC 를 준비하여 현재 제작한 AP 가 접속
  가능한 AP 로 잡히는지 확인하고(가장 쉬운 방법은 SSID "ssap" 가 보이는지 확인하면 된다) 만약 보인
  다면 접속을 한다. 이때 주의할것은 아직 DHCP 를 가동하지 않으므로 일반 PC 의 무선 랜카드의 IP 설정은
  정적 환경(IP,Gateway,DNS 를 수동으로 지정)으로 설정해야 한다.
  주의할것은 현재 제작한 AP는 WEP 을 사용하지 않으므로 일반 PC의 무선랜 환경설정에 WEP 을 설정하지
  말아야 한다. 보안이 염려되면 양쪽 모두 설정한 후 테스트 해보기 바란다.





4   [임베디드] [강좌] 유무선 공유기 제작: 802.1x, RADIUS 설치 [4]  김영대 2004/06/16 16528 2081
3   [임베디드] [강좌] 유무선 공유기 제작: NAT, firewall, DHCP 설치 [3]  김영대 2004/06/16 11583 2807
  [임베디드] [강좌] 유무선 공유기 제작: PCMCIA, HostAP, Bridge 설치 [2]  김영대 2004/06/16 14908 1774
1   [임베디드] [강좌] 유무선 공유기 제작: 제작 환경 [1]  김영대 2004/06/16 11162 1513

1
 

Copyright 1999-2017 Zeroboard / skin by zero