Wireless HOWTO: 無線網路設定

Next Previous Contents

## 5. 無線網路設定

## 5.1 基本步驟

當你具備了所有的條件之後,你需要按照以下步驟進行設定:

- 核心的底層設定,如I/O端口,中斷, DMA ...)完成後,你應當在開機的時候看到這些, 表示無線網卡被Linux正確識別.
- 為無線網卡設定連接層,比如用"rl2cfg"設定Proxim Symphony 無線網卡, 你應當為每個無線網卡設定以讓它們能進行正常通訊.
- 使用 ifconfig 和 route 更改IP設定.
- 找到最佳運行的決竅,解決資源衝突. 這樣你的無線網路以經基本運行起來: proxy-arp, icmp echo redirect, bridging, channel change 這些方面還要做一些細節的設定, 優化網路,防止異常.

N.B.: step 1, 2 and 3 correspond to level 1, 2 和 3 基於 ISO/OSI, while step 4 is an addendum to solve situation generated by netmask 255.255.255.255. 事實上32bit網路遮罩違反了 ISO/OSI 標準,因為網路強制使用相同的地址對不存在的機器和地址進行廣播.

有些人可能反對這種觀點,但是如果你用 ISO/OSI 標準設定無線網路,會失去很多個子網路的設定. 每個子網通常丟棄2個IP號(Network and broadcast),並失去IP分配的靈活性(geographically kind). 你可以在附錄中找到有關的描述. You could notice that step 2 is not present in Wired cards 因為那裡沒有什麼詳細的設定要做.

## 5.2 底層核心設定

管理機器總會有個問題 : 讓核心(or in general)識別你的硬體.

無線網卡更複雜, 因為它們通常是Pcmcia plug, 所以首先得讓你的核心識別你的Pcmcia adapter card , 因此,你可以試著為無線網卡安裝特別的硬體驅動程式.

所以在Pcmcia 設定中你必需:

- 安裝核心源代碼 從 http://www.kernel.org 到/usr/src/linux (see tar and gzip utilities)
- 安裝Pcmcia源代碼 ftp://projects.sourceforge.net/pub/pcmcia-cs 到/usr/src/pcmcia (see tar and gzip utilities)
- 設定並重新編譯核心:read file README in your linux directory (/usr/src/linux)
- 設定並重新編譯 Pcmcia 源代碼: 在 /usr/src/pcmcia 裡使用 configure 和 make. 確定你的驅動程式在那裡 另外你還要按指示安裝它(usually a tar zxvf driver.tgz under pcmcia dir is sufficient). 然後 "make all" 進行編譯最後 "make install".
- 完成之後你可以在/etc/pcmcia裡找到有用的設定程式(文檔).

在非Pcmcia 模式中:

- 如果無線網卡的驅動程式是以Linux源代碼的形式出現(99%不是), 你必需將它安裝到一個目錄當中,編譯它. 還要知道掛哪個模組: 使用pcmcia設定你只要運行pcmcia侍服程式(/etc/rc.d/init.d/pcmcia start for RedHat), 其它的使用"modprobe module_name options".在選項中給出無線硬體的I/O端口,IRQ和 data-link 設定 (see Par 5.3)
- 如果出現資源衝突,可以使用以下工具:
  - "tail /var/log/messages" 列印日誌.
  - 使用"dmesg"得到更多的資訊.
  - /proc dir: ioports, devices, irq files and driver specific sub-directories

## 5.3 數據連接層的設定

那是什麼?

無線網路只需要相互連接,而你只要設定網路參數.

對於無線網路你先要進行連接的設定:

- 它屬於哪一種無線網路(獨立或形組模式)
- 使用哪一個頻道
- 它屬於哪一個子網路(BSSID),它的ESS ID是多少.
- 它的連接有無加密,加密的程度.

正如上面那樣,許多設定需要調整. 因為無線網路的結構:可能在附近的某一個人,只要對準天線,使用和你一樣的協議和一樣的TCP/IP設定就可以看到你傳輸的數據包.

加之, 每個子網路之間可能相互產生衝突,

所以這裡:

- 例如在掛模組的時候這樣: "modprobe ray_cs essid='LINUX'" 或者
- 在運行的時候使用設定工具: "rl2cfg eth1 master".

## 5.4 IP 設定

這是你將要面對的第三個問題.出現當你的網路遂漸擴大的時候.

Remember Wireless IP Networking doesn't stress you if you don't stress it! 如果你不犯它,它就不會犯你.

### 一個簡單的構建:

> `

>     所有的主機之間是相互可見的.

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

> `

這個設定非常簡單,不需要特別的設定(IP層),只要給每個主機分配IP地址,設定網路遮罩相同就可以了.

### 一個較為複雜的網路:

> `

>     A不能直接訪問B

>                                     A <- - - -
>                                   NO\        |
>                                 TALK\        C
>                                     \        |
>                                     B <- - - -

> `

A和B只有通過C才能相互訪問.

