raspberry pi 3 变身路由器

raspberry pi 3 变身路由器

首先,你的raspberry 3 要装上raspbian OS,具体参看官方的手册。另外像笔者这种在高校的学生,不能只装上hostpad和udhpc这样的软件就OK,因为给eth0,也就是有线网上网还得需要锐捷认证。Basic concept就是用锐捷登陆上校园网,然后再把通过无线网卡把网络共享出来。


第一步:装上mentohust

下载mentohust的源码自己编译

源码下载地址在这里,笔者在写这篇博客的时候是2016年10月,关于mentohus的维护还有。 [ mentohust]。这个是是mentohust目前维护的个人网站,读者可以去他的github上下载最新的代码。

编译前的准备工作

编译前需要一些依赖库,依次敲入下面的指令:

sudo apt-get install update
sudo apt-get install autopoint
sudo apt-get install automake
sudo apt-get install autoconf
sudo apt-get install gettext-base gettext liblocale-gettext-perl
sudo apt-get install libpcap-dev 
sudo apt-get install libnotify-dev

有一个需要注意的事情,raspian默认的是官方的镜像,官方的镜像好像速度不高,而且有的时候会转到浙大的镜像。建议把source.list还是改为清华的镜像比较快。

下载编译

cd ~
mkdir Program
cd Program
git clone "https://github.com/HustLion/mentohust"
cd mentohust
./autogen.sh

编译前的configure

./configure --prefix=/usr

注意不要看github上的一些configure的配置,那里的配置我在raspberry上尝试过,没成功。最后再make和install:

sudo make
sudo make install

改一下权限,这样普通用户也可以进行认证

sudo chmod u+s /usr/bin/mentohust

测试mentohust

将raspberry的网口连上网线,在mentohust之前要配置一下用户名的认证类型:

sudo leafpad /etc/mentohust.conf

这个是mentohust的配置文件,当然你要是不闲麻烦也可以自己敲指令,敲完了后,指令会将相应的配置写入这个文件。需要配置的项有:用户名,密码,认证类型(配置为0或2都行),注意DHCP一定配置为认证后启用,不然上不了网。

接着就可以

mentohust

这里完成了让有线网上网的步骤。

第二步:配置无线网

raspberry pi 3是有BCM的无线网卡的,也有bluetooth。BCM的这个无线网卡是支持AP模式的,是否支持可以利用

iw list

看是否存在AP模式。这种方式对先前的老板子,pi 2有效,由于pi 2没有wifi模块,大多数geek都会买一个USB wifi dongle,最常见的是RTL8188,这个网卡在硬件上是支持AP模式的,但是软件在一段时间没有跟上,在我写这篇博客的时候driver已经支持了,所以使用Pi 2的读者最好是去官方下载最新的driver。

安装必要的程序

sudo apt-get install udhcpd
sudo apt-get install hostapd

好像进行过 sudo apt-get update 后hostapd已经有了,为了保险,上面的两行代码还是都敲一下吧。
hostapd是热点启用程序,udhcpd则是wifi设备连接后自动获取ip的工具。其实mentohust那一步就用到过DHCP了,可能这里后面出现冲突的原因吧,这个后面再说。

修改网络接口

sudo leafpad /etc/udhcpd.conf

(1)将里面的interface eth0改为interface wlan0
(2)去掉remaining前的#
(3)修改AP模式下的wlan0的IP地址需要配置的东西如下:

opt dns 202.114.0.242 202.114.0.242
option subnet 255.255.255.0
opt router 192.168.0.1

就这几项就OK了,其它的全部注释掉。注意上面的dns要根据地名来配置,我在的地方是华中科技大学的校园网,所以dns配置为202.114.0.242,其它学校的dns也可以在网上查到的。

另外还有一个网络接口需要修改,非常重要。

sudo leafpad /etc/dhcpcd.conf

在最后一行加上

denyinterfaces wlan0

使能DHCP

配置 /etc/default/udhcpd

sudo leafpad /etc/default/udhcpd

注释掉

DHCPD_ENABLED="no"

这一行

给wlan0静态IP

