下一页 上一页 目录

5. 无线网络设置概述。

5.1 基本步骤

一旦您拥有了所需的材料并编译了所有需要的,您就应该执行无线配置中的基本步骤

  1. 底层内核配置 让 Linux 内核识别您的无线网卡(在底层,例如 ioport、中断、dma...):您必须看到某种内核消息,告知您无线网卡已被正确找到并配置。
  2. 数据链路层设置 对于每种特定的无线网卡,都有一个实用程序可以设置典型的无线数据链路层值。例如,在 Proxim Symphony 中,该实用程序称为“rl2cfg”,而在 pcmcia 卡中,设置位于 pcmcia 配置文件中。您必须协同设置所有无线网卡,以使它们能够相互通信。
  3. IP 设置 现在您应该能够使用 ifconfig 和 route 功能来更改 IP 设置。
  4. 提高性能和避免冲突的技巧。现在您的无线网络基本上可以工作了:此外,您还必须调整一些特定设置,例如代理 ARP、ICMP 重定向、桥接、信道更改等等,以优化您的网络并避免奇怪且消耗带宽的冲突

注意:步骤 1、2 和 3 分别对应于标准 ISO/OSI 的第 1、2 和 3 层,而步骤 4 是解决由子网掩码 255.255.255.255 产生的情况的附录。事实上,32 位子网掩码违反了标准 ISO/OSI,因为网络被迫对广播和 IP 机器使用相同的地址,并且网络地址不存在。

有人可能会批评这种观点,但是如果您使用标准 ISO/OSI 来配置无线网络,那么您将在配置子网上损失很多。对于每个子网,通常您会丢弃 2 个 IP 号(网络和广播),并且您无法在 IP 分配上实现灵活性(地理位置类型)。您可以在附录 A 中找到更多相关信息。

您可能会注意到,有线网卡中没有步骤 2,因为那里没有特别的设置要做。

5.2 底层内核配置

对于 PC 管理员来说,让内核(或通常)识别您的硬件始终是一个问题。

无线网卡更加复杂,因为它们中的许多通常都有 Pcmcia 插头,因此首先您必须让内核识别 Pcmcia 适配器卡,然后您可以尝试为您的无线网卡安装特定的硬件驱动程序。

So, in Pcmcia config you have to: 

  1. 安装 linux 内核源代码,从 https://linuxkernel.org.cn 到 /usr/src/linux(参见 tar 和 gzip 实用程序)
  2. 安装 linux pcmcia 源代码,从 ftp://projects.sourceforge.net/pub/pcmcia-cs 安装到 /usr/src/pcmcia(参见 tar 和 gzip 实用程序)
  3. 配置并重新编译您的内核:阅读 linux 目录 (/usr/src/linux) 中的 README 文件
  4. 配置并重新编译您的 pcmcia 源代码:在 /usr/src/pcmcia 下使用 configure 和 make。确保您的驱动程序在这里,否则您必须按照驱动程序说明安装它(通常在 pcmcia 目录下使用 tar zxvf driver.tgz 就足够了)。之后键入“make all”进行编译。最后键入“make install”。
  5. 在键入 install 后,您将在 /etc/pcmcia 下找到一些有用的配置文件。

In non pcmcia case: 

  1. 如果您的驱动程序存在于 linux 源代码中(99% 的情况不是这样),您必须将其安装在目录中,然后进行编译。

一旦您知道模块名称,您就必须加载它:在 pcmcia 配置中,您只需要启动 pcmcia 守护程序(RedHat 为 /etc/rc.d/init.d/pcmcia start),对于其他情况,使用“modprobe module_name options”。使用选项,您将为无线驱动程序提供 ioport、irq 和数据链路设置(参见第 5.3 段)。无论如何,您用来了解硬件是否已被驱动程序正确识别的有用工具是

  1. “tail /var/log/messages”,它解释了有关 syslog 的信息
  2. “dmesg” 以获取更多信息。
  3. /proc 目录:ioports、devices、irq 文件和驱动程序特定的子目录。

5.3 数据链路层设置

What is that? 

有线网络只需要相互连接,然后您就可以设置 TCP/IP 参数。

相反,无线网络需要数据链路设置,例如

  1. 我属于哪种类型的无线网络?(Adhoc 或 Infrastructure)
  2. 我必须使用哪个频道?
  3. 我属于哪个子网 (BSSID),我的 ESS ID 是什么?
  4. 我的通信是否受到某种加密算法的保护?密钥长度?

如您所见,您必须调整许多设置,原因是无线网络的架构:可能有人在附近的距离,可以看到您的数据包,只需将他的天线指向正确的方向并设置正确的 TCP/IP 参数即可使用您的服务。

此外,可能存在许多无线子网,它们之间可能会相互干扰。

所以这里是

  1. 加载时模块的选项:“modprobe ray_cs essid='LINUX'”,例如,或者
  2. 运行时驱动程序的实用程序:“rl2cfg eth1 master”。

5.4 IP 设置

这是您必须面对的第三个问题。只有当您的网络开始发展壮大时,情况才会变得复杂。

Remember Wireless IP Networking doesn't stress you if you don't stress it! 

一个简单的配置

                       All the hosts view each other
 
                               A - - - - - C
                                 \       /
                               |   \   /   |
                                     /\
                               |   /    \  |
                                 /       \
                               B - - - - - D

