VoCore

硬币大小的Linux计算机(或者可以DIY的mini路由器)

技术参数

具体参数请看官网介绍 VoCore2 Ultimateopenwrt列出的技术数据

OpenWRT介绍

OpenWRT(与LEDE合并后更名为OpenWrt)是一个适用于嵌入式设备的Linux发行版,最初由Linksys公司推出的WRT-54G无线路由中使用的Linux系统开源而来。相比于路由器原厂固件而言,OpenWRT提供了一个可添加软件包的可写文件系统,这样用户就能自己定制路由器的功能。基于开放的生态和良好的技术社区环境,OpenWRT十分适合喜好DIY的科技粉来定制自己的路由器。

OpenWRT主要使用opkg来管理软件包,默认使用LuCI作为web交互界面。下面简单列出它们的常用方式,具体使用方法请查阅文档。

我的定制

基本设置

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模式 (或者叫无线中继器)

配置信息(仅供参考):

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),更简单可靠。

相关问题

pppoe(ASDL拨号上网)

代理与Web过滤(Shadowsocks + 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性能有限,只适合抓包和处理少量的数据包。

显示多个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

参考: http://vonger.cn/?p=14496

启用网卡嗅探(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
uci set wireless.@wifi-device[0].channel=6 
cap2hccapx.bin  /tmp/store.cap tmp.hccap

airodump-ng 同时可以用来过滤握手包,可以在tcpdump抓包的同时使用该工具查看数据包文件

airodump-ng -c <TARGET-CH> --bssid <SSID> -r /tmp/store.cap 
aireplay-ng -0 2 -a <SSID> -c <CLIENT-MAC> mon0

参考

远程下载 (aria2)

采用默认配置

在界面上配置启用和下载目录,开放路由远程监听端口,可通过luci界面配置进行管理下载

客户端

参考https://aria2.github.io/

USB 2.0存储挂载

可通过Web界面luci进行管理,手动挂载存储设备 (系统-> 挂载点) 参考 https://openwrt.org/docs/guide-user/storage/fstab

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

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

使用串口刷入固件(仅在sysupgrade方式不可用时推荐)

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 
# config Minicom
sudo minicom -s

# connect 
sudo minicom

接上电源启动vocore并快速按0,进入刷机模式

vocore2进入待刷机模式后,按下快捷键Ctrl+A+Z, 打开minicom菜单选择send files,并使用kermit协议,然后输入文件名回车开始发送文件,完成刷机。 示例

Compile OpenWRT for VoCore2

  1. 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
  1. 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污染和劫持

# 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

参考 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

#!/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

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'
{
        "messages" : [
                "55534243123456780000000000000606f50402527000000000000000000000",
],
"devices" : {
                "161c:f010": {
                        "*": {
                                "t_vendor": 5660,
                                "t_product": [ 61697 ],
                                "msg": [ 0 ],
                                "response": true
                        }
                },
        }
}

参考链接