在控制台输入静态ip控制指令

sudo ifconfig wlan0 192.168.0.1

配置网卡启动参数

配置文件 /etc/network/interfaces,注意这里wlan0的地址参数要和/etc/udhcpd.conf相关参数要一致。
输入:

sudo leafpad /etc/network/interfaces

将关于wlan0的全部注释掉:

#allow-hotplug wlan0
#iface wlan0 intet manual
#wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
#iface default inet dhcp

增加

iface wlan0 inet static
    address 192.168.0.1
    netmask 255.255.255.0

配置AP参数

创建文件hostapd.conf文件,配置raspberry pi的热点名称和热点密码。

sudo leafpad /etc/hostapd/hostapd.conf

在新打开的文件中输入下面的内容

# This is the name of the WiFi interface we configured above
interface=wlan0
# Use the nl80211 driver with the brcmfmac driver
driver=nl80211
# 这是你要设置的wifi热点的名称
ssid=Raspberry_AP
# Use the 2.4GHz band
hw_mode=g
# Enable 802.11n
ieee80211n=1
# Use channel 6
channel=6
macaddr_acl=0
# Enable WMM
wmm_enabled=1
# Enable 40MHz channels with 20ns guard interval
ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40]
# Use WPA authentication
auth_algs=1
# Require clients to know the network name
ignore_broadcast_ssid=0
# Use WPA2
wpa=2
#这是你要配置的wifi热点的密码
wpa_passphrase=12345678
# Use a pre-shared key
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
# Use AES, instead of TKIP
rsn_pairwise=CCMP

接下来指定配置文件的位置

sudo leafpad /etc/default/hostapd

将#DAEMON_CONF=”“改为

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

测试AP是否能成功启动

sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf

这个时候应该能看到你设置的wifi热点的名称了,如果你手机或者其它移动设备连上了,控制台里面是可以看到输出的,当然,这个时候仍然不能上网。按Ctrl+C退出。

配置NAT转发

(1)在内核中启动IP转发

sudo sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'

修改 /etc/sysctl.conf文件

sudo leafpad /etc/sysctl.conf

在文件的最后一行加上

net.ipv4.ip_forward=1

(2)定义IP转发规则

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"

(3)再次修改 /etc/network/interfaces文件

sudo leafpad /etc/network/interfaces

在最后一行加上

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

到此为止,基本的配置已经全部完成了。上面的过程跟网上的其它人的教程其实区别不大。网上的教程到这里一般会是设置开机启动了,但是现在还没到时候。

最后一步

增加一个shell脚本start.sh

cd ~/Programs
leafpad start.sh

在里面输入以下内容

#! /bin/sh
# fisrt give eth0 access to internet, the delay is a must
mentohust &
sleep 30

# start hostapd & udhcpd service
# the two services need time to start, so you need delay
sudo service hostapd start
sudo service udhcpd start
sleep 100

# give wlan0 a static ip
sudo ifconfig wlan0 192.168.0.1

更改一下文件的权限

chmod 777 start.sh

把上面的文件加入到启动项,

sudo leafpad /etc/rc.local

确保一定要在exit 0 前面加上文件的绝对地址

/home/pi/Programs/start.sh

OK,现在一切都over了,只要上电,过二分钟后就可以直接上网了。我尝试过,在线放蓝光都不卡。

这里说明一下为什么自己加了一个启动项,因为如果把前面说到的mentohust, hostapd,udhcpd全部一起添加到启动项后,wifi热点刚开始的几秒钟可以上网,但是过了一会发现wlan0的static ip没有了,如果此时你manually set a static ip,奇怪的是连上的client又可以上网了。上面一个脚本解决了这个问题,注意延时是有必要的,而且时间还真得这么长,更短的读者可以自己去尝试了。

参考文献

http://wangye.org/blog/archives/845/
http://blog.csdn.net/xukai871105/article/details/42497097
https://frillip.com/using-your-raspberry-pi-3-as-a-wifi-access-point-with-hostapd/

你可能感兴趣的:(网络相关,raspberry,pi,路由器,网卡)