OpenWrt踩坑记录

到2019年9月为止我已经有两个OpenWRT路由器了, 这篇文章用来记录配置方法和各种坑.

导入公钥实现免密码ssh

OpenWRT使用了dropbear作为ssh服务器
导入的公钥文件应存放在/etc/dropbear/
在本机执行以下命令:

cat ~/.ssh/id_rsa.pub | ssh <user>@<serveraddress> "cat >> /etc/dropbear/authorized_keys"

opkg包管理器

更新软件列表用子命令update, 安装install, 卸载remove, 忽略依赖用参数--nodeps

组合操作

opkg是一个轻量级的包管理器, 有些功能必须自己用脚本实现

opkg list | grep <program> #在全部软件中查找
opkg list-installed | grep <program> #查找已安装的软件
opkg list-upgradable | cut -d ' ' -f1 | xargs opkg upgrade #更新全部软件

添加软件源

vim /etc/opkg.conf
# 加入以下软件源
# src/gz openwrt_dist http://openwrt-dist.sourceforge.net/packages/LEDE/base/mips_24kc
# src/gz openwrt_dist_luci http://openwrt-dist.sourceforge.net/packages/OpenWrt/luci
# 导入软件源的公钥
wget http://openwrt-dist.sourceforge.net/packages/openwrt-dist.pub -O /tmp/openwrt-dist.pub
opkg-key add /tmp/openwrt-dist.pub
# 安装各种软件
opkg install luci-i18n-base-zh-cn 
...

导入软件源公钥

wget http://openwrt-dist.sourceforge.net/packages/openwrt-dist.pub  -O /tmp/openwrt-dist.pub
opkg-key add /tmp/openwrt-dist.pub

使用Entware源

Entware是一个适用于嵌入式设备的软件包库, 如果软件还不够用可以尝试安装.
项目官网
github地址
安装教程

交换机配置

官方文档-交换机

多拨-mwan3

常用的多拨软件有nwan pppoeup mwam3(配合macvlan并发),
pppoeup并发(单线)多拨, 但是好像现在用的人不多
nwan用于非并发(多线)多拨
我用mwan3做非并发多拨, 负载均衡
mwan3不能启动, 真是个奇怪的bug. 按这篇文章二楼的方法做了符号链接就好了

配置IPv6

参考: IPv6穿透
IPv6 DNS
学校里能用IPv6, 但是分配的地址是/128, 没有PD下发. 所以我做的是穿透的方案, 即IPv6不走路由, 直接交换.

配置南信大校园网登录

尝试对校园网登录过程抓包, 发现登录时浏览器向服务器POSTusername domian password enablemacauth四对参数. 据此写出脚本:

# 此处密码已手动打码, 以及密码经过了base64编码, 写脚本的时候注意
curl -s -d "username=18860950311&domain=CMCC&password=********" http://10.255.255.13/index.php/index/login #MY GF
curl -s -d "username=17302574701&domain=ChinaNet&password=********" http://10.255.255.13/index.php/index/login #ME

crontab设置如下, 6:00-8:00间自动连接

0 6-8 * * * /usr/bin/curl -s -d "username=17302574701&domain=ChinaNet&password=********" http://10.255.255.13/index.php/index/login >> /root/log

一开始没能成功, 发现是因为早晨网还没来, curl就去请求, 然后就被阻塞住了. 加上--connect-timeout <time>参数就好了

挂载U盘

安装了一些软件后, 发现存储已经用了一半了. 还好路由器有USB接口, 可以使用extroot的方式将软件安装到U盘.

opkg update && opkg install block-mount kmod-fs-ext4 kmod-usb-storage e2fsprogs kmod-usb-ohci kmod-usb-uhci fdisk
# 使用fdisk将U盘分成500M的swap(sda1)和一个ext4分区(sda2)
# 复制路由器存储器中的文件
mount /dev/sda2 /mnt ; tar -C /overlay -cvf - . | tar -C /mnt -xf - ; umount /mnt
# 根据block detect输出生成/etc/config/fstab
block detect > /etc/config/fstab; \
 sed -i s/option$'\t'enabled$'\t'\'0\'/option$'\t'enabled$'\t'\'1\'/ /etc/config/fstab; \
 sed -i s#/mnt/sda2#/overlay# /etc/config/fstab; \
 cat /etc/config/fstab;

