准备工作
- Raspberry Pi一块
- 要求已经刷写好了Raspbian系统,关于系统的刷写/无显示器配置这种事情,请参照这里,这里不想多说。
- USB无线网卡一枚,一个合格的USB无线网卡最好是不用USB HUB就能稳定运作的,插上之后,在终端机中输入
ifconfig
输出内容中应该有出现wlan0
字样。- 无论你有没有现成的USB无线网卡,都请查看USB无线网卡对RPi兼容性列表来确定自己的USB无线网卡是不是支持RPi,如果是杂牌的话,要想办法看到自己的USB无线网卡的芯片型号,然后对照这个表里面有同样型号的无线网卡的兼容性说明。如果你现在无线网卡的芯片在这个表里面不是针对Raspbian out of box的,买买买,不要停~
- AP功能是一定要有的,如果有11n的话更好(后面会讲如何设置),目前来说直到RPi 2 Model B都没有实装USB 3.0所以没有必要买ac的无线网卡。
- 我用的是Tenda W311U+,这款有个天线,不过貌似也没啥太大的效果,用起来蛮稳定,速度一般(即使打开了11n机能)
- 外网,这篇教程针对的是没有认证的,原生支持IPv6的教育网,有固定IP。
- 如果你的网络需要认证客户端的话,可以找个借口(用mac什么的)把认证取消,取消不了的话。。。别折腾了~(当然如果你真想折腾,openwrt社区里面会有dalao提供linux的模拟验证客户端,但是这个不在本文讨论之列)
- 如果你是ADSL用户,本文没有拨号设定,IPv6也需要tunnel,这种情况,建议移步这里
- 如果你不想折腾IPv6有关机能,忽略本文的IPv6部分即可,同样的,不想开11n的话,也可以忽略本文的11n设定部分。
- 确定你的有线无线网卡代号,在终端机中输入
ifconfig
就可以看到当前连接的所有网络接口,有线网络一般是eth开头,RPi的自带网卡一般是eth0,你连接的无线网卡一般是wlan开头,只插一个的话就是wlan0,这个是给内网用的。下文中的eth0和wlan0就是这么来的,如果不一样的话请自行翻译~
开工!先来配置IPv4无线路由
配置网络接口
在终端机中输入sudo emacs /etc/network/interfaces
打开网络接口配置文件,狂按Ctrl+k清除全部内容,然后写入一下内容,完成后按Control+x,Control+c,y保存退出(放弃更改的话Ctrl+x,Ctrl+c,n,yes<换行键>)。
配置好之后,随便ping个网站看看能不能通外网,可以的话继续~
配置外网DNS
终端机中输入sudo emacs /etc/resolv.conf
,在里面按下面的样子加上你需要的DNS地址
安装必要的软件包
这里假定你已经可以流畅的链接你的apt软件源了,如果官方源慢的要死就需要换源了,换源教程在这里。
按你的需要在终端机中(有选择性地)输入如下命令:
编译工具
即便装了一堆也有可能发生有软件包装不了的情况,不过本文提到的需要编译的软件基本都能过。
编辑器
这俩选一个,或者都不选用系统自带地nano,我用emacs,我不想挑起战争~
AP与IPv4机能
IPv6机能
软件包
本文使用NPD Proxy和DHCPV6实现IPv6机能。
编译安装npd6
配置hostapd以使用无线网卡软AP
在终端机中输入sudo emacs /etc/default/hostapd
,打开之后找DAEMON_CONF=""
,把这行首的#
去掉,然后把这句话改成DAEMON_CONF="/etc/hostapd/hostapd.conf"
,保存退出。
在终端机输入sudo mkdir /etc/hostapd
,然后sudo emacs /etc/hostapd/hostapd.conf
,把文件内容(有的话清除,没有的话就从头写)改成(请仔细看注释有选择性地写~):
打开系统的IPv4转发功能
在终端机中输入sudo emacs /etc/sysctl.conf
,直接在文件头写入以下内容:
然后退出回到终端机输入sudo sysctl -q
让修改立即生效。
配置DHCP服务器实现内网IPv4地址自动分配
终端机中输入sudo emacs /etc/udhcpd.conf
,你需要去掉下面这些行首的#
来解除注释,然后按照自己的配置方法修改,注意要和interfaces文件里面wlan0的地址设定一致:
写一个bash脚本来一键打开无线路由机能,开机自动启动
在终端机输入emacs ~/router.sh
,接下来写入:
保存,然后修改一下权限让他可以执行,输入sudo chmod 755 ~/router.sh
就可以了。
接下来输入sudo emacs /etc/rc.local
,在文件的末尾的exit 0
这行上面,添加sudo /home/pi/router.sh
保存退出。
重启测试
输入sudo reboot
,不出意外的话重启之后你的设备可以正常连接你创建的无线网络上网了,802.11g,仅支持IPv4网络。
接下来会将IPv6和802.11n机能的开启,如果你有需要的话可以继续阅读。
配置IPv6实现无线双栈网络
查询外网IPv6地址和网关
Mac下可以插有线网络的话直接在设置里查看就可以了,Windows的话,命令行中输入ipconfig -all
,如果你直接在RPi上看,终端机输入ifconfig
就够了。纪录2001开头的IPv6地址和网关地址(我这里是fe80开头,有的情况下是2001开头,这个没关系,网关显示什么就记下来什么),Windows下IPv6地址后面可能会显示/64
这个是prefix长度,这个也要记下来。
修改sysctl.conf打开IPv6转发
终端机中输入sudo emacs /etc/sysctl.conf
,然后添加:
改写router.sh,加入IPv6配置信息
在终端机输入emacs ~/router.sh
,接下来写入:
注意,上面这些东西加在service这行前面,上面这5行中,2001:250:3000:3cc6:ba27:ebff:fee6:ce6c是我查到的公网IPv6地址,这个要原样打进去,/64和/126也不能变(除非你的网络非常特殊,64可能要改成你查到的perfix长度,126是不能动的,防止错乱),接下来2001:250:3000:3cc6:1::/80这个是你内网用的IPv6地址,前面四段要和你查到的公网地址保持一致,后面的那一段是你的内网网段,填1就可以了(当然你换什么填什么),接下来那个fe80开头的地址换成你查到的网关地址,这样就搞定了。
配置radvd
radvd的作用是使内网客户端能自动获取IPv6地址。终端机中输入sudo emacs /etc/radvd.conf
然后写入:
注意上面的2001开头地址要换成你刚才设定好的内网地址。
配置npd6
npd6是邻居发现代理,是让内网客户端可以自动获取IPv6地址的。终端机中输入sudo emacs /etc/npd6.conf
然后写入:
原文件中可能会用好多注释,不过没关系你只要对照上面把有效部分修改好就行了,注意2001开头那个地址要填你自己的
配置DHCPv6
DHCP是啥不用我多说了吧。终端机中输入sudo emacs /etc/wide-dhcpv6/dhcp6s.conf
然后写入:
重启测试
sudo reboot
,IPv6配置至此结束,没有异常的话在这里应该可以看到下图了吧。
配置802.11n机能
检查无线网卡支持哪些802.11n机能
在终端机中输入iw list | less
之后你应该会看到一堆,我们只关注开头Capabilities的这部分,一般长得像这样:
你要把这一段记下来,之后按q键结束。
修改hostapd配置文件增加802.11n机能支持
sudo emacs /etc/hostapd/hostapd.conf
然后修改两行:
你去要重点关照的就是ht_capab这一行,这一行输入的越全面,你得到的速度就越快。
我在下面引用了官方文档的配置802.11n的部分,你可以对照这个和记好的iw list
数据决定填什么,填好之后保存。sudo service hostapd reboot
如果提示成功,说明配置没有问题,这个时候应该可以享受到高速度了,如果FAIL了,请仔细检查ht_capab是不是填写错了,如果实在不行,就删掉不确定的项,牺牲一些速度吧。
hostapd详细的配置方法可以参照官方文档,其实hostapd可以支持802.11ac的,但是问题在于USB2.0的传输速率使得在RPi上用ac没有意义。
收工
至此本文的目的已经达到,have fun!
本文系hahaschool原创,转载必须注明出处。