用树莓派搭建无线路由
本帖最后由 geekr 于 2013-3-27 21:01 编辑提示:本文内容适用于 ArchLinuxARM,其他 Linux 发行版请根据实际情况使用相应的命令代替。
Step 1、查看操作系统是否已检测到无线网卡
在终端上运行下面的命令:lsusb如果能看到你的无线网卡,就说明无线网卡已经被操作系统检测到了,例如我运行lsusb的结果是:Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. LAN9500 Ethernet 10/100 Adapter
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 004: ID 148f:5370 Ralink Technology, Corp. RT5370 Wireless Adapter
其中最后一行就是我的无线网卡(RT5370芯片)。
如果操作系统没有检测到无线网卡,就不必继续下面的步骤了。
Step 2、检查无线网卡是否支持 AP 模式
虽然现在生产的大部分网卡都支持 AP 模式,但不代表所有都支持。要完成这一步,首先要安装一个系统工具 iw:pacman -S iw(不同发行版安装软件包的命令不一样,如 Raspbian 用 apt-get、Fedora Remix 用 yum、PARM Puppy 用 petget、Gentoo 用 emerge、SliTaz 用 tazpkg、Slackware ARM 用 upgradepkg、openSUSE 用 zypper……)
安装好后,运行:iw list找到运行结果中的 Supported interface nodes 部分,我的运行结果如下: Supported interface modes:
* IBSS
* managed
* AP
* AP/VLAN
* WDS
* monitor
* mesh point
其中如果包含 AP,就说明你的无线网卡支持 AP 模式了。如果这一步检查不通过,就不必继续下面的步骤了。
提示:如果iw list的运行结果太长,一下闪过,可以使用 more 命令进行分页显示:iw list | more如果命令的运行结果超过一页,就会停留在第一页。按空格翻到下一页,按回车向下翻一行。
Step 3、确认无线局域网 IP 段及设置无线网卡的 IP 地址
由于建立的无线网络属于局域网,所以最好使用局域网的 IP 段(10.0.0.0/8、172.16.0.0/12、192.168.0.0/16)。
假设使用 192.168.34.0/24,即 192.168.34.0 - 192.168.34.255。其中无线 AP 的 IP 定为 192.168.34.1,而客户端能使用的 IP 段为 192.168.34.100 - 192.168.34.150。这里只是举例,操作时根据实际情况定就好。
确定后,就要设置无线 AP 的 IP 地址了:
ip link set dev wlan0 up
ip addr add 192.168.34.1/24 broadcast 192.168.34.255 dev wlan0
上述命令中的 wlan0 是无线网卡的设备名称,可以通过 ifconfig 命令查看实际的名称。
设置好后,可以通过 ifconfig 就可以查看到刚才设置的 IP 了:
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu 1500
inet 192.168.34.1netmask 255.255.255.0broadcast 192.168.34.255
inet6 fe80::ca3a:35ff:feca:7276prefixlen 64scopeid 0x20<link>
ether 4c:aa:16:9d:ba:e8txqueuelen 1000(Ethernet)
RX packets 0bytes 0 (0.0 B)
RX errors 0dropped 0overruns 0frame 0
TX packets 0bytes 0 (0.0 B)
TX errors 0dropped 0 overruns 0carrier 0collisions 0
Step 4、建立及启动无线 AP 服务
Linux 下使用 hostapd 来建立无线 AP 服务,如果没有安装则需要先通过软件包安装工具安装:pacman -S hostapd接下来是配置 hostapd,使用文本编译器(如nano)打开 hostapd 的配置文件nano /etc/hostapd/hostapd.conf在安装 hostapd 时,会给出一个默认的 hostapd.conf 文件,建议备份一下原本的 hostapd.conf,再对其进行修改或重新编写,因为其中有比较完整的注释信息,可用于问题排查或日后修改的参考资料。
下面是一个简单的配置方案:
interface=wlan0 # 使用的无线网卡名称
driver=nl80211 # 无线 AP 的驱动名称,默认一般只有 nl80211,其他驱动可能需要自行编译和加载
ssid=my_ap # 无线局域网的 SSID,即在客户端上看到的那个名称
hw_mode=g # 无线网卡的工作模式,这里选择802.11g
channel=7 # 无线网卡的通信信道
wpa=2 # 使用 WPA2 加密
wpa_passphrase=password # AP 认证密码
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP
rsn_pairwise=CCMP
主要配置的含义已经在其后的注释中给出。其中没有配置的项,hostapd会自动采用其默认值。若需要对其他项进行配置,可以参考已经备份好的 hostapd.conf 文件中其他配置项的说明。还可以通过 iw list 的运行结果查看你所使用的无线网卡是否支持相关的配置参数。
编辑完配置文件后,按 + ,再按 保存,最后按 + 退出 nano。
接着,通过下面的命令启动 hostapd:systemctl start hostapd如果启动成功,而且配置正确,就可以在客户端中扫描到 AP了。
Step 5、建立及启动 DHCP 服务
DHCP 服务用于给客户端分配动态 IP。使用前先要安装:pacman -S dhcp安装好后,就要对其进行配置。先是编辑文件/etc/conf.d/dhcp,在萁中DHCP4_ARGS变量中添加使用 DHCP 服务的无线网卡设备名称,如:DHCP4_ARGS="-q wlan0"之后,编辑文件/etc/dhcpd.conf将在第 3 步确定好的局域网布局信息填入:
subnet 192.168.34.0 netmask 255.255.255.0 {
range 192.168.34.100 10.0.0.150;
option routers 192.168.34.1;
option domain-name-servers 8.8.8.8, 8.8.4.4;
option broadcast-address 192.168.34.255;
}
上面的 option domain-name-servers 项后面是填写给客户端指定的 DNS,这里使用了 google 提供的公共 DNS,如果你所有网络提供了其他的 DNS 也可以修改成其他的。
通过下面的命令启动 DHCP 服务:systemctl start dhcpd4如果客户端能够连接并且获取到 IP,则说明 DHCP 启动成功。
Step 6、添加 iptables 转发规则
虽然无线 AP 已经建立好,客户端也能够顺利连接上无线 AP,但此时还不能访问 Internet,原因在于无线 AP 并不负责数据交换,也就是通过客户端发送到无线 AP 的数据包还没法发送到其目标主机,自然也不会得任何响应。
Linux 中完成数据包转发的是 iptables,它才是完成路由功能核心所在。在添加 iptables 转发规则前要先打开内核的 IP 转发功能:echo "1" > /proc/sys/net/ipv4/ip_forward之后是添加转换规则,这里要使用 SNAT 目标,假如 RPi 的外部网络是有线网络,对应的有线网卡的 IP 是 121.121.121.121,则添加数据转发规则的命令为:iptables -t nat -A POSTROUTING -O eth0 -j SNAT --to-source 121.121.121.121如果外部网络的 IP 是动态分配的,可以使用iptables -t nat -A POSTROUTING -O eth0 -j MASQUERADE这样就可以避免每次连接外部网络时都需要手工修改成相应的 IP 地址。
至此,客户端就可以通过无线 AP 访问 Internet 了。
Step 7、让 RPi 启动时自动启动相应的服务,适应无人值守的应用情景
虽然已经可以正常使用无线路由,但只要 RPi 重新启动很多服务及配置信息也会恢复原样。为避免每次启动系统都要重新设置相关的参数及启动相关的服务,可通过下面几步配置让系统在启动时自动完成这些重复性的工作。
(1)自动设置无线网卡的 IP 地址
添加新文件,保存为/etc/systemd/system/wifi.service在文件中写入下列内容,注意根据实际情况修改相应的内容:
Description=Wireless Static IP Connectivity
Wants=network.target
Before=network.target
Type=oneshot
RemainAfterExit=yes
EnvironmentFile=/etc/conf.d/wifi
ExecStart=/sbin/ip link set dev wlan0 up
ExecStart=/sbin/ip addr add 192.168.34.1/24 broadcast 192.168.34.255 dev wlan0
ExecStop=/sbin/ip addr flush dev wlan0
ExecStop=/sbin/ip link set dev wlan0
WantedBy=multi-user.target
具体配置内容的含义可以查看 Arch Linux 的 wiki。
要在系统启动时自动运行该脚本,只须运行下面的命令:systemctl enable wifi(2)自动启动 hostapd 和 DHCP 服务
systemctl enable hostapd
systemctl enable dhcpd4
(3)自动设置 iptables 转发规则
在已经添加好转发规则后,通过下面的命令将转发规则保存到/etc/iptables/iptables.rules
文件中,这个文件里规则在 iptables 每次启动时都会自动添加。
之后再让 iptables 在系统启动时自动运行即可:systemctl enable iptables至此,在 RPi 上的无线路由搭建完成。
PS:
1、关于限制客户端访问的方法,可以查看 hostapd 配置中的 macaddr_acl 参数的相关说明;
2、关于设置网络防火墙的方法,可以查看 iptables 的说明文档。 老大能说一下是什么型号的无线吗 淘宝上并不是所有的都支持的,求公布型号或是淘宝地址。谢谢啦 diyisoft 发表于 2013-3-28 13:20 static/image/common/back.gif
老大能说一下是什么型号的无线吗
我用的是Tenda W311MI,主控Ralink RT5370 diyisoft 发表于 2013-3-28 13:21 static/image/common/back.gif
淘宝上并不是所有的都支持的,求公布型号或是淘宝地址。谢谢啦
主要看主控型号,因为同一厂商同一型号的网卡,可能会因为批次而出现两种不同的芯片。我之前就是买了一个第一版是支持的,可我买回来才发现芯片变了,是第二版的,但厂商和型号一样,可就是不能用。
后来也发现很多人都遇到这种情况,听之前买了能用的人说了一个型号后,自己去买了同一型号却不能用了。最好买之前问清楚卖家,网卡主控芯片是什么。
还有Realtek芯片的最好不要买了,发现即使能正常使用也开不了hostapd,要自己编译安装厂商提供的hostapd和驱动才能用,系统的时候就会很麻烦。 十分感谢,谢谢 这个教程适用raspbian吗,对linux不怎么了解 这个有趣,不知道这种无线网卡作为AP 功率怎么样,能覆盖多大范围 missdeerme 发表于 2013-3-30 10:54 static/image/common/back.gif
这个有趣,不知道这种无线网卡作为AP 功率怎么样,能覆盖多大范围
我用mini型的,刚好可以覆盖室内的范围,外面几乎搜不到了。如果有长长天线的那种,信号会更好。信号的强弱和天线有关,RPi只是负责数据转发罢了。当然客户端多的话,数据传输和处理也会变慢了。 嗯,受教了,谢谢楼主哦,嘿嘿
页:
[1]
2