5. 무선 네트워크 설치의 개요

5.1. 기본적인 과정

이전에 필요한 모든 문서를 얻고, 필요한 모든 파일을 컴파일 했다면 무선 네트워크의 구성에 필요한 가장 기본적인 과정을 이행해야 합니다.

  1. 로우 레벨 커널 구성(Low level kernel config)에서 리눅스 커널이 무선 네트워크 카드를 인식하도록 해주어야 합니다. ( Ioport와 interrupts, dma등과 같은 로우 레벨) : 무선 네트워크 카드가 제대로 설치 구성 되었다는 커널 메시지를 볼 수 있어야 합니다.

  2. Data-link level setting에서 각각의 무선 네트워크 카드에 맞는 특정의 값을 설정해 주어야 합니다. 예를 들면 Proxim Symphony 제품에는 PCMCIA카드 설정을 해주는 "r12cfg"라는 유틸리티가 있습니다. 모든 무선 네트워크 카드를 서로 통신할 수 있게 설정해 주어야 합니다.

  3. IP setting : 바로 ifconfig 와 route capabilities를 사용하여 IP setting을 변경할 수 있습니다.

  4. 좀더 나은 성능을 위한 방법과 충돌을 피하는 법 : 무선 네트워크는 기본적으로 작동하고 있습니다. 덧붙여서 proxy-arp, icmp, echo redirect, bridging, channel change와 같은 작은 설정사항을 조정해야 될 수도 있습니다.

N.B. : 단계1, 2, 3은 표준 ISO/OSI규정을 준수합니다. 단계4에서는 netmask 255.255.255.255에 의해서 발생될 수 있는 문제를 해결할 수 있는 방법이 더해 져야 합니다. 사실상 32bit netmask는 표준 ISO/OSI를 위반하는 것입니다. 이것은 Broadcast를 위해 같은 주소를 사용하는 것이나 존재하지 않는 네트워크 어드레스나 IP machine을 사용하는 것을 네트워크가 강요할 때 발생합니다.

두 번째 단계는 유선 네트워크에서는 필요가 없습니다. 왜냐하면 특별한 설정과정이 필요 없기 때문입니다.

5.2. Low Level Kernel 설정

항상 관리자(administrator)에게는 이것이 문제입니다. 커널이 하드웨어를 볼 수 있게 해 주어야 합니다.

무선 네트워크 카드는 대부분이 PCMCIA 방식이라서 더 복잡합니다. 우선 커널이 PCMCIA 카드를 볼 수 있도록 해 주어야 합니다. 그리고, 알맞은 하드웨어 드라이브를 설치해야 합니다.

그래서, 다음과 같은 방법으로 PCMCIA 카드를 구성할 수 있습니다.

  1. http://www.kernel.org에서 커널 소스를 /usr/src/linux로 인스톨 합니다.

  2. ftp://projects.sourceforge.net/pub/pcmcia-cs에서 /usr/src/pcmcia로 PCMCIA 소스를 인스톨 합니다.

  3. linux 디렉터리(/usr/src/linux)에 있는 README파일을 잘 읽고 커널을 다시 설정하고 다시 컴파일합니다.

  4. PCMCIA 소스를 설정하고 다시 컴파일 합니다. : /usr/src/pcmcia 에 있는 configure와 make 이용하면 됩니다. 드라이버를 확인하고 인스톨 해야 합니다. 다음의 과정이 따를 수 있습니다. "make all" 입력 한 후 "make install" 을 입력해야 됩니다.

  5. 인스톨 후에 유용한 설정파일을 /etc/pcmcia에서 발견할 수 있습니다.

PCMCIA카드가 아닌 경우 :

  1. 리눅스에서 작동하는 드라이버 파일(대부분 아닐 겁니다.)이 있다면, 해당 디렉터리에 인스톨 하고 컴파일합니다.

한번 로드해야 할 모듈이름을 당신은 알고 있습니다. : PCMCIA 설정에서 오직 한번 PCMCIA 데몬을 실행하는 것이 필요합니다. (레드헷 에서는 /etc/rc.d/init.d/pcmcia 입니다.) 옵션을 사용하면 ioport, irq, data-link settings(5.3절을 보시기 바랍니다.)을 할 수 있습니다. 어쨌든 제대로 설치된 드라이버와 하드웨어가 있다면 당신이 유용하게 사용할 수 있는 tool은 다음에 있습니다.

  1. tail /var/log/messages은 syslog에 대해서 설명합니다.

  2. dmesg 에 좀더 많은 정보가 있습니다.

  3. /proc dir: ioports, devices, irq 파일, 드라이버의 특정한 서브 디렉터리

5.3. Data-link level 설정

Data-link level설정이 무엇인가?

유선 네트워크는 서로 연결되는 것만 필요합니다. 그리고 TCP/IP 설정을 해줄 수 있습니다.

