本文是基于在某东购买的usb无线网卡(RTL8188CUS芯片)来制作无线热点。本来想制作一个一键脚本,不过先把实现的过程记录下来。
参考文章
Turn Your Raspberry Pi Into a WiFi Hotspot with Edimax Nano USB EW-7811Un (RTL8188CUS chipset)
Why won’t dnsmasq’s DHCP server work when using hostapd?
1、更新系统,安装需要的软件
我们首先需要更新系统,然后安装必备的软件,以备随后编译hostapd。
sudo apt-get update
sudo apt-get install bridge-utils udhcpd make libnl-dev
2、编译安装hostpad
现在在git库中的hostpad是2.6版,已经支持了最新的RTL8188CUS芯片,所以我们直接编译安装即可。
#从官网直接克隆代码
git clone git://w1.fi/srv/git/hostap.git
#若你想指定版本库则可以直接checkout
git checkout hostap_2_5
cd hostap/hostapd/
#使用默认配置文件
cp defconfig .config
#编译安装
make
sudo make install
#这时可以看到已经将hostpad安装至`install -D hostapd /usr/local/bin//hostapd`
3.1、桥接方式设置wifi热点
若不想使用桥接方式则可以跳过此步,使用路由器方式来设置热点
编辑网卡配置文件:
sudo nano /etc/network/interfaces
然后将配置文件修改成如下配置:
auto lo
iface lo inet loopback
iface eth0 inet dhcp
#添加桥接
auto br0
iface br0 inet dhcp
bridge_ports eth0 wlan0
配置hostapd:
sudo nano /etc/hostapd/hostapd.conf
配置成如下:
#macaddr_acl:指定MAC地址过滤规则,0表示除非在禁止列表否则允许,1表示除非在允许列表否则禁止,2表示使用外部RADIUS服务器
#accept_mac_file:指定允许MAC列表文件所在
#deny_mac_file:指定禁止MAC列表文件所在
#ignore_broadcast_ssid改为1为隐藏SSID
#macaddr_acl=1
#accept_mac_file=/etc/hostapd/hostapd.accept
ignore_broadcast_ssid=0
interface=wlan0
driver=rtl871xdrv
#ssid
ssid=My_SSID_Name
hw_mode=g
channel=1
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
然后将配置文件加入hostapd并使其生效:
sudo nano /etc/default/hostapd
去掉注释符号,并将上面的配置文件的路径填写在DAEMON_CONF下:
DAEMON_CONF="/etc/hostapd/hostapd.conf"
最后重启:
sudo reboot
3.2、用路由器的方式设置WiFI热点
这里主要使用udhcpd工具来为连接到Wifi的设备自动分配IP地址,当然也可以替换成其他的dhcpd工具。
修改udhcpd配置文件:
sudo mv /etc/udhcpd.conf /etc/udhcpd.conf.bak
sudo nano /etc/udhcpd.conf
将配置文件修改成如下内容:
#设置路由器分配的起始IP与终止IP
start 192.168.42.1
end 192.168.42.20
interface wlan0
remaining yes
#设置DNS
opt dns 8.8.8.8 4.2.2.2
opt subnet 255.255.255.0
#设置树莓派网卡的IP
opt router 192.168.42.1
#设置IP过期时间
opt lease 864000
然后编辑/etc/default/udhcpd
使DHCP Server正常工作:
#将这行的注释取消
DHCPD_ENABLED="no"
设置树莓派无线网卡的静态IP:
sudo ifconfig wlan0 192.168.42.1
修改网卡配置文件,使其永久生效:
sudo nano /etc/network/interfaces
将配置文件修改成如下内容:
auto lo
iface lo inet loopback
iface eth0 inet dhcp
allow-hotplug wlan0
iface wlan0 inet static
address 192.168.42.1
netmask 255.255.255.0
#每次开机自动加载iptables
up iptables-restore < /etc/iptables.ipv4.nat
配置hostapd:
sudo nano /etc/hostapd/hostapd.conf
配置成如下:
interface=wlan0
driver=rtl871xdrv
#ssid
ssid=My_SSID_Name
hw_mode=g
channel=1
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
然后将配置文件加入hostapd并使其生效:
sudo nano /etc/default/hostapd
去掉注释符号,并将上面的配置文件的路径填写在DAEMON_CONF下:
DAEMON_CONF="/etc/hostapd/hostapd.conf"
启动IP转向功能以便于开通NAT:
sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
编辑sudo vim /etc/sysctl.conf
修改net.ipv4.ip_forward
设置为1:
net.ipv4.ip_forward=1
配置iptable防火墙
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/default/ifplugd
内容修改成如下配置:
INTERFACES="eth0"
HOTPLUG_INTERFACES="eth0"
ARGS="-q -f -u0 -d10 -w -I"
SUSPEND_ACTION="stop"
然后启动相应的服务,并将其加入启动项:
sudo service hostapd start
sudo service udhcpd start
sudo update-rc.d hostapd enable
sudo update-rc.d udhcpd enable
最后重启:
sudo reboot
此时就完成了无线热点的配置,然后就可以根据设置的ssid与密码进行wifi的连接,将hostapd升级至2.6以后连接速度非常之快,但有一个问题是,在将信道设置为6时,手机连接无法分配到IP。等待后续更新处理。