如果網路是形組模式,並且C是基點(Access Point),那麼就沒有問題. 在獨立模式(Adhoc mode) 裡你也可以設定一個host做為master (I know the term is not so formal!), 其它主機都加入以master為中心的無線網路當中.

所有的連接達到了IP層: A 和 B 的界面與 C 相同,它們都與C進行通訊, 這樣,如果你試著用A ping B, 你將收到許多來自C的ICMP重定向數據包, 因為C告訴A,它所要求的對象早已經連入網路. 解決方法: type a "echo 0 > /proc/sys/net/ipv4/conf/ethx/send_redirects" ( ethx 是 C 同 A 連接的界面) to null all that.

另一個問題:該給A和C怎麼分配遮罩? 如果你分配一個遮罩包含A和C,它們將不工作,因為A不使用閘道(C) 但又以未知的MAC地址來發送 ARP 請求.

你可能想過ARP代理,但是沒有用.因為代理ARP只在目標與請求的來源使用不同界面的時候對來源進行回應: this is not the case!!

所以你要設定一個不大相同的庶罩 (Win9x let it be 255.255.255.254, WinNT at least 255.255.255.248) 並保證A和C擁有不相同的網路地址.

> `

>     Examples:

>     IP(A) = x.y.z.2/31, IP(B) = x.y.z.3/31.
>     This doesn't work cause A asks for B in its network (ARP request) and C doesn't answer cause,
>      for it, A and B belong to the same interface (so, no proxy arp).
>     IP(A) = x.y.z.1/31, IP(B)= x.y.z.2/31. This works cause A ask to C (send requests to B with C MAC address) for B.

> `

In general with a netmask 255.255.255.254 system works with 2 IP changing only for the final bit.

這都是 TCP/IP 的作用,也是唯一獲得最高靈活性的方法.

注意:如果你使用基點(Access Point)(網路使用形組模式)就不會有重定向的問題, 因為問題都在 data-link level 解決了 (幾乎所有的基點(Access Point)都扮演網橋的角色...). 但是基點(Access Point)很昂貴(在 1000 美元或更多) 既便是使用多個無線網卡加上一台 P133 32MB Ram 來代替基點(Access Point)還是很划得來的.

### Internet 接入

> `

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

> `

它有多種情況:

- C 是唯一的Public IP 地址. 只要在無線網路設定private IP 地址(192.168.x.y for example), 在C上執行 forwarding 和 IP偽裝 . A, B 和 D 將 C 作為缺省的閘道.
- You have a public netmask visible from Internet and C is your default GW to Internet for the network. You only need to enable forwarding on C, setting up default GW on A, B and D to point to C. 你擁有Internet的一部分網段. C 作為無線網路到Internet的默認閘道. 只要在C上執行 forwarding , A, B 和 D 對準 C.
- You have a public netmask visible from Internet and C is not the default GW to Internet. You have 2 possible solutions: Modify your default GW to let it point to C for your network. Symmetrically you have to let C point to default GW to go to Internet. You could, instead, enable proxy arp feature to C (echo 1 > /proc/sys/net/ipv4/conf/ethx/proxy_arp where ethx is the interface towards the default GW) and set your default GW on C to point to the default GW. Proxy arp is a TCP/IP forcing but works well.

### 有線網路與無線網路的混合

> `

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

> `

現在 C 加入了2個網路: 左邊是有線網路 Wire 右邊是無線網路 Wiredless .

加上Internet接入,你總共要在C上裝三個網卡.

應該如何分配IP地址,你有兩個選擇:

> `

>                    1.劃分成兩個子網路:如 192.168.1.0/24 和 192.168.2.0/24.
>                      這種方法很快但如果你使用Internet IP地址就失去了靈活性.
>                      因為你要丟掉很多的IP.

>                    2. Enable Proxy Arp feature to C for all 2 interfaces.
>     無線網路 和 有線網路的 網路參數(net address and netmask) 相同,
>     但是使用 proxy-arp,我可以選擇哪一個IP分配給有線和哪一個分配給無線.

> `

### 現在我們來檢查一下第2個方案:

例子:現在你有一個 Internet public 子網路 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上使用靜態路由

>     route add IPGW dev eth2
>     route add default gw IPGW

> `

這個路由使所有訪問Internet的請求發往閘道:像你注意到的那樣, 第一,告訴Linux路由器在哪裡,然後讓請求發往路由器.

> `

>     在eth0上使用靜態路由
>     Static routes on eth0:
>     route add x.y.z.A dev eth0
>     route add x.y.z.B dev eth0
>     route add x.y.z.D dev eth0

> `

> `

>     在eth0上使用靜態路由
>     Static routes on eth1:
>     route add x.y.z.E dev eth1
>     route add x.y.z.F dev eth1
>     route add x.y.z.G dev eth1

> `

主機E,F 和G 連入無線網路.

注意: 靈活性相當好,但是你要手工設定每一個主機.

Next Previous Contents