树莓派 Zero W——随身钥匙扣
前言
原创文章,转载引用务必注明链接。水平有限,如有疏漏,欢迎指正。
本文使用Markdown写成,为获得更好的阅读体验和正确的格式显示,请访问我的博客原文:
http://www.cnblogs.com/sjqlwy/p/zero_w_server
由于最近比较忙,就不详述介绍了,直奔主题,想要更多了解zero_w的可以查看别人的分享。
1、 What Do I Want?
前段时间例行重装系统,突然发现,不管如何过了一段时间电脑里面就会出来一堆软件残留或者系统垃圾,作为一个有轻度洁癖的强迫症电脑使用者,突发奇想,可不可以把一些软件放在随身小服务器上,即插即用。如此想了一下,列出大致需求:
随身服务器要求:
- 体积小
- 功耗低
- 供电方便(使用MicroUSB供电,则可以方便地使用通用数据线由连接电脑或者充电宝)
- 具备蓝牙BLE(设想通过BLE设备与主机组网,4.x以上蓝牙功耗低、传输距离远、传输速率可以接受;可选Wifi,无需Ethernet接口)
- 性能够用
- 主流操作系统及mainline kernel支持
2、Why RPi Zero W?
明确了对随身服务器的硬件要求,查阅市面上常见的开发板目录,最后筛选出以下几块开发板:
-
完美符合所有硬件要求,尺寸稍大。操作系统支持完善。
~¥200;单核1GHz ARM CPU | 512MB | -
友善之臂良心企业,采用全志H3方案,发热稍大,尺寸超讨喜。操作系统支持尚可。
~¥169;四核1.2GHz ARM CPU | 512MB | 8GB eMMC | 需要外置天线 -
体积小巧,性能优异,功耗极低,Intel品质保证。操作系统支持一般。
~¥599,推荐选择DFRobot出品的IO拓展板;单核500MHz x86 CPU | 1G | 4G eMMC | 没有GPU。 -
性能应该比H3更强,但是多的HDMI接口其实用不到。设计还是不如NanoPi大胆,不过比落入窠臼的BananaPi强多了。但是因为个人原因不喜欢OPi,此外他家的软件支持呵呵呵,好在通用资源丰富。
~¥149。四核 ARM CPU | 512MB | 无半载存储 | 自带天线
-
体积稍大,无奈软件驱动支持有待观察。具体性能不知,应该不会很强。具体可参考评测。
~¥69。OPi就是价格杀手,但是我不想买第二次。
注:以上价格仅供参考。
喜好程度:RPi > NanoPi > Edison>OrangePi。原本准备从DFRobot买块基板配合Edison使用,优点在于功耗低、性能强、接口丰富;缺点在于体积稍大、有排针不方便、操作系统只有官方的Yocto比较完善,但是软件包较少。
恰在此时,想起云汉社区有Zero W的试用活动,就抱着试试看的态度申请了一下,没想到次日知会我通过了,第三天就寄到了我手上,很是惊喜。
3、项目方案
- 连接方式多
- Bluetooth
- Wifi
- OTG Cable
- 提供服务广
- AD Blocker(Pi-Hole)
- DNS Accelerate(Pi-Hole?)
- Proxy(***)
- Programming Learning(Python)
- Web Server(Lighthttpd)
- Web Camera(DietPi-Cam)
- Wifi Hotspot
- 控制方便
- Web Control Interface(PHP)
- Physical Control (Via GPIO)
4、Connection Methods
基本就是Zero W上电之后,与主机自动零配置组网,首选蓝牙BLE,适用性强,通过主机共享上网。其次通过Wifi或者MicroUSB数据线与主机连接。
4.1、Bluetooth PAN
Bluetooth Personal Area Networking,蓝牙个人区域网。W与主机蓝牙组网,通过主机共享网络连接。分为主机使用Linux和Windows两种情况,实现过程中遇到了问题,待完成后补充。
4.2、Wifi
需要解决的问题包括W连接路由与主机形成局域网;Zero连接主机共享的无线网;Zero连接路由,主机通过Zero联网。Station->STA
指连接其他设备的工作模式,比如手机、电脑连接路由器;Access Point->AP
指可以被其他设备连接的模式,如路由器。 更多信息可以参考我的博客UP Board USB无线网卡选购指南。
4.2.1、Zero W连接路由器
要处理三个问题,一是首次上电如何自动连接无线网;二是如何在多网络自动切换;三是如何连接隐藏网络。
既往初次设置无线网络,我一般使用dietpi系统,烧录之后修改boot
分区里的dietpi文件。
现在新版的Raspbian提供了另外的选择,根据树莓派官网的更新日志:
If a
wpa_supplicant.conf
file is placed into the/boot/
directory, this will be moved to the/etc/wpa_supplicant/
directory the next time the system is booted, overwriting the network settings; this allows a Wifi configuration to be preloaded onto a card from a Windows or other machine that can only see the boot partition.注意不是烧录后首次而是只要存在下次都会覆盖。
至此,我们使用WiFi config generator小工具生成一个wpa_supplicant.conf
文件,放在/boot
分区下即可。
参考WPA supplicant | ArchWiki 、 wpa_supplicant.conf | manual 以及《Linux无线网络设置(wpa_supplicant的使用)》,我们可以增加priority
字段和scan_ssid=1
字段实现多网络切换与连接隐藏ssid的无线网络。
network={
ssid="home"
scan_ssid=1
priority=5
key_mgmt=WPA-PSK
psk="very secret passphrase"
}
注:
- 优先级越高越先连接。
- 可用通过
wpa_passphrase MYSSID passphrase >> /etc/wpa_supplicant/example.conf
增加一个新网络连接,>>
代表附加内容,>
代表覆盖内容。
除此之外可用wicd连接隐藏无线网,我之前讲过。
对于dietpi,不知道是否自动处理boot分区的wpa配置文件,我之前是使用/etc/network/interfaces
文件移动至/boot
分区,创建软链接的方法。
4.2.2、Zero W连接主机虚拟热点。
这里使用绿色版软媒Wifi助手,比猎豹免费wifi和360wifi功能略少,但是起码够用,最重要的是没有广告啊!!!
4.2.3 主机通过Zero W联网
我们通过执行iw list
命令,可以看到Zero板载的无线网卡支持多种工作模式(不支持monitor监听模式):
此外,支持同时开启多种模式:
所以设想Zero连接Wifi,然后建立热点为其他设备提供上网服务理论上是可行的。参考这篇帖子,同时开启STA和AP模式,方法参考博士的帖子。参考这里让连接Zero热点的设备联网。
注意AP和STA在同一channel,开启hostapd会有短暂断网。Via 博士
RaspAP项目使用网页控制hostapd所建立的热点。
4.3、OTG数据线直连
参考我之前写的文章:《一根数据线玩转Zero》,通过常用的MicroUSB数据线连接W与主机,共享主机网络,方便但是偶尔不稳定。
5、随身服务器
我们这里使用个人强烈推荐的DietPi发行版,当然你也可以使用树莓派基金会推荐的Raspbian Lite以及优秀的Armbian发行版。简介以及基本安装使用请参考我的博客文章,不再赘述。
5.1 广告屏蔽
既往使用过AD Safe净网大师/ADM阿呆喵,最初用的是前者,但是使用过程中有种不祥的预感,直觉告诉我这软件可能会侵犯隐私,而且体积越发臃肿,所以弃用换了ADM,甚是满意,只是开启https广告拦截配合chrome浏览器会提示证书错误,无法正常访问网页,然后现在https广告还是很多的。
这里我们使用Pi-Hole项目来屏蔽广告。
最早是在Reddit树莓派讨论区(相当于国外版百度贴吧)看到Pi-Hole(注册商标)项目,开发活跃,讨论热烈,而且现在越来越完善了。
Pi-Hole号称A Black Hole for Internet Advertisements
,是一个支持多平台、全网范围的广告拦截工具,本质是提供DNS解析服务,因此所有设备都能获得广告拦截效果。此外它还有一个易于管理的网页控制界面。
要想实现去广告及加速网址解析,只需要把设备的DNS设置为Zero的地址即可。此外还可以结合SS服务器增加一些设置如防DNS投毒。
5.2、Scientific 上网
更新Pi-hole的过程中从外网下载更新文件失败,再加上一些网站打不开,所以准备让Zero W作为二级代理连接我位于太平洋彼岸的VPS服务器,并为局域网提供指路服务。
由于墙越来越厉害,国外搭建OpenVPN特征流量会被识别,根本无法连接,所以你看国内免流服务都是租用国内服务器搭建OV。
- 我们这里选择~~*~~,并且使用SSR**而不是原版SS,一是SSR一个端口支持socks4|5/http代理,有些时候还是很重要的。此外面对不断升级的墙技术,SSR优势在于混淆,所以稳定性优于,速度慢于原版SS。不过原版SS也逐渐添加许多新特性(前段时间的撕逼。。。)
- SS有诸多程序语言版本,比如Python/C/Go等,我们这里使用
shadowsocks-libev版的,其使用C语言,特别适合于Zero W这种性能一般的设备。 - 最后就是选用chacha20加密协议,这是因为Zero W所使用的ARM处理器不支持硬件aes加解密,使用以上加密方式时会占用大量系统资源,chacha20加密协议是谷歌?提出,针对ARM优化的,像手机/ARM开发板适用。该加密特性由libsolid库提供。
5.2.1 安装SSR
SSR-libev项目地址:https://github.com/shadowsocksr/shadowsocksr-libev
由SS-libev fork而来,安装教程未更新请参考原版。
这里使用的Raspbian|DietPi基于Debian 8(Jessie),根据教程我们添加jessie-backports
软件源,并执行apt -t jessie-backports install shadowsocks-libev
安装相应软件包,然而无论运行什么命令都会提示Illegal instruction
,搜索之后怀疑是软件仓库里的预编译包虽然是armhf架构,但是不兼容Zero W。最后选择下载源码进行编译安装。
https://github.com/tennfy/shadowsocks-libev/blob/master/debian_shadowsocks_tennfy.sh
关于
backports
源:
You are running Debian stable, because you prefer the Debian stable tree. It runs great, there is just one problem: the software is a little bit outdated compared to other distributions. This is where backports come in.
Backports are packages taken from the next Debian release (called "testing"), adjusted and recompiled for usage on Debian stable.
5.2.2 交叉编译
使用过程中发现使用ARM编译软件包还是很慢,所以准备用x86小主机进行交叉编译。
pass
参考:http://blog.csdn.net/xukai871105/article/details/24932611
http://shumeipai.me/archives/59.html
http://www.cnblogs.com/xieyajie/p/4699724.html
arm-linux-gnueabihf-gcc
5.2.3 ss-local与ss-redir
pass
测试socks5代理是否成功:
curl --socks5 127.0.0.1:1080 www.google.com
由于正常情况下谷歌是无法访问的,如果代理成功则会返回内容。
5.2.4 Privoxy:socks5转http代理
默认情况下,ss是socks代理,而有些情况下,我们需要http代理。
curl -x 127.0.01:1080 www.google.com
默认-x参数使用http代理,此时无法返回内容。我们参考shadowsocksR for windows,看到一个名为privoxy的工具,实现了一个端口同时兼容socks4/5、http协议,好在Linux下也有该工具。但是由于我们使用的ss-local并不支持该特性,所以要使用privoxy额外占用一个端口,当然privoxy作用不止于此,这是后话,按下不表。可用参考linux下使用privoxy将socks转为http代理 。
# 安装privoxy
apt install privoxy
# 更改配置文件,实现socks5转http
echo 'forward-socks5 / 127.0.0.1:1080 .' >> /etc/privoxy/config
echo 'listen-address 0.0.0.0:8118' >> /etc/privoxy/config
# 重启服务并测试是否成功开启http代理
systemctl restart privoxy.serivce
curl -x 127.0.01:8118 www.google.com
把地址改为 0.0.0.0:8118,表示外网也可以通过本机IP作http代理。
至此,我们实现了Zero W开机自动连接SS服务器,并对局域网提供socks5/http代理,可选透明代理。
树莓派 Zero W——随身钥匙扣的更多相关文章
- windows下一根数据线玩转树莓派zero(w)
买了个树莓派zero w,想着用一根普通micro数据线达成 供电+ssh+通过usb共享网络+远程桌面 的目标 通过用静态ip免去了用benjour的连接不稳定方法,下面开始细说 需要的硬件: 树莓 ...
- 树莓派Zero W添加音频输出
编译:陈拓 chentuo@ms.xab.ac.cn 2018.06.07/2018.07.14 原文:Adding Basic Audio Ouput to Raspberry Pi Zero ht ...
- 树莓派 Zero W+温度传感器DS18B20
树莓派 Zero W+温度传感器DS18B20 作者:陈拓chentuo@ms.xab.ac.cn 2018.05.28/2018.06.01 0. 概述 用树莓派 Zero W读取DS18B20温 ...
- 树莓派Zero W GPIO控制
作者:陈拓 chentuo@ms.xab.ac.cn 2018.06.09/2018.07.05 0. 概述 本文介绍树莓派 Zero W的GPIO控制,并用LED看效果. 0.1 树莓派GPIO编 ...
- 树莓派Zero W无键盘无屏幕初始化
买了个树莓派Zero W,结果发现没mini hdmi线 淘宝了一根mini hdmi,等了5天,拿到手后发现zero还没地接键盘,这下脑袋大了 查了下资料,发现树莓的系统,可以这boot分区中加入一 ...
- 无显示器安装raspberry zero w树莓派 zero w
笔者的环境 1. Macbook 电脑用于烧录树莓派系统到SD卡 2. 树莓派 zero w 把SD卡放进读卡器,插到Mac电脑上, 打开命令行工具Terminal diskutil list列出di ...
- 树莓派 zero w 一根线使用
参考网站:https://sspai.com/post/40086 硬件: 一台mac电脑 一根micro b usb线 一块zero w板子 一张micro sd卡 一.制卡 格式化 烧写镜像文件 ...
- 电脑连接树莓派Pi Zero W
作者:陈拓 chentuo@ms.xab.ac.cn 2018.05.16/2018.06.09 0. 概述 本位介绍两种电脑连接树莓派Pi Zero W的方法: 电脑通过USB以太网连接树莓派Ze ...
- <<开源硬件创客 15个酷应用玩转树莓派>>
本书共分18章,前3章是本书的基础章节,主要介绍了树莓派的一些基本情况和基本操作,来让读者了解树莓派的前世今生,掌握树莓派基本的使用方法.第4~18章主要介绍15个以树莓派为载体的酷炫应用,大家可以按 ...
随机推荐
- web自动化之selenium
一.Selenium(http://www.selenium.org/) Web自动化测试工具.它支持各种浏览器,包括Chrome,Safari,Firefox等主流界面式浏览器,如果你在这些浏览器里 ...
- Python_Virtualenv及Pycharm配置
Virtualenv存在的意义 在Python使用过程中,你是否有遇到过同时需要开发多个应用的情况? 假设A应用需要使用DJango1.X版本,而B应用需要使用DJango2.X的版本,而你全局开发环 ...
- SVM 与 LR的异同
LR & SVM 的区别 相同点 LR和SVM都是分类算法. 如果不考虑核函数,LR和SVM都是线性分类算法,也就是说他们的分类决策面都是线性的. LR和SVM都是监督学习算法. LR和SVM ...
- Uiautomator学习笔记(2) 封装代码 报错误(NllPointerException)
.NullPointerException: Attempt to invoke virtual method 'boolean qq.test.UiautomatorAssistant.ClickB ...
- 动态方式破解apk进阶篇(IDA调试so源码)
动态方式破解apk进阶篇(IDA调试so源码) 来源 https://blog.csdn.net/qq_21051503/article/details/74907449 下面就说关于在IDA中And ...
- 使用grunt实现自动化单元测试
闲话不多说~ 使用步骤 1.安装插件 npm install grunt-contrib-qunit --save-dev 2.加载包含 "qunit" 任务的插件 grunt.l ...
- 《快速开发》通过Maven创建WebService项目Hello World!
有多快? 整个过程3分钟.不用下载jar包,不用一步一步创建Web Project... 你需要的就是在Maven库里选一个archetype,然后一路Next~ 先看结果: 准备好了吗?我们起飞: ...
- 【CF696B】Puzzles(树形DP,期望)
题意:n 个节点的树,初始位置为 1 号节点,初始时间为 1.每次随机地走向任何一个没有走过的子树并且令时间 +1求问走到每一个点时的时间的期望值 思路:比较少见的一道自顶向下的树形DP dp[i]表 ...
- 机器人操作系统ROS Indigo 入门学习(1)——安装ROS Indigo【转】
转自:http://blog.csdn.net/bobsweetie/article/details/43638761 Ubuntu14.04安装ROS Indigo 一.安装ROS 1.1配置Ubu ...
- 反汇编->C++引用与指针
先看一段最简单代码 #include<iostream> #include<stdlib.h> using namespace std; int main() { int te ...