Wifi一般用的是AP(Access Point)模式:无线路由器作为一个Wifi热点为其他的Wifi客户端提供连接服务。
这里要用到的是Wifi的STA(Station)模式:作为客户端连接AP模式下的Wifi,这个一般笔记本的无线网卡都是这种模式( 详细的Linux下支持的Wifi模式看这里 ),网络结构图:
上图中左边STA客户端模式下的无线网卡作为WAN把192.168.2.0/24划为内网,用NAT方式连接外网的Wifi AP节点(192.168.1.1)。这个很像经典的OpenWrt WAN和LAN网络结构,只不过把WAN的以太网接口换成了Wifi。
OpenWrt设置
在OpenWrt下主要是设置/etc/config/network、/etc/config/wireless这两个文件,其他的都与默认的LAN和WAN模式相同。
/etc/config/network下,关闭VLAN(enable_valn=0),lan接口设置成静态并 去掉网桥 (默认为'option type bridge',Wifi通常自动桥接到lan接口),wan去掉'option ifname '选项(无线Wifi接口会自动加入wan作为ifname)。
config switch eth1 option reset 0 option enable_vlan 0 config interface loopback option ifname lo option proto static option ipaddr 127.0.0.1 option netmask 255.0.0.0 config interface lan option ifname eth1 option proto static option ipaddr 192.168.2.1 option netmask 255.255.255.0 config interface wan option proto dhcp
配置以后所有交换机上的接口都变为内部LAN,而无线Wifi作为WAN连接外网。LAN和WAN之间用NAT方式进行地址转换(具体在 firewall 的WAN设置masq=1,默认已经设置好了),firewall的NAT选项叫Masquerade(伪装),就是WAN接口把内网的数据包源地址伪装成自己的,很形象:)。
我一开始连接失败用Tcpdump查看wlan0,发现数据包还没有NAT伪装,最后发现是firewall没启动,所以确保firewall开机启动:
/etc/init.d/firewall enable
查看firewall是否启动:
/etc/init.d/firewall enabled && echo on
/etc/config/wireless下,设置Wifi参数:
config wifi-device radio0 option type mac80211 option channel 0 option hwmode 11g option txpower 0 config wifi-iface option device radio0 option network wan option mode sta option ssid yourAPssid option encryption psk2 option key yourkey
主要是设置mode为sta,network选择要自动加入wan,填上要连接Wifi AP的ssid、加密方式encryption和密钥key,全部完成后重启网络,Wifi连接成功后WLAN LED灯会亮起。
/etc/init.d/network restart
把你的台式电脑网线随便插入LAN口,这样你就成为了一台有无线网卡的台式机了,省去了用网线想方设法连接其他房间路由器的烦恼:)。
参考
http://wiki.openwrt.org/doc/howto/clientmode
http://wiki.openwrt.org/doc/recipes/routedclient#using.masquerade