Steins;Lab

某团的自留研究所

[趴会儿project]No.003 基于树莓派的ipv6+OpenVPN校园网免流量无线热点/路由器

近期新购置了一个树莓派3b。Raspberry Pi 3b 型号自带了无线网卡。考虑到其低能耗的特点,将其改造成基于ipv6+OpenVPN的无线路由器。关键词:无线热点,校园网,ipv6,免流量,OpenVPN,路由器。

 

0.序言

之前,陆陆续续搞了挺多东西。有几篇文章甚至谷歌来的点击量很高,许许多多同学也给予了反馈。

[实验2更新]基于openvpn的校园网ipv6免流量方案 |ipv6|校园网|免流量

[手册]天津大学ipv6快速使用指南 V2.0 & 疑难杂症解决

[实验]VPS搭建ss服务中转实现纯ipv6访问网络-校园网免流量

[项目实验]427宿舍质量跃享计划-第一期-网络篇

 

共计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 解决问题,详见:

[趴会儿project]No.005 用一种“新思路”打造树莓派软无线路由器

 

4.3 todolist

1.添加进程守护,维护hostapd、dhcp服务器、openvpn的正常运行,或者定期自动重启维护

2.利用树莓派天生的GPIO功能,外部连接1602屏幕快速监视网络状态信息。(已经实现)

参见

[趴会儿Project]No.004 洞察秋毫的观测者 – 服务器监控助手(基于PHP探针和Raspberry Pi)

 

 


5.参考链接

 

[1] openvpn官方文档-linux下配置客户端 – https://openvpn.net/index.php/access-server/docs/admin-guides/182-how-to-connect-to-access-server-with-linux-clients.html

[2] 树莓派笔记(1) —— 无线路由器 – http://brieflyx.me/2015/raspberrypi/rpinote1-wifi/

[3] [Raspberry Pi 3] 多了WiFi,價格不變,輕鬆打造隨身無線基地台 – http://blog.itist.tw/2016/03/using-raspberry-pi-3-as-wifi-ap-with-raspbian-jessie.html

[4] 理解Linux系统/etc/init.d目录和/etc/rc.local脚本 – http://blog.csdn.net/acs713/article/details/7322082

 

0 0 vote
Article Rating
Subscribe
提醒
guest
18 评论
最新
最旧 得票最多
Inline Feedbacks
View all comments
杀哥
杀哥
2 年 之前

配置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后面 也应该有分号

杀哥
杀哥
Reply to  SPtuan
2 年 之前

嗯嗯,不客气。应该要感谢你的分享 :mrgreen:

莫斯利安打怪兽
莫斯利安打怪兽
2 年 之前

我是用creat_ap开的热点 :evil:

莫斯利安打怪兽
莫斯利安打怪兽
Reply to  SPtuan
2 年 之前

没有诶,看样子真的是硬件问题了2333

trackback
3 年 之前

[…] [趴会儿project]No.003 基于树莓派的ipv6+OpenVPN校园网免流量无线热点/路由器 […]

trackback
3 年 之前

[…] 基于树莓派的ipv6+OpenVPN校园网免流量无线热点/路由器 — https://steinslab.xyz… […]

匿名
匿名
3 年 之前

厉害了学长

大树
大树
3 年 之前

666

匿名
匿名
3 年 之前

666

初夏阳光
3 年 之前

:smile: 淘宝淘的吗?想上官网买那种正正规规的,可惜没有 PayPal ……
顺便问一下树莓派有 3B+ 型号的吗? :idea:

帅气的可乐
帅气的可乐
3 年 之前

厉害了 :evil:

18
0
Would love your thoughts, please comment.x
()
x