准备拿树莓派做个应用,当作无线路由器,配置的结果就是把树梅派的网络连接通过无线网卡分享出来。做分享的无线网卡当然就不能同时来连接网络了。
实现无线共享需要的软件包是hostapdraspbian官方安装源提供的hostapd需要无线网卡支持nl80211协议,不是所有的网卡都能配置成功,如果不慎购买了不支持nl80211协议的网卡,需要自行编译适合网卡的hostapd软件包。
    因此选用无线网卡的时候要留意,我选用的网卡型号是MERCURY MW150UD,芯片是Atheros AR9271 可以完美支持hostapd,同款芯片的都应该可以成功配置。以下是配置全过程。

1.配置无线网卡为固定ip地址
输入命令

sudo nano   /etc/network/interfaces

编辑网络配置文件,找到这几行注释掉。

auto lo
iface lo inet loopback
auto eth0
allow-hotplug eth0
iface eth0 inet manual
auto wlan0
allow-hotplug wlan0
#iface wlan0 inet manual
#wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
 
#auto wlan1
#allow-hotplug wlan1
#iface wlan1 inet manual
#wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
#iface wlan1 inet static
#address 192.168.10.1
#netmask 255.255.255.0

添加以下几行。

iface wlan0 inet static
address 192.168.10.1
netmask 255.255.255.0


这里需要说明的是 192.168.10.1是给raspberry pi 做的路由器分配的网关 ip,这个不能跟局域网里其他路由网关ip重复。

2 安装hostapd
输入命令

sudo apt-get install hostapd

编辑hostapd 默认配置文件

sudo nano /etc/default/hostapd

找到

#DAEMON_CONF= ""

修改如下

DAEMON_CONF="/etc/hostapd/hostapd.conf"

编辑 hostapd 配置文件,无则创建

sudo nano /etc/hostapd/hostapd.conf
#把无线网卡wlan0 作为接入点
interface=wlan0
# 使用nl80211驱动
driver=nl80211
#共享网络的SSID是RaspberryPi  
ssid=RaspberryPi
# 网卡工作在802.11G模式
hw_mode=g
#无线网卡选用11信道
channel=11
# WPA2 配置
wpa=2
#wpa密码是raspberry
wpa_passphrase=raspberry
#认证方式为WPA-PSK 加密方式为CCMP  
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
beacon_int=320 
auth_algs=3
wmm_enabled=1

如果芯片为“rtl8192cu”,内容如下:

#把无线网卡wlan0 作为接入点
interface=wlan0
# 使用nl80211驱动
driver=rtl871xdrv
#共享网络的SSID是RaspberryPi
ssid=RaspberryPi
# 网卡工作在802.11G模式
hw_mode=g
#无线网卡选用11信道
channel=6
macaddr_acl=0
auth_algs=1
# WPA2 配置
wpa=2
#wpa密码是raspberry
wpa_passphrase=raspberry
#认证方式为WPA-PSK 加密方式为CCMP
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
beacon_int=100 
wmm_enabled=1

更新hostapd,确保支持"rtl8192cu"无线网卡

wget http://www.adafruit.com/downloads/adafruit_hostapd.zip
unzip adafruit_hostapd.zip
sudo mv /usr/sbin/hostapd /usr/sbin/hostapd.ORIG
sudo mv hostapd /usr/sbin
sudo chmod 755 /usr/sbin/hostapd

或者

wget https://github.com/jenssegers/RTL8188-hostapd/archive/v1.1.tar.gz
tar -zxvf v1.1.tar.gz
cd RTL8188-hostapd-1.1/hostapd
make && sudo make install

针对("rtl8192cu")测试
sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf
成功的话,打开手机会发现多了一个hisen的无线,但是目前还无法链接成功的。

或者配置为5G频段,内容如下:

# 网卡工作在802.11a模式
hw_mode=a
ieee80211n=1
ieee80211ac=1
ht_capab=[HT40+][SMPS-STATIC][RX-STBC2]
#无线网卡选用11信道
channel=44


保存退出,输入命令。

sudo service hostapd restart

启动hostapd 服务。

3.安装dhcp服务
输入命令

sudo apt-get install isc-dhcp-server

备份配置文件

sudo mv /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.bak

编辑新的配置文件

sudo nano /etc/dhcp/dhcpd.conf

复制粘贴以下内容

default-lease-time 600;
max-lease-time 7200;
log-facility local7;
subnet 192.168.10.0 netmask 255.255.255.0 {
  range 192.168.10.10 192.168.10.100;
  option domain-name-servers 202.98.192.67,202.98.198.167;
#  option domain-name "internal.example.org";
  option routers 192.168.10.1;
  option broadcast-address 192.168.10.131;
  default-lease-time 600;
  max-lease-time 7200;
}

编辑isc-dhcp-server

sudo nano /etc/default/isc-dhcp-server

修改那个接口提供DHCP服务,多个接口使用空格隔开,如“eth0 eth1”。找到 INTERFACES=""修改成

INTERFACES="wlan0"

保存退出,重新启动服务。

sudo service isc-dhcp-server restart


这个时候可以在无线网络列表里面连接RaspberryPi,连接成功以后会分配一个IP

4.配置路由转发
通过前面的配置过程,已经可以通过无线网络连接到Raspberry pi的无线网卡,但是还不能连接到互联网,下一步就是让从无线网卡 wlan0 进来的数据转发到有线网 eth0上面,通过有线网卡连接网络接到互联网。
因为eth0是获取的动态ip,所以这里通过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

输入命令

sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"

再次修改 /etc/network/interfaces文件

sudo nano /etc/network/interfaces

最后一行增加内容

up iptables-restore < /etc/iptables.ipv4.nat

开启内核转发,输入命令。

sudo nano /etc/sysctl.conf

找到这里。

# Uncomment the next line to enable packet forwarding for IPv4 
#net.ipv4.ip_forward=1

去掉 net.ipv4.ip_forward 前面的#,保存退出,输入命令。

sudo sysctl -p

出错可以不用管(linux-4.1.15+)配置完毕 通过无线连接上以后ping一下外网,可以通了,这样就可以把Raspberry Pi 当作路由器来用了。

开机启动

sudo nano /etc/rc.local

在语句"exit 0"之前追加(raspberrypi 4.4.11+下不加也行)  

sudo service hostapd restart
sudo service isc-dhcp-server restart

即可

以下部分在(linux-4.1.15+)无内容,没有进行配置。

最近经常发现无线网卡配置的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"重启了几次进行测试,结果一切正常!

Disable ifplugd
Change in /etc/default/ifplugd, to this -
INTERFACES="eth0"
HOTPLUG_INTERFACES="eth0"
ARGS="-q -f -u0 -d10 -w -I"
SUSPEND_ACTION="stop"

 


注意:本文归作者所有,未经作者允许,不得转载