像这样的配置非常简单,不需要任何特殊的东西(在 IP 级别):您只需要为每台主机分配一个 IP 地址,并分配一个一致的全局子网掩码。

一个更复杂的配置

                       A doesn't see B directly
 
                                A <- - - -
                              NO\        |
                            TALK\        C
                                \        |
                                B <- - - -
 

在这里,A 和 B 只能通过 C 进行通信。

如果网络处于基础设施模式,并且 C 是接入点,则一切正常。在 Adhoc 模式下,您还可以将主机设计为具有“主控”能力(我知道这个术语不是很正式!),一个创建 BSS 的主机,任何其他主机都可以加入该 BSS。

现在在 IP 级别实现了完全连接:A 和 B 使用相同的 C 接口与 C 通信,因此如果您尝试从 A ping 到 B,您将收到来自 C 的许多 ICMP REDIRECT 数据包,因为 C 正在告诉 A 目的地已经在发出请求的网络中。

解决方案:键入“echo 0 > /proc/sys/net/ipv4/conf/ethx/send_redirects”(其中 ethx 是 C 上朝向 A 和 C 的接口)以消除所有这些。

另一个问题:我为 A 和 C 分配什么子网掩码?如果您为 A 分配包含 A 和 C 的子网掩码,则没有任何效果,因为 A 不使用网关 (C),而是使用未知的目标 MAC 地址发出 ARP 请求。

您可能会考虑使用代理 ARP,但没有效果,因为代理 ARP 仅在目标与源位于不同的接口时才回复源:情况并非如此!!

因此,您必须设置一个非常小的子网掩码(Win9x 允许为 255.255.255.254,WinNT 至少为 255.255.255.248),并且您必须确保主机 A 和 C 没有相同的网络地址。

Examples: 

  1. IP(A) = x.y.z.2/31, IP(B) = x.y.z.3/31。这不起作用,因为 A 在其网络中请求 B(ARP 请求),而 C 不会应答,因为对于 C 而言,A 和 B 属于同一个接口(因此,没有代理 ARP)。
  2. IP(A) = x.y.z.1/31, IP(B)= x.y.z.2/31。这起作用,因为 A 向 C 请求 B(使用 C MAC 地址向 B 发送请求)。

一般来说,使用子网掩码 255.255.255.254,系统可以使用 2 个 IP,仅更改最后一位。

所有这些都是 TCP/IP 强制,但却是获得高灵活性性的唯一方法。

注意:如果您使用接入点(基础设施模式下的网络),则不会遇到重定向问题,因为所有问题都在数据链路层得到解决(几乎每个接入点都充当网桥...)。但是接入点价格昂贵(约 1000 美元或更多),而使用 P133 32MB 内存进行转发更经济,即使使用 2 个或更多网卡也是如此。

互联网访问

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

存在多种情况

  1. C 是唯一的公共 IP 地址。您只需要为无线网络启用专用 IP 地址(例如 192.168.x.y),并在 C 上启用转发和伪装。A、B 和 D 将以 C 作为默认网关。
  2. 您有一个从互联网可见的公共子网掩码,C 是您的网络连接到互联网的默认网关。您只需要在 C 上启用转发,并在 A、B 和 D 上设置指向 C 的默认网关。
  3. 您有一个从互联网可见的公共子网掩码,而 C 不是连接到互联网的默认网关。您有两种可能的解决方案:修改您的默认网关,使其指向您网络的 C。对称地,您必须让 C 指向默认网关以连接到互联网。您可以改为在 C 上启用代理 ARP 功能(echo 1 > /proc/sys/net/ipv4/conf/ethx/proxy_arp,其中 ethx 是朝向默认网关的接口),并将 C 上的默认网关设置为指向默认网关。代理 ARP 是一种 TCP/IP 强制方法,但效果很好。

混合网络:有线和无线

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

现在 C 加入了 2 个网络:右侧是无线网络,左侧是有线网络。

您还可以访问互联网,因此 C 中总共有 3 个网卡。

我为主机分配什么 IP 地址?您有两种可能的解决方案

  1. 将网络划分为 2 个子网:例如 192.168.1.0/24 和 192.168.2.0/24。此解决方案速度很快,但如果您使用的是 Internet IP 地址,则不具有可扩展性,因为您必须丢弃太多 IP。
  2. 为 C 的所有 2 个接口启用代理 ARP 功能。无线和有线网络的网络参数(网络地址和子网掩码)相同,但是启用代理 ARP 后,我可以选择哪些 IP 在有线上,哪些在无线网络上。

Now we examine solution 2

例如:假设您有 Internet 公共子网 x.y.z.0/24。

Interfaces are:

  1. ifconfig eth0 x.y.z.C netmask 255.255.255.255 (有线)
  2. ifconfig eth1 x.y.z.C netmask 255.255.255.255 (无线)
  3. ifconfig eth2 x.y.z.C netmask 255.255.255.255 (连接到互联网)

Static routes on eth2:

  1. route add IPGW dev eth2
  2. route add default gw IPGW

此路由用于将所有 Internet 请求寻址到您的默认网关:如您所见,首先您必须告诉 Linux 路由器在哪里,然后让默认请求通过它。

Static routes on eth0:

  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

Static routes on eth1:

  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

请注意,灵活性非常高,但您必须手动设置每台主机。


下一页 上一页 目录