반면에 무선 네트워크는 다음과 같은 data-link settings이 필요합니다.

  1. 가지고 있는 무선 네트워크가 어떤 종류인가? (Adhoc 혹은 Infrastructure)

  2. 어떤 채널을 사용해야 하나?

  3. 내가 속해있는 subnet(BSSID)은 무엇인가? 나의 ESS ID는 무엇인가?

  4. 암호화 알고리즘에 의해서 나의 통신은 보호되고 있나? 있다면 암호화 길이는 어떻게 되나?

위에서 본 것과 같이 조정해야 할 많은 셋팅이 있습니다. 이것은 무선 네트워크의 구조에 의해서 생기는 문제입니다. 가까운 거리에 있는 어떤 사람이 당신의 팻킷을 이용할 수 있고, 또한 안테나를 지향 시키는 것과 TCP/IP 셋팅을 하는 것으로 당신의 서비스를 이용할 수 있습니다.

추가로 많은 무선 네트워크 subnet은 서로에게 간섭을 일으킬 수 있습니다.

그래서 다음과 같이 하는 것을 권장합니다.

  1. load-time module에 다음과 같은 옵션을 줍니다. : modprobe ray_cs essid='LINUX' 혹은

  2. run-time driver의 유틸리티를 사용합니다. : rl2cfg eth1 master

5.4. IP 설정

이것은 당신이 직면할 세번째 문제입니다. 이 상황은 당신의 네트워크가 더 큰 네트워크에 포한 될 때 발생합니다.

무선 IP 네트워킹은 당신이 무선 IP 네트워킹에 스트레스를 주지 않는다면 또한 그 문제로 당신이 스트레스를 받지 않는 다는 것을 명심하시기 바랍니다.(필자 주 : 어려운 말이죠. 스트레스 받지 말라는 말입니다.)

5.4.1. 간단한 구성

					 모든 호스트들이 서로를 볼 수 있는 상태
					 
                                 A - - - - - C
                                   \       /
                                 |   \   /   |
                                       /\
                                 |   /    \  |
                                   /       \
                                 B - - - - - D
		

위와 같은 간단한 구성에서는 특별한 것이 요구되지 않습니다.(IP 레벨에서) : 각각의 호스트에 IP 주소를 설정하고 global netmask로 서로를 묶습니다.

5.4.2. 좀 더 복잡한 구성

						A는 직접 B를 볼 수 없는 상태
                                  A <- - - -
                                NO\        |
                              TALK\        C
                                  \        |
                                  B <- - - -

A와 B는 C를 통해서만 통신할 수 있습니다.

네트워크가 Infrastructure모드이고 C가 Access Point 라면 문제가 발생하지 않습니다. Adhoc모드라면 당신은 하나의 호스트를 "master" 능력을 가지는 것으로 셋팅할 수 있습니다. 호스트는 BSS를 생성할 수 있고, 다른 호스트들은 만들어진 BSS에 참가할 수 있습니다.

완전한 연결은 IP 레벨에서 가능합니다 : A 와 B는 같은 C의 인터페이스를 이용하여 C와 통신할 수 있습니다. 그래서 A에서 B로 ping을 시도한다면 C로부터 많은 ICMP REDIRECT 패킷을 받게 될 것입니다. 왜냐하면 C는 A가 이미 request가 오는 네트워크의 목적지라는 것을 알고 있기 때문입니다.

해결 방법 : echo 0 > /proc/sys/net/ipv4/conf/ethx/send_redirects라고 입력 하시기 바랍니다.

A와 C를 무엇으로 netmask를 설정해야 하나? 만약 A를 A와 C를 포함하는 netmask로 설정한다면 작동하지 않을 것입니다. 왜냐하면 A는 gateway C를 사용할 수 없기 때문입니다. 그러나 알 수 없는 목적지 MAC address로의 ARP요청은 만들 수 있습니다.

Proxy ARP를 사용해야 한다고 생각할 수 있습니다. 신호를 요구하는 곳과 신호를 받는 곳이 다른 인터페이스를 사용할 때만 proxy ARP가 작동하는 것 때문에 이러한 효과 없이 proxy arp를 사용할 수 있어야 하는데, 이것은 우리의 경우와는 관계가 없는 것입니다.

그래서 아주 작은 netmask를 해야 합니다.(Win9x의 경우 255.255.255.254, Win NT의 경우 255.255.255.248) 그리고, A와 C가 같은 net address를 사용하지 않는지 확인해야 합니다.

  1. IP(A) = x.y.z.2/31, IP(B) = x.y.z.3/31. 이 경우는 작동하지 않습니다. 왜냐하면 A가 B에게 ARP를 같은 네트워크에서 요구 하기 때문입니다. A와 B가 같은 인터페이스에 속해 있기 때문에 C는 동작하지 않습니다.

  2. IP(A) = x.y.z.1/31, IP(B)= x.y.z.2/31. 이 경우에는 작동합니다. A가 B에 관한 것을 C에게 물어보기 때문입니다.

