使用Atheros和MAC80211 WDS实现无线网桥(无线中继)
自从2.6内核使用后,大多数OpenWrt加入了对AP-to-STA WDS模式的无线驱动支持,用于将两个或以上的设备借助无线网桥组成一个统一的广播域。
经此配置后,您可以将远程无线OpenWrt设备(作为无线基站)以无线连接至一个本地无线OpenWrt接入点(作为无线接入点)。由此实现所有以有线或无线方式连接至两个路由的设备均处于同一网络和广播域中。其它无线客户端仍可以像以前一样连接至无线接入点。
以下方式为一个二层透明网桥。所有的广播包(如DHCP请求)将经由无线网桥双向发送,并在传输中保留其原始的源MAC地址不变。维基上的文章clientmode描述了其实现原理。
配置
- 在安装了OpenWrt 12.09的TP-LINK TL-WR1043ND作为本地无线接入点,Rosewill RNX-N300RT作为远程无线桥接客户端设备的情况下验证通过。
- 在两部安装了OpenWrt 15.05的TP-LINK TL-WR1043ND上验证通过。
- 在安装了OpenWrt 15.05的Netgear WNDR3700v4作为接入点,Nexx WT3020作为桥接客户端的情况下验证通过。
在使用uci和luci的情况下,网络配置均分为两部分:无线接入点部分以及终端部分。必须严格遵守下述步骤,否则可能会导致您的无线路由无法工作。
使用SSH
无线接入点
通过SSH连接至无线接入点。此设备使用网线连接至因特网或主网络。请确认此设备已经设置为拥有SSID、无线通道和WPA2加密的普通无线接入点并可以供无线接入的客户端正常使用。
对于普通的无线接入点来说,仅需要进行一项配置变更。
登录后,编辑/etc/config/wireless文件。在使用中的已有的wifi-iface
段落,添加一行:option wds '1
'。请注意,双频路由的对应文件中可能有多处wifi-iface
段,您需要确保更改了正确的段落。
完成后,保存文件并重启设备以启用新设置。
普通无线客户端应当跟从前一样可以连接至无线接入点并访问因特网。
以下为无线接入点设备上的示例/etc/config/wireless文件:
config wifi-device 'radio0' option type 'mac80211' option macaddr 'unique device MAC address here' option hwmode '11ng' option htmode 'HT20' list ht_capab 'SHORT-GI-40' list ht_capab 'DSSS_CCK-40' option txpower '27' option channel '1' option country 'CA' config wifi-iface option device 'radio0' option network 'lan' option ssid 'my-wireless-ssid' option encryption 'psk2' option key 'wireless-secret-password' option mode 'ap' option wds '1'
重启后,“ifconfig”命令将在原有“wlan0”接口设备的基础上,额外显示一个名字类似“wlan.staN”(N为数字)的设备(注意: 在Barrier Breaker上进行测试时,不论接入点还是基站都没有创建这个新接口,但WDS还是工作的很正常。)
如果原有的wlan接口不是网桥的一部分的话,新的wlan.staN接口默认*不会*被桥接。 如果您设置的AP接口目前还不是网桥的一部分的话,您必须新建一个网桥接口,并将其关联至接入点wlan接口。这样hostapd才会自动将wlan.staN接口添加至网桥。
远端无线终端
首先,使用网线连接至作为远程无线基站使用的路由。如果还没有进行安装openwrt和设置密码,则需要先进行。然后用SSH连接至基站。
第一步:为桥接准备设备。
如果是首次配置OpenWrt,设备的lan接口默认会启用DHCP服务。在设备连接至生产环境网络之前,需要禁用它(假设生产环境网络已经配置了DHCP服务):编辑/etc/config/dhcp文件,找到config dhcp 'lan
'段落,并在其中添加一行:option ignore '1
'。这将在lan接口上禁用DHCP服务器。(lan DHCP段与wan DHCP段看起来很类似,只是wan接口默认禁用了DHCP服务。)[在Chaos Calmer 15.05 / LuCI (git-15.248.30277-3836b45)上, 我还要将option dhcpv6 'server
'改为option dhcpv6 'disabled
'以禁用DHCP6服务。 --MariusMatutiae]
然后,要将lan接口默认配置的静态IP 192.168.1.1改为其它地址。编辑/etc/config/network文件。将IP设置为同一子网的其它地址,比如192.168.1.2。然后重启路由。记得用新IP地址访问并进行配置。[因为在前面禁用了DHCP服务,我不得不手动给我的PC设置一个临时IP,以访问路由并继续配置过程。 --Steve Newcomb]
或者,你也可以让路由从访问点通过DHCP获取一个地址,但如果WDS无法按预期工作,或者基站路由无法访问接入点的DHCP服务,可能会导致路由无法访问。方法为:在lan
段落中,移除静态IP地址配置并将接口设置为使用DHCP,示例如下:
config interface 'lan' option ifname 'eth0' option type 'bridge' option proto 'dhcp'
注意: LAN接口可以保持静态ip,但必须禁用dhcp服务。如果将LAN接口设置为由dhcp服务获取ip的话,则每次启动时,都会查找远端路由ip。
当上述步骤完成后,我们就可以开始设置wifi连接了。
编辑/etc/config/wireless文件。在radio0
段,需确保无线设置与接入点的对应设置值保持一致。
同一文件的下面一点,修改wifi-iface
段,加入想要连接至的SSID(即接入点的SSID),并确认WDS已启用:其值设置为1。
以下是一个无线客户端桥接设备的/etc/config/wireless文件示例。某些选项根据硬件不同可能会有所差异,但SSID、无线通道、加密类型必须与接入点保持一致。而且WDS模式必须开启。
config wifi-device 'radio0' option type 'mac80211' option macaddr 'unique device MAC address here -- NOT the same one as used in the access point configuration file' option hwmode '11ng' option htmode 'HT20' list ht_capab 'SHORT-GI-20' list ht_capab 'SHORT-GI-40' list ht_capab 'TX-STBC' list ht_capab 'RX-STBC1' list ht_capab 'DSSS_CCK-40' option txpower '27' option country 'CA' option channel '1' option disabled '0' config wifi-iface option device 'radio0' option network 'lan' option mode 'sta' option wds '1' option ssid 'my-wireless-ssid' option encryption 'psk2' option key 'wireless-secret-password'
参阅配置无线密码以获取更多密码和密钥配置的信息。
将设备由有线网络断开,并在保持没有有线连接的情况下重启。
设备重启后将自动连入接入点的无线网络。客户段网桥设备启动并连入接入点需要花费1-2分钟,需要等待这个过程结束。 然后,有线接口(比如eth0)将通过无线桥接连接成功获取DHCP地址。注意,此时远端客户端网桥设备的无线网络自身却不会获取到IP地址,因为它作为透明网桥被使用。
通过LAN端口连接至远端客户端网桥设备的有线设备此时已经经由无线连接透明网桥至主网络了。
无线连接,还需最后一步:
创建一个新的无线接口。您可以直接在LuCi → 无线 中创建,或在/etc/config/wireless中创建一个新的wifi-iface段。从既有的接口配置复制所有配置项,并进行如下两项改动:用'ap'替换'sta',并删除WDS配置项或将其值设置为0.SSID和密码可以与主路由保持一致以实现透明漫游,但也可以设为不同的。将此接口依照默认值连接至lan,您的其余连接至此接入点的无线设备就自动成为了网络的一部分。
LuCI
上述手动SSH配置均可在OpenWrt 12.09的LuCI中进行。
无线接入点
设置无线接入点的无线模式为:“Access Point (WDS)” (screenshot)
远端无线终端
在LAN接口中,将默认IP地址设置为与目标子网不同的子网,并禁用DHCP服务。(screenshot)
点击每个无线接口的扫描按钮,加入上述的无线网络。将防火墙区域设置为lan
。
无线模式应设置为Client (WDS)
,并将接口设置中的网络由wwan
改为lan
。 (screenshot)
至网络, DHCP and DNS, 设置DNS forwardings
为无线接入点路由的ip地址。
至网络、接口、Lan、编辑,将IPv4 gateway
设置为无线接入点路由的ip地址。
至Physical Settings并启用STP
。不进行这一步的话,将允许网络回环,并最终导致所有的路由瘫痪。
最后,仍需按照上述无线连接,还需最后一步:
步骤执行,直至完毕。
老物件
相关配置文件:
多 WDS Stations 可连接至一个 WDS Access Point.
- 在接入点上,在现存的
wifi-iface
部分添加option wds 1
,并配置SSID、通道、安全认证等。 - 在客户端将
option mode
设置为sta
并将option wds 1
添加至wifi-iface
部分。禁用DHCP服务器:比如,在/etc/config/dhcp中针对LAN接口增加option ignore 1
。 - 创建中继器:添加WDS接入点并在客户端创建WDS终端。(可以用一样的SSID和key,也可以不用)。不要忘记将新创建的接入点添加至LAN防火墙区域。
在MAC80211上OpenWRT使用了4地址格式(option wds 1) (with ap or sta mode)而不是中继器模式。参见http://linuxwireless.org/en/users/Documentation/iw#Setting_up_a_WDS_peer