用树莓派搭建无线路由

提示:本文内容适用于 ArchLinuxARM,其他 Linux 发行版请根据实际情况使用相应的命令代替。

Step 1、查看操作系统是否已检测到无线网卡
在终端上运行下面的命令:

  1. lsusb

复制代码

如果能看到你的无线网卡(我用的是 Tenda W311MI,主控Ralink RT5370),就说明无线网卡已经被操作系统检测到了,例如我运行lsusb的结果是:

  1. Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. LAN9500 Ethernet 10/100 Adapter
  2. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
  3. Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
  4. Bus 001 Device 004: ID 148f:5370 Ralink Technology, Corp. RT5370 Wireless Adapter

复制代码

其中最后一行就是我的无线网卡(RT5370芯片)。
如果操作系统没有检测到无线网卡,就不必继续下面的步骤了。

Step 2、检查无线网卡是否支持 AP 模式
虽然现在生产的大部分网卡都支持 AP 模式,但不代表所有都支持。要完成这一步,首先要安装一个系统工具 iw:

  1. pacman -S iw

复制代码

(不同发行版安装软件包的命令不一样,如 Raspbian 用 apt-get、Fedora Remix 用 yum、PARM Puppy 用 petget、Gentoo 用 emerge、SliTaz 用 tazpkg、Slackware ARM 用 upgradepkg、openSUSE 用 zypper……)
安装好后,运行:

  1. iw list

复制代码

找到运行结果中的 Supported interface nodes 部分,我的运行结果如下:

  1. Supported interface modes:
  2. * IBSS
  3. * managed
  4. * AP
  5. * AP/VLAN
  6. * WDS
  7. * monitor
  8. * mesh point

复制代码

其中如果包含 AP,就说明你的无线网卡支持 AP 模式了。如果这一步检查不通过,就不必继续下面的步骤了。
提示:如果iw list的运行结果太长,一下闪过,可以使用 more 命令进行分页显示:

  1. 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 地址了:

  1. ip link set dev wlan0 up
  2. ip addr add 192.168.34.1/24 broadcast 192.168.34.255 dev wlan0

复制代码

上述命令中的 wlan0 是无线网卡的设备名称,可以通过 ifconfig 命令查看实际的名称。
设置好后,可以通过 ifconfig 就可以查看到刚才设置的 IP 了:

  1. wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
  2. inet 192.168.34.1  netmask 255.255.255.0  broadcast 192.168.34.255
  3. inet6 fe80::ca3a:35ff:feca:7276  prefixlen 64  scopeid 0x20<link>
  4. ether 4c:aa:16:9d:ba:e8  txqueuelen 1000  (Ethernet)
  5. RX packets 0  bytes 0 (0.0 B)
  6. RX errors 0  dropped 0  overruns 0  frame 0
  7. TX packets 0  bytes 0 (0.0 B)
  8. TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

复制代码

Step 4、建立及启动无线 AP 服务
Linux 下使用 hostapd 来建立无线 AP 服务,如果没有安装则需要先通过软件包安装工具安装:

  1. pacman -S hostapd

复制代码

接下来是配置 hostapd,使用文本编译器(如nano)打开 hostapd 的配置文件

  1. nano /etc/hostapd/hostapd.conf

复制代码

在安装 hostapd 时,会给出一个默认的 hostapd.conf 文件,建议备份一下原本的 hostapd.conf,再对其进行修改或重新编写,因为其中有比较完整的注释信息,可用于问题排查或日后修改的参考资料。
下面是一个简单的配置方案:

  1. interface=wlan0                 # 使用的无线网卡名称
  2. driver=nl80211                  # 无线 AP 的驱动名称,默认一般只有 nl80211,其他驱动可能需要自行编译和加载
  3. ssid=my_ap                      # 无线局域网的 SSID,即在客户端上看到的那个名称
  4. hw_mode=g                       # 无线网卡的工作模式,这里选择802.11g
  5. channel=7                       # 无线网卡的通信信道
  6. wpa=2                           # 使用 WPA2 加密
  7. wpa_passphrase=password         # AP 认证密码
  8. wpa_key_mgmt=WPA-PSK
  9. wpa_pairwise=CCMP
  10. rsn_pairwise=CCMP

复制代码

主要配置的含义已经在其后的注释中给出。其中没有配置的项,hostapd会自动采用其默认值。若需要对其他项进行配置,可以参考已经备份好的 hostapd.conf 文件中其他配置项的说明。还可以通过 iw list 的运行结果查看你所使用的无线网卡是否支持相关的配置参数。
编辑完配置文件后,按 [Ctrl] + [o],再按 [y] 保存,最后按 [Ctrl] + [x] 退出 nano。
接着,通过下面的命令启动 hostapd:

  1. systemctl start hostapd

复制代码

如果启动成功,而且配置正确,就可以在客户端中扫描到 AP了。

Step 5、建立及启动 DHCP 服务
DHCP 服务用于给客户端分配动态 IP。使用前先要安装:

  1. pacman -S dhcp