重启, 发现自动挂载配置成功

mkdir /opkg-lists
cp /var/opkg-lists/* /opkg-lists
# 修改 lists_dir ext /opkg-lists
vim /etc/opkg.conf

参考资料: LEDE官方文档

对命令行环境的配置

因为平时使用mac很习惯zsh的环境, 在路由器上安装了zsh. 同时对vim进行了简单配置.

安装zsh与oh-my-zsh

# 安装zsh
opkg updte && opkg install zsh
# 安装ssl证书
opkg install ca-bundle
# 安装oh-my-zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)" 
# 更改默认shell, 将最后一列改成/usr/bin/zsh
vim /etc/passwd

注意用curl下载前要安装证书, 不然会报错

参考: Install oh-my-zsh on openwrt

不安装oh-my-zsh的简化配置

嵌入式Linux系统安装oh-my-zsh还是太臃肿了, 简化设置参考 zsh根据ssh配置自动补全

尝试使用4G网卡

宿舍11点会断网,但是树莓派是连着路由器的网的, 很不方便.
尝试将杂牌的”E网时空”4G卡托挂上去. (最终成功了, 但是本段没有更新, 等有时间再说)

首先lsusb查看, 发现有一个标注高通的设备, 同时/dev中有ttyUSB
尝试omgt -d /dev/ttyUSB0怎么都连不上, google发现需要配置usb-modeswitch

安装usb-modeswitch软件包, 发现ELDE中的usb-modeswitch和网上教程中的不一样, 需要自己建配置文件.

vim ~/usb-mode-custom.json

{
 "messages" : [
  "55534243123456780000000000000a11062000000000000100000000 000000",
 ],
 "devices" : {
  "05c6:6000": {
  "*": {
   "t_vendor": 1478,
   "t_product": [ 24576 ],
   "mode": "StandardEject",
   "msg": [ 0 ]
   }
  }
 }
}

尝试提交设置usbmode -c ~/usb-mode-custom.json

仍然不行, 这块的资料我查的一头雾水

参考资料: Openwrt接4G卡
openwrt/LEDE通过USB连接4G网卡或者手机移动网络共享上网(RNDIS)

使用iperf3进行网络测速

在路由器和设备上都安装iperf3, 服务端用 iperf3 -s 启动, 客户端用 iperf3 -c <IP> 启动.

在路由器上进行网络唤醒

OpenWRT提供两个包: etherwakewol
wol需要指定网段和mac地址

/usr/bin/wol -i '192.168.1.255' '40:8D:5C:1F:5D:18'

etherwake需要指定接口和mac地址

/usr/bin/etherwake -i br-lan '40:8D:5C:1F:5D:18'

另有网页界面 luci-app-wol luci-i18n-wol-zh-cn

参考资料: OpenWrt实现WOL(Wake-on-LAN)网络唤醒

使用SQM QoS加速网络

QoS 即 Quality of Service, 服务质量. 对不同业务制定不同优先级来加速网络.
参考: 新版SQM QoS使用教程
SQM QoS汉化补丁
改进的SQM QoS汉化补丁源码
此外, 还有nft-qos qos-scripts可以使用

UPnP支持

如果内网需要使用迅雷一类的软件, 就需要提供UPnP支持
安装miniupnpd luci-app-upnp luci-i18n-upnp-zh-cn包, 在服务->UPnP选项卡就可以设置了.

网络共享

openwrt下可用的网络共享/网盘整理如下:

工具 支持mips架构 类型 特点
webd 软件 轻量, 无权限管理+
filemanager 需编译 软件 功能较全
seafile 需编译 软件 功能极多
CuteHttpFileServe 软件 轻量
kodexplorer PHP 网页
nextcloud PHP 网页
dlna 协议
ftp 协议

需要注意fat32文件系统在op下权限有一些问题, 注意数据安全.

智能家居

Openwet上也可以部署智能家居系统, 参考:
基于SmartLinc的智能家居系统

TODO

  • 内网穿透
  • 使用tcpdump抓包
  • 补充简化的命令行环境设置
  • 更新4G dongle的配置方法

1 评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注