VoCore
硬币大小的Linux计算机(或者可以DIY的mini路由器)
技术参数
- Target: ramips
- Subtarget:
mt7628 - Package architecture:
mipsel_24kc - OpenWRT techdata
具体参数请看官网介绍 VoCore2 Ultimate 和 openwrt列出的技术数据
OpenWRT介绍
OpenWRT(与LEDE合并后更名为OpenWrt)是一个适用于嵌入式设备的Linux发行版,最初由Linksys公司推出的WRT-54G无线路由中使用的Linux系统开源而来。相比于路由器原厂固件而言,OpenWRT提供了一个可添加软件包的可写文件系统,这样用户就能自己定制路由器的功能。基于开放的生态和良好的技术社区环境,OpenWRT十分适合喜好DIY的科技粉来定制自己的路由器。
OpenWRT主要使用opkg来管理软件包,默认使用LuCI作为web交互界面。下面简单列出它们的常用方式,具体使用方法请查阅文档。
opkg
# 安装软件包 opkg install <PACKAGE-NAME> # 卸载软件包 opkg remove <PACKAGE-NAME>uci
# 设置option uci set <OPTION> # 查看option uci show <OPTION>
我的定制
基本设置
- Change SSID Name
uci set wireless.ap.ssid='firefly'
uci commit
# check result
uci show wireless.ap.ssid
# restart networking service to make reload configuration
/etc/init.d/network restart
# check network in another machine
sudo iw dev wlan0 scan | grep SSID
wget ssl
opkg install libustream-openssl ca-bundle ca-certificates
AP+STA模式 (或者叫无线中继器)
- 使用固件 vocore2-20180723V
配置信息(仅供参考):
uci show wireless
wireless.ra0=wifi-device
wireless.ra0.type='ralink'
wireless.ra0.variant='mt7628'
wireless.ra0.country='CN'
wireless.ra0.channel='auto'
wireless.ra0.disabled='0'
wireless.ra0.hwmode='11g'
wireless.ap=wifi-iface
wireless.ap.device='ra0'
wireless.ap.mode='ap'
wireless.ap.network='lan'
wireless.ap.ifname='ra0'
wireless.ap.ssid='“放大后”的WIFI-名称'
wireless.ap.key='密码不告诉你:)'
wireless.ap.encryption='psk2'
wireless.sta=wifi-iface
wireless.sta.device='ra0'
wireless.sta.mode='sta'
wireless.sta.network='wwan'
wireless.sta.ifname='apcli0'
wireless.sta.key='密码不告诉你:)'
wireless.sta.disabled='0'
wireless.sta.encryption='psk2'
wireless.sta.ssid='所中继连接的源WIFI-名称'
网络信息 uci show network:
network.loopback=interface
network.loopback.ifname='lo'
network.loopback.proto='static'
network.loopback.ipaddr='127.0.0.1'
network.loopback.netmask='255.0.0.0'
network.globals=globals
network.globals.ula_prefix='fd15:39fa:4166::/48'
network.lan=interface
network.lan.ifname='eth0.1'
network.lan.force_link='1'
network.lan.macaddr='b8:d8:12:67:01:71'
network.lan.type='bridge'
network.lan.proto='static'
network.lan.ipaddr='192.168.61.1'
network.lan.netmask='255.255.255.0'
network.lan.ip6assign='60'
network.wan=interface
network.wan.ifname='eth0.2'
network.wan.force_link='1'
network.wan.macaddr='b8:d8:12:67:01:72'
network.wan.proto='dhcp'
network.wan6=interface
network.wan6.ifname='eth0.2'
network.wan6.proto='dhcpv6'
network.@switch[0]=switch
network.@switch[0].name='switch0'
network.@switch[0].reset='1'
network.@switch[0].enable_vlan='1'
network.@switch_vlan[0]=switch_vlan
network.@switch_vlan[0].device='switch0'
network.@switch_vlan[0].vlan='1'
network.@switch_vlan[0].ports='1 2 3 4 6t'
network.@switch_vlan[1]=switch_vlan
network.@switch_vlan[1].device='switch0'
network.@switch_vlan[1].vlan='2'
network.@switch_vlan[1].ports='0 6t'
注意此处没有lan_dev桥接网络,并且有固定的mac地址,所以能从以太网分配到IP(待确认,openwrt 18.06.1 默为桥接以太网https://unix.stackexchange.com/questions/493378/no-ethernet-ip-address-in-my-vocore2) 。
配置好后的无线网络信息截图如下: 如果喜欢通过图形界面进行设置,请参考vonger的博客。不过个人偏好命令行配置(uci),更简单可靠。
相关问题
供电电压过低时STA模式不能正常工作
此时一般会提示
[ 826.460057] MlmeEnqueueForRecv(): un-recongnized mgmt->subtype=4, STA-xx:xx:xx:xx:xx:xx的日志错误信息。参考github上的这个Issue
pppoe(ASDL拨号上网)
- 添加vlan端口
- 设置wan接口连接方式为pppoe和以上vlan端口
代理与Web过滤(Shadowsocks + Privoxy)
Shadowsocks
考虑到go此时对mipsel架构的支持还有限, 而且openWRT版本的shadowsocks-libev具有体积小、轻量级、功能支持丰富的特点,就采用了shadowsocks-libev来作为Shadowsocks的客户端。
这里使用了OpenWrt-dist提供的源进行安装。可以通过命令从远程下载直接安装,也可以下载指定ipk安装包后进行安装。
opkg install shadowsocks-libev-ss-local luci-app-shadowsocks-libevv2ray需要openwrt支持SSL, 我们可以启用luci的SSL顺便解决该问题
opkg install luci-ssl-openssl ca-bundle luci-ssl-nginx注意这里我们使用luci-ssl-nginx替换原有的httpd,uhttpd目前会有性能问题导致https页面加载非常慢。
Privoxy
当前所使用的OpenWRT版本已经支持从官方源中下载安装privoxy, 也可以去http://downloads.openwrt.org/找到对应的privoxy安装包手动下载安装。
目前我所使用的privoxy版本信息为:Privoxy version 3.0.26 (https://www.privoxy.org/),但是我在使用它的时候不太确定是否一个bug, 通过uci所配置的list项信息(如actionsfile和filterfile)无法生效,故修改了/etc/init.d/privoxy启动脚本并使用树莓派上privoxy的默认配置文件/etc/privoxy/config作为配置,回退到旧的配置方式。
重要配置示例:
# filename: pac.action
# please add pac.action actionsfile into /etc/privoxy/config
{{alias}}
# http = +forward-override{forward 127.0.0.1:8080}
direct = +forward-override{forward .}
socks5 = +forward-override{forward-socks5 127.0.0.1:1080 .}
default = direct
# Default proxy
{default}
/
{direct}
.edu.cn
.lan
# Shadowsocks
{socks5}
.abc.xyz
.google.com.hk
uci add_list privoxy.privoxy.actionsfile=pac.action
BBR
opkg install kmod-tcp-bbr
网络包分析
安装以下软件包,以便进行网络数据包分析。vocore2性能有限,只适合抓包和处理少量的数据包。
- libpcap
- reaver
- aircrack-ng
- airmon-ng
- tcpdump
显示多个SSID
修改/etc/wireless/mt7628/mt7628.dat (实际上为文本文件):
# BSSID数量设为4 ra0, ra1, ra2, ra3
BssidNum=4
SSID1=VoCore2
SSID2=VoCore2-GUEST
SSID3=VoCore2-HOST
SSID4=VoCore2-NAS
启用网卡嗅探(Sniffer)模式
# Supposed libpcap.ipk and tcpdump.ipk have been installed.
# MonitorMode=2 is MONITOR_MODE_FULL, =1 is MONITOR_MODE_REGULAR_RX, =0 is OFF.
ifconfig mon0 up
iwpriv ra0 set MonitorMode=2
# capturing
tcpdump -i mon0 -w /tmp/store.cap -vv
Packet capturing of raw 802.11 frames (use
tcpdumpalternative toairodump-ng)- set channel to the same as AP (needed, otherwise you’re not able to capture the handshake packets, check https://www.aircrack-ng.org/doku.php?id=cracking_wpa#aircrack-ng_says_0_handshakes)
以下方式在vocore中暂时不能使用
# check current channel of the interface iwlist mon0 channel # change channel iwconfig mon0 channel <CHANNEL_NUM>改变无线网卡的CHANNEL
uci set wireless.@wifi-device[0].channel=6
- Use cap2hccapx to filter packets
cap2hccapx.bin /tmp/store.cap tmp.hccap
- 查看AP已经连接的CLIENT信息
airodump-ng 同时可以用来过滤握手包,可以在tcpdump抓包的同时使用该工具查看数据包文件
airodump-ng -c <TARGET-CH> --bssid <SSID> -r /tmp/store.cap
- 发送DEAUTH包强制断开已连接WIFI的客户端
aireplay-ng -0 2 -a <SSID> -c <CLIENT-MAC> mon0
参考
远程下载 (aria2)
采用默认配置
- aria2
- luci-app-aria2
在界面上配置启用和下载目录,开放路由远程监听端口,可通过luci界面配置进行管理下载
客户端
- web: https://github.com/ziahamza/webui-aria2
- android: Aria2App https://play.google.com/store/apps/details?id=com.gianlu.aria2app&hl=zh
参考https://aria2.github.io/
USB 2.0存储挂载
可通过Web界面luci进行管理,手动挂载存储设备 (系统-> 挂载点) 参考 https://openwrt.org/docs/guide-user/storage/fstab
- kmod-usb2
- block-mount
- kmod-usb-storage
- kmod-usb-storage-uas
opkg install kmod-fs-exfat kmod-fs-ext4 kmod-fs-ntfs kmod-fs-vfat
手动mount存储介质到/mnt/sda1目录
# 假设移动存储设备为/dev/sda1
mkdir /mnt/sda1
mount /dev/sda1 /mnt/sda1
参考openWRT官方文档usb.essentials
NAS服务
这里列出了许多NAS服务https://openwrt.org/docs/guide-user/services/nas/start 。
我主要考虑了两种:nfs和samba。推荐使用nfs, 性能更好一点
安装可以参考官方文档https://openwrt.org/docs/guide-user/services/nas/cifs.server
PS: http服务器可以使用uhttpd服务,默认根目录在/www, 可以新建一个shared文件夹,把文件丢过去就好了(只推荐存储小的配置文件); 参考https://openwrt.org/docs/guide-user/services/webserver/http.uhttpd
声音播放与流媒体功能(DLNA)
采用默认配置
更改dlna根目录
uci set minidlna.config.media_dir='/mnt/usb'
uci set minidlna.config.user='root'
配置示例
minidlna.config=minidlna
minidlna.config.enabled='1'
minidlna.config.port='8200'
minidlna.config.interface='br-lan'
minidlna.config.friendly_name='OpenWrt DLNA Server'
minidlna.config.db_dir='/var/run/minidlna'
minidlna.config.log_dir='/var/log'
minidlna.config.inotify='1'
minidlna.config.enable_tivo='0'
minidlna.config.wide_links='0'
minidlna.config.strict_dlna='0'
minidlna.config.notify_interval='900'
minidlna.config.serial='12345678'
minidlna.config.model_number='1'
minidlna.config.root_container='.'
minidlna.config.album_art_names='Cover.jpg/cover.jpg/AlbumArtSmall.jpg/albumartsmall.jpg/AlbumArt.jpg/albumart.jpg/Album.jpg/album.jpg/Folder.jpg/folder.jpg/Thumb.jpg/thumb.jpg'
minidlna.config.media_dir='/mnt/sda1'
参考https://openwrt.org/docs/guide-user/services/media_server/minidlna
Guest WIFI和wifidog
- 参考openwrt此官方文档创建guest开放网络
- 安装nodogsplash,并设置用户名密码登录 https://nodogsplash.readthedocs.io/en/latest/binauth.html 设定需要portal登录的interface为br-guest
- 使用splash.html认证的方式密码是明文,建议偶尔使用,长期使用可改用FAS登录。
Web管理界面luci中文支持
安装中文语言包 和 material界面
opkg install luci-i18n-base-zh-cn luci-theme-material
然后在luci界面上选择中文作为默认语言。
变成“假硬币”怎么办?
一般情况下,如果设定了错误的配置导致vocore无法正常工作,可以尝试修复配置完成。这里只给出个人的方案,官网有更全面更安全的方式。
如果修复不了配置,直接恢复到默认设置:
firstboot && reboot
如果是固件出现了问题,可尝试通过刷入新的固件来解决
sysupgrade -v <VOCORE-FIRMWARE.BIN>
如果无法通过网络连接vocore,那么只用尝试通过串口连接了。
使用串口连接vocore
设定好参数后可以通过USB串口连接到vocore2 UART speed: 115200bps; 8bits; no even; 1 stop bit
- Windows下putty连接COM端口 (驱动usb2ttl)
- Ubuntu中使用minicom连接
使用串口刷入固件(仅在sysupgrade方式不可用时推荐)
- 安装ckermit
sudo apt-get install ckermit
# 旧版本ckermit在Ubuntu 20.04中已经废弃, The Kermit Project at Columbia University is cancelled effective 1 July 2011
# 从新网站下载源码编译 http://www.kermitproject.org/ck90.html
make linux
sudo make install
配置 /etc/kermit/kermrc 或者/root/.mykermrc`
; 添加如下内容
set line /dev/ttyACM0
set speed 115200
set carrier-watch off
set handshake none
set flow-control none
robust
set file type bin
set file name lit
set rec pack 1000
set send pack 1000
set window 5
- 使用minicom连接vocore2并选择
0: Load system code then write to Flash via SERIAL.
# config Minicom
sudo minicom -s
# connect
sudo minicom
接上电源启动vocore并快速按0,进入刷机模式
- 使用minicom传输固件
vocore2进入待刷机模式后,按下快捷键Ctrl+A+Z, 打开minicom菜单选择send files,并使用kermit协议,然后输入文件名回车开始发送文件,完成刷机。

Compile OpenWRT for VoCore2
- Install packages to compile OpenWRT
sudo apt-get install gcc g++ binutils patch bzip2 flex bison make autoconf gettext texinfo unzip sharutils subversion libncurses5-dev ncurses-term zlib1g-dev libssl-dev python
- Follow link https://github.com/Vonger/vocore2
- 指定内核版本
include/kernel-version.mk
PS: 如果想购买一个玩一下,不必在官网上买,国内某宝上有卖,而且貌似是官方的,因为它来自中国。
OpenWRT 18.06
当前vocore2的官方固件基于openwrt 15.05, 该版本openwrt支持的软件包比较少,openwrt 18.06对vocore已有较好的支持。
推荐:刷入vonger提供的vocore2固件 http://vonger.cn/misc/vocore2/20180419.bin
注意默认配置下openwrt未启用AP模式,使用以下命令更改(使用vonger固件不需要执行该命令)
uci set wireless.@wifi-device[0].disabled=0; uci commit wireless; wifi
OpenWRT相关DIY
小米路由器3g (256MB内存版本, 2代貌似涨价了而且配置缩水了)
刷机等相关文档参考这个链接 https://forum.openwrt.org/t/xiaomi-wifi-router-3g/5377
提示:mt7621 v2ray版本选择mipsle_sf
DNS配置
我们配置dns避免DNS污染和劫持
- 设置上游DNS
# Configure DNS provider
uci -q delete network.wan.dns
uci add_list network.wan.dns="8.8.8.8"
uci add_list network.wan.dns="8.8.4.4"
# Configure DNS6 provider
uci -q delete network.wan6.dns
uci add_list network.wan6.dns="2001:4860:4860::8888"
uci add_list network.wan6.dns="2001:4860:4860::8844"
# Disable peer DNS
uci set network.wan.peerdns="0"
uci set network.wan6.peerdns="0"
# Save and apply
uci commit network
/etc/init.d/network restart
参考 https://openwrt.org/docs/guide-user/base-system/dhcp_configuration
- dns over https
参考 https://openwrt.org/docs/guide-user/services/dns/doh_dnsmasq_https-dns-proxy
源镜像
https://mirrors.tuna.tsinghua.edu.cn/openwrt
sed -i 's/http:\/\/downloads.openwrt.org/https:\/\/mirrors.tuna.tsinghua.edu.cn\/openwrt/g' distfeeds.conf
推荐使用openwrt官网固件。 目前固件较稳定19.07,使用稳定发布版本可以找到完整的依赖包。保持与默认界面与设置统一。
wan 口和 lan口互换
默认以太网口为lan口,可以通过以太网共享vocore网络给其他设备。
切换为wan口,只需要将wan设备的物理接口换成eth0.1, 将lan设备的物理接口换成eth0.2
此链接仅供参考http://vonger.cn/?p=8127
VLAN
https://x-nagi.com/2019/openwrt-and-switch.html
https://zhuanlan.zhihu.com/p/35616289
主机映射
4G LTE
- dial.sh script
#!/bin/bash
if [ ! "$(lsusb -d '161c:f010')" ]; then printf "usb not plugged\n" ; fi
# switch from mass storage to modem devices
#usb_modeswitch -v 161c -p f010 -W -M 55534243123456780000000000000606f50402527000000000000000000000
usbmode -s -v -c usb-mode.json
modprobe qmi_wwan
echo "161c f101" > /sys/bus/usb/drivers/qmi_wwan/new_id
sleep 2
echo 1-1:1.0 > /sys/bus/usb/drivers/qmi_wwan/unbind
echo 1-1:1.1 > /sys/bus/usb/drivers/qmi_wwan/unbind
sleep 1
echo 1-1:1.1 > /sys/bus/usb/drivers/qmi_wwan/bind
sleep 1
modprobe option
echo '161c f101' > /sys/bus/usb-serial/drivers/option1/new_id
ifup wan
# ip route add default dev 3g-wan metric 100
- network config
set metric to 100, so network traffic goes through this interface by default.
config interface 'wan'
option device '/dev/ttyUSB0'
option apn '3gnet'
option proto '3g'
option service 'umts'
option ipv6 'auto'
option dialnumber '*99#'
option ifname 'ppp0'
option metric '100'
- usb-mode.json
{
"messages" : [
"55534243123456780000000000000606f50402527000000000000000000000",
],
"devices" : {
"161c:f010": {
"*": {
"t_vendor": 5660,
"t_product": [ 61697 ],
"msg": [ 0 ],
"response": true
}
},
}
}
参考链接
- https://help.ubuntu.com/community/Minicom
- http://vocore.io/v2.html
- https://openwrt.org/docs/guide-user/network/wifi/relay_configuration
- http://downloads.openwrt.org/snapshots/targets/ramips/mt76x8/packages/
- https://wiki.openwrt.org/zh-cn/doc/techref/opkg
- https://oldwiki.archive.openwrt.org/doc/uci/wireless
- http://vonger.cn/misc/vocore2/
- https://openwrt.org/docs/guide-user/luci/start
- https://openwrt.org/docs/guide-developer/toolchain/use-buildsystem