复制代码

安装好后,就要对其进行配置。先是编辑文件

  1. /etc/conf.d/dhcp

复制代码

,在萁中DHCP4_ARGS变量中添加使用 DHCP 服务的无线网卡设备名称,如:

  1. DHCP4_ARGS="-q wlan0"

复制代码

之后,编辑文件

  1. /etc/dhcpd.conf

复制代码

将在第 3 步确定好的局域网布局信息填入:

  1. subnet 192.168.34.0 netmask 255.255.255.0 {
  2. range 192.168.34.100 10.0.0.150;
  3. option routers 192.168.34.1;
  4. option domain-name-servers 8.8.8.8, 8.8.4.4;
  5. option broadcast-address 192.168.34.255;
  6. }

复制代码

上面的 option domain-name-servers 项后面是填写给客户端指定的 DNS,这里使用了 google 提供的公共 DNS,如果你所有网络提供了其他的 DNS 也可以修改成其他的。
通过下面的命令启动 DHCP 服务:

  1. systemctl start dhcpd4

复制代码

如果客户端能够连接并且获取到 IP,则说明 DHCP 启动成功。

Step 6、添加 iptables 转发规则
虽然无线 AP 已经建立好,客户端也能够顺利连接上无线 AP,但此时还不能访问 Internet,原因在于无线 AP 并不负责数据交换,也就是通过客户端发送到无线 AP 的数据包还没法发送到其目标主机,自然也不会得任何响应。
Linux 中完成数据包转发的是 iptables,它才是完成路由功能核心所在。在添加 iptables 转发规则前要先打开内核的 IP 转发功能:

  1. echo "1" > /proc/sys/net/ipv4/ip_forward

复制代码

之后是添加转换规则,这里要使用 SNAT 目标,假如 RPi 的外部网络是有线网络,对应的有线网卡的 IP 是 121.121.121.121,则添加数据转发规则的命令为:

  1. iptables -t nat -A POSTROUTING -O eth0 -j SNAT --to-source 121.121.121.121

复制代码

如果外部网络的 IP 是动态分配的,可以使用

  1. iptables -t nat -A POSTROUTING -O eth0 -j MASQUERADE

复制代码

这样就可以避免每次连接外部网络时都需要手工修改成相应的 IP 地址。
至此,客户端就可以通过无线 AP 访问 Internet 了。

Step 7、让 RPi 启动时自动启动相应的服务,适应无人值守的应用情景
虽然已经可以正常使用无线路由,但只要 RPi 重新启动很多服务及配置信息也会恢复原样。为避免每次启动系统都要重新设置相关的参数及启动相关的服务,可通过下面几步配置让系统在启动时自动完成这些重复性的工作。
(1)自动设置无线网卡的 IP 地址
添加新文件,保存为

  1. /etc/systemd/system/wifi.service

复制代码

在文件中写入下列内容,注意根据实际情况修改相应的内容:

  1. [Unit]
  2. Description=Wireless Static IP Connectivity
  3. Wants=network.target
  4. Before=network.target
  5. [Service]
  6. Type=oneshot
  7. RemainAfterExit=yes
  8. EnvironmentFile=/etc/conf.d/wifi
  9. ExecStart=/sbin/ip link set dev wlan0 up
  10. ExecStart=/sbin/ip addr add 192.168.34.1/24 broadcast 192.168.34.255 dev wlan0
  11. ExecStop=/sbin/ip addr flush dev wlan0
  12. ExecStop=/sbin/ip link set dev wlan0
  13. [Install]
  14. WantedBy=multi-user.target

复制代码

具体配置内容的含义可以查看 Arch Linux 的 wiki
要在系统启动时自动运行该脚本,只须运行下面的命令:

  1. systemctl enable wifi

复制代码

(2)自动启动 hostapd 和 DHCP 服务

  1. systemctl enable hostapd
  2. systemctl enable dhcpd4

复制代码

(3)自动设置 iptables 转发规则
在已经添加好转发规则后,通过下面的命令将转发规则保存到

  1. /etc/iptables/iptables.rules

复制代码

文件中,这个文件里规则在 iptables 每次启动时都会自动添加。
之后再让 iptables 在系统启动时自动运行即可:

  1. systemctl enable iptables

复制代码

至此,在 RPi 上的无线路由搭建完成。

PS
1、关于限制客户端访问的方法,可以查看 hostapd 配置中的 macaddr_acl 参数的相关说明;
2、关于设置网络防火墙的方法,可以查看 iptables 的说明文档。

时间: 2024-07-29 16:03:19

用树莓派搭建无线路由的相关文章

Raspberry pi设置自动拨号,搭建无线路由环境

