转载来源: 王晔的流水账
原文
用树莓派做WIFI热点有两种方法:
一种是桥接方式设置热点,有点类似交换机工作原理,将网线口的信号转换为无线,另外一种则是路由方式实现无线上网,和大部分路由器工作方式一样。
2 安装hotspot(hostapd)
sudo apt-get install bridge-utils hostapd |
hostapd实现的是无线共享,但需要注意的是官方提供的程序不兼容RTL8188CUS芯片的无线网卡,不过Edimax团队为我们专门编译了兼容的版本,下面的操作需要替换hostapd为兼容版本。
替换的命令如下:
wget http://www.daveconroy.com/wp3/wp-content/uploads/2013/07/hostapd.zip unzip hostapd.zip sudo mv /usr/sbin/hostapd /usr/sbin/hostapd.bak sudo mv hostapd /usr/sbin/hostapd.edimax sudo ln -sf /usr/sbin/hostapd.edimax /usr/sbin/hostapd sudo chown root.root /usr/sbin/hostapd sudo chmod 755 /usr/sbin/hostapd |
3. 桥接的方式设置WiFi热点(方案一)
3.1 安装必备程序
sudo apt-get install bridge-utils |
3.2 配置网卡
编辑网卡配置文件:
sudo nano /etc/network/interfaces |
注释掉所有的关于无线网卡的部分,最后应该变成下面所示:
#allow-hotplug wlan0 #wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf #iface default inet dhcp
加上下面这段桥接配置:
auto br0 iface br0 inet dhcp bridge_ports eth0 wlan0
最终的配置主要由以下几个部分组成:
#loopback adapter auto lo iface lo inet loopback #wired adapter iface eth0 inet dhcp #bridge auto br0 iface br0 inet dhcp bridge_ports eth0 wlan0
3.3 配置hostapd
sudo nano /etc/hostapd/hostapd.conf |
配置信息如下:
interface=wlan0 driver=rtl871xdrv bridge=br0 ssid=My_SSID_Name channel=1 wmm_enabled=0 wpa=1 wpa_passphrase=MYPASSWORD wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP auth_algs=1 macaddr_acl=0
配置文件具体我就不说了,想必大家看内容也知道各项的含义,保存这个配置文件。
3.4 重启并测试hostapd
sudo reboot |
重启完成后,使用下面的命令测试是否正确:
sudo hostapd -dd /etc/hostapd/hostapd.conf |
如果没有错误的话,你这时应该能搜索到你所配置的无线信号。然后Ctrl+C退出这个测试。
如果一切正常的话,我们可以设置hostapd的配置文件路径了。
sudo nano /etc/default/hostapd |
去掉注释符号并改动下面这行为我们的配置文件路径:
DAEMON_CONF="/etc/hostapd/hostapd.conf"
桥接方式配置完成!
4. 路由的方式设置WiFi热点(方案二)
4.1 安装必备程序
sudo apt-get install udhcpd |
udhcpd主要为连接到WiFi的设备自动分配IP地址的,当然你也可以换用你所熟悉的软件。
4.2 配置udhcpd,编辑/etc/udhcpd.conf
,主要内容如下:
start 192.168.42.2 # This is the range of IPs that the hostspot will give to client devices. end 192.168.42.20 interface wlan0 # The device uDHCP listens on. remaining yes opt dns 8.8.8.8 4.2.2.2 # The DNS servers client devices will use. opt subnet 255.255.255.0 opt router 192.168.42.1 # The Pi's IP address on wlan0 which we will set up shortly. opt lease 864000 # 10 day DHCP lease time in seconds
接下来编辑/etc/default/udhcpd
并且将下面这行注释掉,以使DHCP Server正常工作:
#DHCPD_ENABLED="no"
4.3 配置无线网卡
通过下面的命令给无线网卡设置一个IP地址:
sudo ifconfig wlan0 192.168.42.1 |
当然为了下次启动仍然有效,我们需要配置/etc/network/interfaces
文件:
sudo nano /etc/network/interfaces |
注释掉所有的关于无线网卡的部分,最后应该变成下面所示:
#wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf #iface default inet dhcp
注意保留allow-hotplug wlan0
,英文原文是不保留的,但是我操作下来发现如果不保留这段的话,无线网卡有时无法正常配置IP,最后无线网卡IP的配置信息如下:
allow-hotplug wlan0 iface wlan0 inet static address 192.168.42.1 netmask 255.255.255.0
4.4 编辑hostapd配置
sudo nano /etc/hostapd/hostapd.conf |
内容如下:
interface=wlan0 driver=rtl871xdrv ssid=My_SSID_Name hw_mode=g channel=6 macaddr_acl=0 auth_algs=1 ignore_broadcast_ssid=0 wpa=2 wpa_passphrase=MYPASSWORD wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP
4.7 启动IP转向功能以便于开通NAT
sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward" |
编辑/etc/sysctl.conf
改动下面这行:
net.ipv4.ip_forward=1
4.8 配置iptables防火墙
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT |
到这里路由的NAT功能已经被启用,我们将刚才配置的iptables保存下来以便于下次使用:
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat" |
编辑/etc/network/interfaces
然后在最后加上下面这行以使每次启动都自动加载iptables配置:
up iptables-restore < /etc/iptables.ipv4.nat
4.9 重启并测试hostapd
sudo reboot |
重启完成后,使用下面的命令测试是否正确:
sudo hostapd -dd /etc/hostapd/hostapd.conf |
如果没有错误的话,你这时应该能搜索到你所配置的无线信号。然后Ctrl+C退出这个测试。
如果一切正常的话,我们可以设置hostapd的配置文件路径了。
sudo nano /etc/default/hostapd |
去掉注释符号并改动下面这行为我们的配置文件路径:
DAEMON_CONF="/etc/hostapd/hostapd.conf"
4.10 启动相应软件,并加入启动项
sudo service hostapd start sudo service udhcpd start sudo update-rc.d hostapd enable sudo update-rc.d udhcpd enable |
2013年12月12日更新
最近经常发现无线网卡配置的DHCP不能发挥作用,经过排查发现给无线网卡指定的静态IP失败了,也就是说无线网卡没有IP导致DHCP无法工作,在网上找到这篇文章《Why won't dnsmasq's DHCP server work when using hostapd?》,根据内容我将/etc/default/ifplugd
的内容修改配置如下:
INTERFACES="eth0" HOTPLUG_INTERFACES="eth0" ARGS="-q -f -u0 -d10 -w -I" SUSPEND_ACTION="stop" |
重启了几次进行测试,结果一切正常!