从零开始,把Raspberry Pi打造成双栈11n无线路由器,支持教育网原生IPv6
从零开始,把Raspberry Pi打造成双栈11n无线路由器,支持教育网原生IPv6
从零开始,把Raspberry Pi打造成双栈11n无线路由器,支持教育网原生IPv6
准备工作
- 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<换行键>)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
auto lo
iface lo inet loopback
iface eth0 inet static #如果你的IP是自动分配的,把static改成dhcp,然后去掉下面三行就可以了
address 125.216.249.000 #改成学校给你的固定IP
netmask 255.255.255.0 #学校给你的子网掩码
gateway 125.216.249.254 #学校给你的网关
iface eth0 inet6 manual #IPv6设定,不管他
iface wlan0 inet static
address 10.0.0.1 #内网网关(可以理解成路由器)地址,也可以写成192.168.1.1什么的,那样的话本文后面的部分你也要做相应的改动了。
netmask 255.255.255.0 #内网子网掩码,虽然是A段网络,但RPi显然没有NB到能拖那么多设备,所以三个255就够用。
iface wlan0 inet6 manual #IPv6设定,不管他
|
配置好之后,随便ping个网站看看能不能通外网,可以的话继续~
配置外网DNS
终端机中输入sudo emacs /etc/resolv.conf
,在里面按下面的样子加上你需要的DNS地址
1
2
3
4
|
nameserver 222.201.130.30
nameserver 222.201.130.33
nameserver 8.8.8.8
nameserver 114.114.114.114
|
安装必要的软件包
这里假定你已经可以流畅的链接你的apt软件源了,如果官方源慢的要死就需要换源了,换源教程在这里。
按你的需要在终端机中(有选择性地)输入如下命令:
编译工具
1
|
sudo apt-get install subversion git build-essential autotools-dev autoconf libtool gettext gawk gperf cmake
|
即便装了一堆也有可能发生有软件包装不了的情况,不过本文提到的需要编译的软件基本都能过。
编辑器
1
|
sudo apt-get install vim emacs
|
这俩选一个,或者都不选用系统自带地nano,我用emacs,我不想挑起战争~
AP与IPv4机能
1
|
sudo apt-get install udhcpd hostapd iptables wireless-tools
|
IPv6机能
软件包
1
|
sudo apt-get install radvd wide-dhcpv6-server
|
本文使用NPD Proxy和DHCPV6实现IPv6机能。
编译安装npd6
1
2
3
4
5
|
cd ~
sudo git clone https://github.com/npd6/npd6 npd6
cd npd6
sudo make
sudo make install
|
配置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
,把文件内容(有的话清除,没有的话就从头写)改成(请仔细看注释有选择性地写~):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
#这里是无线网卡的代号
interface=wlan0
#这个一般不用改,除非你的无线网卡比较奇葩要单独指定驱动,大部分无线网卡驱动都是基于下面这个的
driver=nl80211
#无线网络名称
ssid=744 Experimental
#这个不用改
hw_mode=g
#这个如果不开11n的话,可以改一个不太拥挤的信道提高链接速度
channel=11
#这个不用改
auth_algs=3
#这个不用改
dtim_period=1
#下面这个去掉会增加速度但是降低稳定性
rts_threshold=2347
#下面这个去掉会增加速度但是降低稳定性
fragm_threshold=2346
#这个不用改
ignore_broadcast_ssid=0
#网络加密模式,0就是没有,1是WPA,2是WPA2,3是两个全开
wpa=3
#WIFI密码
wpa_passphrase=hahaschool
#这个不用改
wpa_key_mgmt=WPA-PSK
#wpa那个填1的话要去掉一个
wpa_pairwise=TKIP
rsn_pairwise=CCMP
#WMM机能,不知道是什么的话开着就行
wmm_enabled=1
#MAC地址黑白名单,本文不介绍这个机能
macaddr_acl=0 #for filtering make this 1 and decomment below and create two lists
#accept_mac_file=/etc/hostapd/hostapd.accept
#deny_mac_file=/etc/hostapd/hostapd.deny
#下面这两项是11n机能相关的,写不对会导致hostapd打不开,先不要写进去
ieee80211n=1
ht_capab=[HT40-][SHORT-GI-40][SHORT-GI-20][GF][SMPS-STATIC][RX-STBC1]
|
打开系统的IPv4转发功能
在终端机中输入sudo emacs /etc/sysctl.conf
,直接在文件头写入以下内容:
1
2
3
|
net.ipv4.conf.all.forwarding=1
net.ipv4.conf.default.rp_filter=1
net.ipv4.ip_forward=1
|
然后退出回到终端机输入sudo sysctl -q
让修改立即生效。
配置DHCP服务器实现内网IPv4地址自动分配
终端机中输入sudo emacs /etc/udhcpd.conf
,你需要去掉下面这些行首的#
来解除注释,然后按照自己的配置方法修改,注意要和interfaces文件里面wlan0的地址设定一致:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
# Sample udhcpd configuration file (/etc/udhcpd.conf)
# The start and end of the IP lease block
#在这里设定你内网IP的起点与终点
start 10.0.0.11 #default: 192.168.0.20
end 10.0.0.40 #default: 192.168.0.254
# The interface that udhcpd will use
#这里改成内网链接使用的网卡,我们这里要改成wlan0
interface wlan0 #default: eth0
# The maximim number of leases (includes addressesd reserved
# by OFFER's, DECLINE's, and ARP conficts
#建议改小点,太大当心爆炸~
max_leases30#default: 254
# If remaining is true (default), udhcpd will store the time
# remaining for each lease in the udhcpd leases file. This is
# for embedded systems that cannot keep time between reboots.
# If you set remaining to no, the absolute time that the lease
# expires at will be stored in the dhcpd.leases file.
#这个随意,我没觉得有太大作用,可能是我从来不掉电的缘故,如果你的RPi老掉电就改成yes吧
remainings no #default: yes
###########################
#中间有一堆被注释掉的内容
###########################
#Examles
#DNS这里最多填两个
opt dns 114.114.114.114 8.8.8.8
#子网掩码
optionsubnet255.255.255.0
#网关地址,就是你inerfaces里面给wlan0指定的IP地址
opt router10.0.0.1
#这个找一个内网地址段以外的地址填就好,也可以不配置
opt wins10.0.0.10
#神奇的功能,可以默认第三个DNS,如果你有这个需要可以再来一个(我是114+google+校园网内DNS,这样什么网站都可以正常解析)
optiondns 222.201.130.30# appened to above DNS servers for a total of 3
#接下来的是作用域和租期时间,不懂就不要改了
optiondomainlocal
optionlease 864000# 10 days of seconds
|
写一个bash脚本来一键打开无线路由机能,开机自动启动
在终端机输入emacs ~/router.sh
,接下来写入:
1
2
3
4
5
|
sysctl -p
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
service udhcpd restart
|
保存,然后修改一下权限让他可以执行,输入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
,然后添加:
1
2
|
net.ipv6.conf.all.proxy_ndp=1
net.ipv6.conf.all.forwarding=1
|
改写router.sh,加入IPv6配置信息
在终端机输入emacs ~/router.sh
,接下来写入:
1
2
3
4
5
6
7
8
|
ip -6 addr del 2001:250:3000:3cc6:ba27:ebff:fee6:ce6c/64 dev eth0
ip -6 addr add 2001:250:3000:3cc6:ba27:ebff:fee6:ce6c/126 dev eth0
ip -6 addr add 2001:250:3000:3cc6:1::/80 dev wlan0
ip -6 route add default via fe80::204:96ff:fe20:add6 dev eth0 metric 256
ip -6 route add 2001:250:3000:3cc6:1::/80 dev wlan0
service radvd restart
service npd6 restart
|
注意,上面这些东西加在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
然后写入:
1
2
3
4
5
6
7
8
9
10
11
|
interface wlan0
{
AdvSendAdvert on;
AdvManagedFlag on;
AdvOtherConfigFlag on;
prefix 2001:250:3000:3cc6:1::/80 {
AdvRouterAddr off;
AdvOnLink on;
AdvAutonomous on;
};
};
|
注意上面的2001开头地址要换成你刚才设定好的内网地址。
配置npd6
npd6是邻居发现代理,是让内网客户端可以自动获取IPv6地址的。终端机中输入sudo emacs /etc/npd6.conf
然后写入:
1
2
3
4
5
6
7
8
9
10
11
|
prefix=2001:250:3000:3cc6:1:
interface = eth0
ralogging = off
listtype = none
listlogging = off
collectTargets = 100
linkOption = false
ignoreLocal = true
routerNA = true
maxHops = 255
pollErrorLimit = 20
|
原文件中可能会用好多注释,不过没关系你只要对照上面把有效部分修改好就行了,注意2001开头那个地址要填你自己的
配置DHCPv6
DHCP是啥不用我多说了吧。终端机中输入sudo emacs /etc/wide-dhcpv6/dhcp6s.conf
然后写入:
1
2
3
4
5
6
|
interface wlan0{
address-pool pool1 86400;
};
pool pool1 {
range 2001:250:3000:3cc6:1::200 to 2001:250:3000:3cc6:1::300;
};
|
重启测试
sudo reboot
,IPv6配置至此结束,没有异常的话在这里应该可以看到下图了吧。
配置802.11n机能
检查无线网卡支持哪些802.11n机能
在终端机中输入iw list | less
之后你应该会看到一堆,我们只关注开头Capabilities的这部分,一般长得像这样:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
Wiphy phy0
Band 1:
Capabilities: 0x172
HT20/HT40
Static SM Power Save
RX Greenfield
RX HT20 SGI
RX HT40 SGI
RX STBC 1-stream
Max AMSDU length: 3839 bytes
No DSSS/CCK HT40
Maximum RX AMPDU length 65535 bytes (exponent: 0x003)
Minimum RX AMPDU time spacing: 2 usec (0x04)
HT RX MCS rate indexes supported: 0-7, 32
TX unequal modulation not supported
HT TX Max spatial streams: 1
HT TX MCS rate indexes supported may differ
|
你要把这一段记下来,之后按q键结束。
修改hostapd配置文件增加802.11n机能支持
sudo emacs /etc/hostapd/hostapd.conf
然后修改两行:
1
2
|
ieee80211n=1
ht_capab=[HT40-][SHORT-GI-40][SHORT-GI-20][GF][SMPS-STATIC][RX-STBC1]
|
你去要重点关照的就是ht_capab这一行,这一行输入的越全面,你得到的速度就越快。
我在下面引用了官方文档的配置802.11n的部分,你可以对照这个和记好的iw list
数据决定填什么,填好之后保存。sudo service hostapd reboot
如果提示成功,说明配置没有问题,这个时候应该可以享受到高速度了,如果FAIL了,请仔细检查ht_capab是不是填写错了,如果实在不行,就删掉不确定的项,牺牲一些速度吧。
hostapd详细的配置方法可以参照官方文档,其实hostapd可以支持802.11ac的,但是问题在于USB2.0的传输速率使得在RPi上用ac没有意义。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
##### IEEE 802.11n related configuration ######################################
# ieee80211n: Whether IEEE 802.11n (HT) is enabled
# 0 = disabled (default)
# 1 = enabled
# Note: You will also need to enable WMM for full HT functionality.
#ieee80211n=1
# ht_capab: HT capabilities (list of flags)
# LDPC coding capability: [LDPC] = supported
# Supported channel width set: [HT40-] = both 20 MHz and 40 MHz with secondary
# channel below the primary channel; [HT40+] = both 20 MHz and 40 MHz
# with secondary channel above the primary channel
# (20 MHz only if neither is set)
# Note: There are limits on which channels can be used with HT40- and
# HT40+. Following table shows the channels that may be available for
# HT40- and HT40+ use per IEEE 802.11n Annex J:
# freq HT40- HT40+
# 2.4 GHz 5-13 1-7 (1-9 in Europe/Japan)
# 5 GHz 40,48,56,64 36,44,52,60
# (depending on the location, not all of these channels may be available
# for use)
# Please note that 40 MHz channels may switch their primary and secondary
# channels if needed or creation of 40 MHz channel maybe rejected based
# on overlapping BSSes. These changes are done automatically when hostapd
# is setting up the 40 MHz channel.
# Spatial Multiplexing (SM) Power Save: [SMPS-STATIC] or [SMPS-DYNAMIC]
# (SMPS disabled if neither is set)
# HT-greenfield: [GF] (disabled if not set)
# Short GI for 20 MHz: [SHORT-GI-20] (disabled if not set)
# Short GI for 40 MHz: [SHORT-GI-40] (disabled if not set)
# Tx STBC: [TX-STBC] (disabled if not set)
# Rx STBC: [RX-STBC1] (one spatial stream), [RX-STBC12] (one or two spatial
# streams), or [RX-STBC123] (one, two, or three spatial streams); Rx STBC
# disabled if none of these set
# HT-delayed Block Ack: [DELAYED-BA] (disabled if not set)
# Maximum A-MSDU length: [MAX-AMSDU-7935] for 7935 octets (3839 octets if not
# set)
# DSSS/CCK Mode in 40 MHz: [DSSS_CCK-40] = allowed (not allowed if not set)
# 40 MHz intolerant [40-INTOLERANT] (not advertised if not set)
# L-SIG TXOP protection support: [LSIG-TXOP-PROT] (disabled if not set)
#ht_capab=[HT40-][SHORT-GI-20][SHORT-GI-40]
# Require stations to support HT PHY (reject association if they do not)
#require_ht=1
# If set non-zero, require stations to perform scans of overlapping
# channels to test for stations which would be affected by 40 MHz traffic.
# This parameter sets the interval in seconds between these scans. Setting this
# to non-zero allows 2.4 GHz band AP to move dynamically to a 40 MHz channel if
# no co-existence issues with neighboring devices are found.
#obss_interval=0
|
收工
至此本文的目的已经达到,have fun!
本文系hahaschool原创,转载必须注明出处。
Posted on March 22, 2015Categories Linux, Raspberry Pi
Post navigation
从零开始,把Raspberry Pi打造成双栈11n无线路由器,支持教育网原生IPv6相关推荐
- linux支持ipv4v6双栈,JBoss7配置-支持IPv4和IPv6双栈环境
第二部分--项目中针对JBoss配置文件修改的详细介绍 根据如上的介绍,为了使JBoss支持IPv6,我们需要修改JBoss的两个配置文件.其一,修改standalone.xml中接口声明部分和soc ...
- linux双网卡 ipv4 ipv6 双栈,linux ipv4 ipv6双栈 (优先ipv4而不使用ipv6配置)
那个啥,不喜欢看一些背景 分析啥的 直接看红字修改就行了. 其他的都是冗余部分,都是码出来的,其他的地方好像搜不到.经验之谈.避免大家采坑. 在国家网信办推行IPv6的大前提下,进行IPv6改造工作, ...
- 一篇文章让你了解这个基于Raspberry Pi / 树莓派而设计的工业计算机- 2
CM4 Nano是一款基于Raspberry Pi / 树莓派 Compute Module 4(简称CM4),由EDATEC面向工业应用设计的嵌入式计算机, 充分利用CM4在结构上灵活性解决CPU, ...
- Raspberry Pi 4 树莓派4 支持操作系统
2019 年推出以来,Raspberry Pi 4 一直很受欢迎,但它的默认系统一直是 Debian, Fedora 可能会为这款热门的开发板提供官方支持. Raspberry Pi 4 与 Fedo ...
- ipv4v6双栈技术_IPv4/IPv6双栈网络
基本操作 IPv4/IPv6双栈网络的基本操作与之前的IPv4网络相同.只有部分页面的配置参数会略有差异,具体请以管理控制台显示为准. IPv6双栈,当前暂不收费,后续定价会根据运营商收费策略的变化进 ...
- 在Raspberry Pi上安装HDMI-CEC
转自https://www.labno3.com/2021/02/01/using-hdmi-cec-on-a-raspberry-pi/ HDMI-CEC是一种特殊的协议,用于电视与另一个设备通过H ...
- 树莓派支持uvi协议吗_树莓派如何控制电视机,在Raspberry Pi上安装HDMI-CEC
在本教程中,我将展示如何使用HDMI-CEC和树莓派来控制电视. HDMI-CEC是一种特殊的协议,用于电视与另一个设备通过HDMI电缆进行通信.该协议允许电视控制另一个设备,同时也允许该设备控制电视 ...
- 双频并发无线路由器WDS设置
TP-LINK双频并发无线路由器支持2.4GHz和5GHz频段的无线WDS功能,使用无线WDS功能可以起到增强无线信号强度.拓展无线覆盖区域的作用,同时可以避免一般单频无线路由器使用无线WDS功能带来 ...
- SAP PI - 单栈与双栈
在PI初次发布的时候,不是所有的组件都是在同一个平台上构建的.集成引擎和业务处理引擎由ABAP构建,然而适配器引擎.集成构建器.SL.CM和Mapping Runtime由Java构建.因此PI需要J ...
- 龙邱树莓派Raspberry Pi 扩展板电路及其相关实验
▲ 树莓派与其扩展板 文章目录 ▌01 树莓派车模扩展板 1.车模的整体配置 2.扩展板 3.树莓派IO口管脚功能 (1)树莓派接口定义 (2)扩展板上各功能接口定义 ▌02 扩展板子模块 1.树莓派 ...
最新文章
- Best open-source pedestrian detection library for commercial use?
- 关于计算机英语素材,计算机专业英语相关素材.doc
- mybatisplus代码生成器3.5.2
- 再见,金庸;再见,江湖
- 力扣有没有java_【Java】一篇文章带你玩转用Java刷力扣
- attachEvent方法绑定事件
- 编程珠玑 啊哈 算法
- libvlc 裁剪及编译
- html小吃制作,最简单易学的12种小吃的做法|小吃|简单易学
- opencv实现魔幻笔效果
- ajax执行先后顺序
- android ui ue,什么是UI设计,UE设计,二者有什么区别?
- 隐私黑产:2亿余条个人信息卖了2000余万元
- Windows-空硬盘安装系统
- Python知识拓展
- Sublime Text 3默认临时/缓存文件保存位置
- 11.Django基础九之中间件
- 生化奇兵: 无限 设置简体中文和显示对白字幕
- git初始化本地仓库,远程提交远端代码教程
- 如何killtomcat进程_查看并杀掉tomcat进程
热门文章
- html网站背景雪花飘落效果代码,超酷html5雪花飘落特效源码
- 精细化用电侧能源管控 解码光伏电站运维痛点
- SAP ABAP 标题左边 GOS文件菜单 自定义 CL_GUI_GOS_CONTAINER MENU Gos based menu GOS BUTTON
- 集合数据结构线程并发库
- 大鱼吃小鱼小游戏(Java版代码,JavaSwing+多线程+接口)
- Java小游戏实操---大鱼吃小鱼 游戏开发
- 激活win10专业版,桌面设置我的电脑,测试过可行
- 数组常用操作。以逗号隔开、以逗号+单引号隔开、转List等
- PDF怎么修改,怎么给PDF添加页码
- 阅读笔记:3D visual discomfort predictor based on subjective perceived-constraint sparse representation
Leave a Reply