Raspberry pi设置自动拨号,搭建无线路由环境 前言 raspberry pi(树莓派), 是一款针对电脑业余爱好者.教师.小学生以及小型企业等用户的迷你电脑,由于可以烧录Linux操作系统,因此可以衍生出各种各样的使用途径,诸如控制版,爬虫机器,个人vps,门禁系统-..本文主要介绍如何在raspberry pi上面完成pppoe拨号上网功能,以及如何利用raspberry pi完成路由转发功能,进而将其作为一个家用无线路由器来使用. 准备环境 raspberry pi 三代 b+版

树莓派搭建WEB服务器

树莓派搭建WEB的教程网上有许多,但感觉每一篇都有一些问题,这次我将网上的教程汇总,并亲身实践,将注意的问题都写进去,方便新手学习! 目录:1,安装nginx+sqlite+php5打造轻量级服务器,够轻了            2,安装wordpress,z-blog博客程序,因为只有这两个博客支持sqlite,毕竟MYsql内存占用太大,树莓派能力有限            3,如何实现外网访问.树莓派被假设在家,没有公网IP(公网IP等问题请移驾我以前的一篇博文:http://cblogc

树莓派搭建VPN(PPTP)服务器

备注:本文转自http://www.cnblogs.com/alexsun/p/5894338.html 需求及环境 学校的教务管理系统需要内网才能登录,当我不在学校的时候使用外网无法访问.于是打算把树莓派部署在寝室并搭建一个VPN服务器以便我连接以访问教务管理系统.树莓派通过有线连接到一个路由器,路由器拨号访问网络. 必要软件安装 我们需要用到ppp pptpd这2个软件 sudo apt-get install ppp sudo apt-get install pptpd 配置pptpd 设

【转】用树莓派搭建web服务器

本文将详细介绍如何在树莓派上配置服务器,和<教你在Xubuntu上搭建LAMP服务器>有些类似,多了一些介绍在树莓派上的不同步骤的地方. 这种服务器的配置被称为LAMP,是最流行的服务器配置之一,LAMP的含义是: Linux - 操作系统 Apache - 网络服务器(HTTP)软件 mysql - 数据库服务 PHP or perl - 编程语言 这种配置对于大多数树莓派用户来说,可能过于重量级了,但是大多数用户能学到服务器的配置过程,是一种学习配置服务器的好方法.我可能会在以后写一篇轻量

06_树莓派搭建私有云owncloud

1.私有云owncloud简介 首先私有云是什么东西呢?类似于百度云网盘,360云盘等可以把数据上传到服务器的一个平台,这样在家里就可以搭建一个私有云,上传自己喜欢的电影或者音乐,方便与家人.好友分享. 首先,我们需要了解私有云的运行条件,owncloud是基于LAMP环境才能运行的.所以什么是LAMP环境呢?请看下面的解释 L:Linux,开源操作系统,(raspbian系统): A:Apache,网页服务器: M:Mysql(MariaDB),数据库 P:PHP,编程语音. 大概知道了own

树莓派搭建SVN服务器

1.安装SVN服务器 sudo apt-get install subversion -y 2.创建仓库 mkdir /home/pi/svnRepository svnadmin create /home/pi/svnRepository 仓库创建在/home/pi/svn目录下 3.编辑配置文件 nano /home/pi/svnRepository/conf/svnserve.conf如下图去掉注释 看不到图的,编辑svnserve.conf,代码如下: [general] #匿名访问的权

树莓派搭建安装mysql

最近刚入手了一枚树莓派,突发奇想打算做一个小型的家用服务器,在家7*24小时一直挂着. 真的是非常小,只有巴掌大,给树莓派买了一些配件,外壳.小风扇.2片散热片.32G SD卡.HDMI线,组装之后的效果. 安装之前可以先更新下本机软件 sudo apt-get update 然后就是等待了.等待完之后要准备安装mysql了,命令直接安装: sudo apt-get install mysql-server 然后就是等待,在安装的过程中会提示你让你输入mysql的root密码,会提示两次.输入完

树莓派搭建ActiveMQ

树莓派上安装ActiveMQ和在其它Linux发行版基本相同,只是在开防火墙端口时有区别. 硬件信息: 树莓派3B型,Raspbian系统 安装 //下载ActiveMQ安装包 http://activemq.apache.org/download.html wget http://apache.fayea.com//activemq/5.14.1/apache-activemq-5.14.1-bin.tar.gz //解压 tar zxvf /xxx/xx/apache-activemq-5.

用树莓派搭建外网可以访问的服务器

一.需要一个对外的公网IP 先查看路由器的对外IP 是否是公网IP,如果不是,可以致电宽带运营商,要求分配公网IP.对于普通用户,宽带运营商分配的公网IP是会变化的,每次启路由器,或者间隔一定时间,IP 都会变化一次.不过,这个问题可以解决.二. 将树莓派的IP 设置为静态IP 这里假设家里的所有上网设备都是通过路由器连接上网.路由器自身的IP是公网的IP,连接路由器的各个设备,分配的都是私有IP.如果树莓派的IP 不是静态的,那么每次重启路由器,路由器的IP 都是会变的,这样不利于实现接下来要