일반적인 경우 netmask 255.255.255.254 시스템은 오직 마지막 비트를 변경하는 것으로 동작합니다.

높은 레벨의 호환성은 TCP/IP forcing로 가능합니다.

노트 : Access Point를 사용한다면(Infrastructure mode로), redirect 문제는 발생하지 않을 것입니다. 왜냐하면 Access Point가 모든 data-link level의 문제를 해결하기 때문입니다. 그러나 Access Point는 매우 비쌉니다. P133 32MB Ram와 두개의 카드를 사용하는 것이 더 경제적입니다.

5.4.3. 인터넷 연결


                                 A - - - - - C - - Internet
                                   \       /
                                 |   \   /   |
                                       /\
                                 |   /    \  |
                                   /       \
                                 B - - - - - D

여러 가지 상황이 있습니다.

  1. C는 오직 하나의 공용 IP 주소 입니다. 다른 네트워크 카드들은 인터넷 연결을 가능하게 하기 위해서 개인 IP(192.168.x.y와 같은)로 설정할 수 있습니다. A와 B와 D는 C라는 기본 게이트웨이를 가지는 것입니다.

  2. 인터넷에서 사용할 수 있는 공용 netmask를 가질 수 있습니다. 그리고 C는 네트워크에서 기본 게이트웨이가 됩니다. 당신은 오직 A,B,D가 기본게이트웨이로 C를 지정하도록 하면 됩니다.

  3. 인터넷에서 사용할 수 있는 공용 netmask를 가질 수 있습니다. 그리고 C는 기본 게이트웨이가 아닐 수 있습니다. 두 가지 해결 방법이 있습니다. 하나는 기본 게이트웨이가 C로 모든 정보를 보내는 방법이고, 다른 하나는 C에 관한 Proxy ARP를 사용 가능하게 하는 방법입니다. echo 1 > /proc/sys/net/ipv4/conf/ethx/proxy_arp 를 입력하여 기본 게이트웨이를 C로 설정하시면 됩니다. Proxy ARP는 TCP/IP forcing이지만 잘 동작 합니다.

5.4.4. 유선과 무선이 혼합된 네트워크


                                  Internet
                                         \
                                          \        E
                                           \     /
                                            \  /       Wireless
                                 A - - - - - C - - F
                                   \       /   \
                                 |   \   /   |   \
                          Wired        /\          G
                                 |   /    \  |
                                   /       \
                                 B - - - - - D


C에는 두개의 네트워크가 접속되어 있습니다. 오른쪽에는 무선 네트워크 왼쪽에는 유선 네트워크

좀더 많은 인터넷 접속을 가질 수 있습니다. 그러기 위해서는 C에는 세 개의 네트워크 카드가 있어야 합니다.

각 호스트에는 어떻게 IP 주소를 설정해야 할까요? 두 가지 해결 방법이 있습니다.

  1. 네트워크를 두 개의 서브네트워크로 나눕니다. : 예를 들면 192.168.1.0/24와 192.168.2.0/24처럼 말입니다. 이러한 방법은 굉장히 빠른 해결책입니다. 그러나 이러한 방법은 사용하지 않는 IP 주소를 만들게 되므로 모든 IP주소를 사용할 수 없게 됩니다.

  2. 두개의 모든 인터페이스를 위해 C의 porxy APR를 가능하도록 설정합니다. Net address와 netmask와 같은 네트워크 parameters들은 유선이나 무선 네트워크가 동일하게 됩니다. 그러나 Proxy ARP는 유선과 무선 네트워크의 IP 주소를 선택할 수 있게 해 줍니다.

두 번째 방법을 실험해 보겠습니다.

가정 : 공용 subnet이 x.y.z.0/24이라고 가정합니다.

인터페이스는 다음과 같습니다.

  1. ifconfig eth0 x.y.z.C netmask 255.255.255.255 (Wired)

  2. ifconfig eth1 x.y.z.C netmask 255.255.255.255 (Wireless)

  3. ifconfig eth2 x.y.z.C netmask 255.255.255.255 (to Internet)

eth2의 Static routes입니다.

  1. route add IPGW dev eth2

  2. route add default gw IPGW

이 route는 모든 인터넷 주소를 기본 게이트웨이에 요구한다는 것을 의미합니다. 이미 말한 바와 같이 리눅스에게 라우터가 어디에 있고, 기본 요구를 라우터에 해야 한다고 설정해야 합니다.

Eth0의 Static routes입니다.

  1. route add x.y.z.A dev eth0

  2. route add x.y.z.B dev eth0

  3. route add x.y.z.D dev eth0

호스트 A,B,D는 유선 네트워크 입니다.

Eth1의 Static routes입니다.

  1. route add x.y.z.E dev eth1

  2. route add x.y.z.F dev eth1

  3. route add x.y.z.G dev eth1

호스트 E,F,G는 무선 네트워크 입니다.

호환성은 매우 높습니다. 각각의 호스트에 수작업으로 설정을 다시 하실 수 있습니다.