近期新购置了一个树莓派3b。Raspberry Pi 3b 型号自带了无线网卡。考虑到其低能耗的特点,将其改造成基于ipv6+OpenVPN的无线路由器。关键词:无线热点,校园网,ipv6,免流量,OpenVPN,路由器。
Table of Contents
0.序言
之前,陆陆续续搞了挺多东西。有几篇文章甚至谷歌来的点击量很高,许许多多同学也给予了反馈。
[实验2更新]基于openvpn的校园网ipv6免流量方案 |ipv6|校园网|免流量
[手册]天津大学ipv6快速使用指南 V2.0 & 疑难杂症解决
[实验]VPS搭建ss服务中转实现纯ipv6访问网络-校园网免流量
共计4篇文章。
随着时间推进,4篇文章陆陆续续地完善了基于ipv6+OpenVPN的校园网免流量的稳定方案,唯独缺少一个硬件方面的解决方法。
那么,本文就是对对硬件层面的一个补充,从此可以使用一个低能耗的方案实现免流量的无线热点分享,即无线路由器。
另外,本文尽量以一个零基础的操作者的视角,提供完整的步骤说明。不过像是这类文章,都会有一定的时效性,另外根据每个人操作不同,每个人遇到的状况和问题也不尽相同,希望大家自己多多动手,善于运用搜索引擎,相信聪明的你没有解决不了的问题!
1.树莓派基础配置-无显示屏、键盘
在本文需求里,raspberrypi配上显示屏和键盘是多余的。它完全可以作为一个远程linux服务器被配置和维护。
基本的介绍和基本的安装步骤就不说了,说说可能遇到的问题。
1.1 开启 raspbian SSH
raspbian从2016末开始默认关闭了ssh连接。参见
http://downloads.raspberrypi.org/raspbian/release_notes.txt
2016-11-25:
* SSH disabled by default; can be enabled by creating a file with name "ssh" in boot partition
* Prompt for password change at boot when SSH enabled with default password unchanged
* Adobe Flash Player included
* Updates to hardware video acceleration in Chromium browser
* Greeter now uses background image from last set in Appearance Settings rather than pi user
* Updated version of Scratch
* Rastrack option removed from raspi-config and Raspberry Pi Configuration
* Ability to disable graphical boot splash screen added to raspi-config and Raspberry Pi Configuration
* Appearance Settings dialog made tabbed to work better on small screens
* Raspberry Pi Configuration now requires current password to change password
在烧录好的tf卡,根目录下建立一个文件名为“ssh”的文件即可开启raspbian的SSH。
1.2 ssh连接问题
初期配置保持树莓派和登录用设备在同一局域网下即可。方法有许多,可以将你的pc和树莓派都连接至一个路由器下。若没有路由器也可以将pc和树莓派直接连接,在windows下配置网络分享。推荐初期使用路由器。
之后,将树莓派配置为无线路由器后,即可使用WLAN连接,直接连接ssh或者使用vnc管理(raspbian现已自带vncserver)。
windows下推荐使用xshell,对于家庭和教育用户可自由使用。
对于linux用户ssh自然不必多说,使用终端即可登录。
例如chromeos用户,按住ctrl+alt+t进入crosh,输入shell
进入终端,输入ssh pi@局域网地址
即可登录,输入命令logoff
即可关闭ssh连接。
1.3 sudo
raspbian上几乎所有的操作都需要sudo提权。如果发生某些权限不足的错误,检查 是否使用sudo提权
2.无线热点配置
由于树莓派3b自带了无线网卡,因此不必再考虑自购usb无线网卡的选型和兼容性,也不必考虑usb网卡和有线网络带宽占用问题了(也无法考虑)。
配置好无线热点后,连接后可直接ssh登录网关地址管理树莓派,因此优先配置无线热点。
2.1 编辑网络配置
sudo nano /etc/network/interfaces
自带的无线网卡为wlan0,注释掉其配置文件,暂时禁用wlan。
allow-hotplug wlan0 iface wlan0 inet manual wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf 修改为 allow-hotplug wlan0 auto wlan0 iface wlan0 inet static address 192.168.8.1 netmask 255.255.255.0
保存重启,或使用
sudo ifconfig wlan0 192.168.8.1 netmask 255.255.255.0
使wlan0的静态地址立即生效。
这步请一定要做,重启或者使其立即生效,否则配置dhcp时将报错。
如果在用vncserver桌面管理,可以看到wlan0已经被禁用。
*这里顺带一提。在原生ipv6环境下,树莓派自带的软件源可以直接使用,因此对于某些需要登录的认证系统,直接使用ipv6进行更新安装软件会非常方便。
2.2 安装hostapd
sudo apt-get install hostapd
成功安装后,进行hostapd设置。
sudo nano /etc/hostapd/hostapd.conf
输入以下内容:
interface=wlan0 ssid=RaspberryPi hw_mode=g channel=11 wpa=3 wpa_passphrase=你的密码 wpa_key_mgmt=WPA-PSK wpa_group_rekey=0 max_num_sta=10
注意配置文件格式。自己曾经因为直接复制输入,格式缩进问题导致读取配置文件失败。
保存后,启动hostapd
sudo hostapd /etc/hostapd/hostapd.conf
成功后能搜索到新建立的无线热点
然后配置hostapd默认配置文件,使其开机启动
sudo nano /etc/default/hostapd
添加以下配置,即刚刚配置好的配置文件
DAEMON_CONF="/etc/hostapd/hostapd.conf"
保存后重启树莓派,检查热点是否自动启动。
2.3 安装isc-dhcp-server
之前的配置,可以看到自建的raspberrypi热点。但是无法获取ip地址,需要安装dhcp服务以分配地址
安装isc-dhcp-server
sudo apt-get install isc-dhcp-server
配置文件
sudo nano /etc/dhcp/dhcpd.conf
注释掉所有或者删除所有文字,输入
subnet 192.168.8.0 netmask 255.255.255.0 { range 192.168.8.10 192.168.8.25; option routers 192.168.8.1; option broadcast-address 192.168.8.255; option domain-name-servers 114.114.114.114,8.8.8.8; default-lease-time 600; max-lease-time 7200; }
注意,网段如 192.168.8.X,应和上端配置的wlan静态地址一致。
开启服务
sudo service isc-dhcp-server start
现在,应该能正常链接raspberrypi热点,但是不能连入互联网。
一般情况下,之前的安装的服务,不需要在配置,已经可以开机自启动了。
2.4 开启转发、配置路由表
开启内核转发
sudo nano /etc/sysctl.conf
修改
net.ipv4.ip_forward=1
保存,用下列命令使命令生效
sudo sysctl -p
返回 net.ipv4.ip_forward=1
配置路由表
sudo iptables -A FORWARD -i wlan0 -j ACCEPT sudo iptables -A FORWARD -o wlan0 -j ACCEPT sudo iptables -t nat -A POSTROUTING ! -o wlan0 -j MASQUERADE
此路由表的配置参考了
树莓派笔记(1) —— 无线路由器 - http://brieflyx.me/2015/raspberrypi/rpinote1-wifi/
以上规则配置openvpn后仍然有效。
可以加在/etc/rc.local 中,开机自动添加路由规则
!注意!:请一定在exit 0之前添加
sudo nano /etc/rc.local #在exit 0之前加入 sudo iptables -A FORWARD -i wlan0 -j ACCEPT sudo iptables -A FORWARD -o wlan0 -j ACCEPT sudo iptables -t nat -A POSTROUTING ! -o wlan0 -j MASQUERADE
现在,连接到树莓派的无线热点,即可正常连接互联网。
2.5 排查问题
遇到任何问题,包括之前的服务配置,都可以使用
sudo nano /var/log/syslog
调到最后一行查看,分析原因
3.openvpn相关
即完全等同于在linux上运行openvpn。
本文涉及ipv6.目前笔者在家里没有ipv6环境,所以图片等具体资料有待开学后大量更新
ipv6服务端的搭建可以参见
[实验2更新]基于openvpn的校园网ipv6免流量方案 |ipv6|校园网|免流量
具体校园网ipv6免流量的原理可以参见
[实验]VPS搭建ss服务中转实现纯ipv6访问网络-校园网免流量
3.1 安装openvpn
sudo apt-get install openvpn
3.2 openvpn配置
sudo openvpn --config /etc/openvpn/client.ovpn
填配置文件的绝对地址。
关于校园网如何使用openvpn免流量上网,可以参见我的另一篇文章。
[实验2更新]基于openvpn的校园网ipv6免流量方案 |ipv6|校园网|免流量
会占用一个终端,可以使用screen等使其持续运行。
如果你安装了可视化界面,你可以使用终端模拟器运行。
个人意见,不建议将openvpn加入开启自启动,就我个人而言还是自己手动打开比较易于维护,因为有时候我拿它挂机PT。而且uptime可以达到一周左右,手动重启工作量不大。
3.3 典型的配置完成环境
ifconfig可查看网络状态信息
在原生ipv6的校园网环境下,表现为以下状态
连接openvpn后
pi@raspberrypi:~ $ ifconfig eth0 Link encap:Ethernet HWaddr b8:27:eb:1d:d7:64 inet addr:172.25.83.* Bcast:172.25.87.255 Mask:255.255.248.0 inet6 addr: fe80::d042:d896:6e0c:6094/64 Scope:Link inet6 addr: 2403:ac00:0:4001::3:b4bb/128 Scope:Global UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:402869 errors:0 dropped:42640 overruns:0 frame:0 TX packets:325119 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:180590802 (172.2 MiB) TX bytes:67559280 (64.4 MiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:7001 errors:0 dropped:0 overruns:0 frame:0 TX packets:7001 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:1382924 (1.3 MiB) TX bytes:1382924 (1.3 MiB) tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:10.8.0.14 P-t-P:10.8.0.13 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:330231 errors:0 dropped:0 overruns:0 frame:0 TX packets:318193 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:160765688 (153.3 MiB) TX bytes:26820264 (25.5 MiB) wlan0 Link encap:Ethernet HWaddr b8:27:eb:48:82:31 inet addr:192.168.8.1 Bcast:192.168.8.255 Mask:255.255.255.0 inet6 addr: fe80::ab0e:4286:e3e5:82f6/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:389258 errors:0 dropped:35 overruns:0 frame:0 TX packets:186335 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:55860645 (53.2 MiB) TX bytes:193535158 (184.5 MiB)
哈哈,也不必在我ip上动小心思了,肯定早已变化了。
4.优化
4.1 uptime
按一个月产生300GB流量,一般此方案uptime为一星期。
若散热不好或者电源不足,有可能进程中止。可以加散热肋片改善机器运行环境。
4.2 添加监视脚本保持hostapd运行
有时,由于电源供电不足,设备温度过高,有可能导致hostapd意外终止,因此使用监视脚本,一旦down掉就立刻重启服务,以维持稳定性。
sudo nano /home/pi/keepalive.sh
#!/bin/bash sudo pgrep hostapd &> /dev/null if [ $? -gt 0 ] then sudo echo "`date` hostapd is stop" sudo service hostapd start sudo service isc-dhcp-server start else sudo echo "`date` hostapd is running" fi
可以手动终止hostapd,运行脚本检查是否功能正常
sudo bash /home/pi/keepalive.sh
然后修改权限
sudo chmod 777 /home/pi/keepalive.sh
添加至crontab使脚本定时运行
sudo crontab -e
# For more information see the manual pages of crontab(5) and cron(8) # # m h dom mon dow command */5 * * * * /home/pi/keepalive.sh
ok,以后树莓派会自己每5分钟检测一次hostapd有没有挂掉。如果挂了,就启动服务。
实际运行中发现, hostapd一旦down掉,无法用service restart启动,原因目前未知。而且一旦添加该脚本,hostapd一定会在1天内down掉。原因待排查
做了No.005 解决问题,详见:
https://steinslab.io/archives/1211
4.3 todolist
1.添加进程守护,维护hostapd、dhcp服务器、openvpn的正常运行,或者定期自动重启维护
2.利用树莓派天生的GPIO功能,外部连接1602屏幕快速监视网络状态信息。(已经实现)
参见
https://steinslab.io/archives/1164
5.参考链接
[2] 树莓派笔记(1) —— 无线路由器 - http://brieflyx.me/2015/raspberrypi/rpinote1-wifi/
[4] 理解Linux系统/etc/init.d目录和/etc/rc.local脚本 - http://blog.csdn.net/acs713/article/details/7322082
配置isc-dhcp-server这里
subnet 192.168.8.0 netmask 255.255.255.0 {
range 192.168.8.10 192.168.8.25;
option routers 192.168.8.1;
option broadcast-address 192.168.8.255;
option domain-name-servers 114.114.114.114,8.8.8.8;
default-lease-time 600;
max-lease-time 7200
}
最后7200后面 也应该有分号
@杀哥 感谢反馈!!当时写文章疏忽了非常抱歉!!
@SPtuan 嗯嗯,不客气。应该要感谢你的分享
我是用creat_ap开的热点
@莫斯利安打怪兽 有不定期失效的情况吗
@SPtuan 没有诶,看样子真的是硬件问题了2333
@莫斯利安打怪兽 你的是树莓派3b吗?反正我的板子一开AP就有问题
[…] [趴会儿project]No.003 基于树莓派的ipv6+OpenVPN校园网免流量无线热点/路由器 […]
[…] 基于树莓派的ipv6+OpenVPN校园网免流量无线热点/路由器 — https://steinslab.xyz… […]
厉害了学长
@匿名 愿你享受舒适的网络生活
666
@大树 至今使用S60,不愧信徒
666
淘宝淘的吗?想上官网买那种正正规规的,可惜没有 PayPal ……
顺便问一下树莓派有 3B+ 型号的吗?
@初夏阳光 在官网没有看到3b+这种型号,只有3b。另外国内e络盟什么代理的都是正规渠道吧,直接淘宝就行。Made in China 和 Made in UK 区别是UK版贵了运回来的运费
厉害了
@帅气的可乐 小崔啊,学坏了你啊,你戴上