2020年10月

Openwrt自带的那个破bash有点不好用,换成zsh试试吧。

首先下载安装zsh

wget https://downloads.openwrt.org/releases/packages-18.06/x86_64/packages/zsh_5.4.2-1_x86_64.ipk
opkg install zsh_5.4.2-1_x86_64.ipk

安装oh-my-zsh依赖

opkg install wget unzip ca-certificates

安装oh-my-zsh

sh -c "$(wget -O- https://raw.githubusercontent.com/felix-fly/openwrt-ohmyzsh/master/install.sh)"

ash设为默认shell

which zsh && sed -i -- 's:/bin/ash:'`which zsh`':g' /etc/passwd

安装自动补全插件

wget http://mimosa-pudica.net/src/incr-0.2.zsh

复制到插件目录~/.oh-my-zsh/plugins/incr/

在~/.zshrc加一行

source ~/.oh-my-zsh/plugins/incr/incr*.zsh

配置生效命令

source ~/.zshrc

以上就是我在github看到的使用说明文档。

当你按照Github上面的安装说明一步步装完后,

[RainBowText]你 会 发 现 100% 不 好 使 !!![/RainBowText]

Openwrt是个针对路由器的系统,和我们常用的不一样。
所以加点原创的内容:我们需要手动添加Openwrt适配,把针对Openwrt系统的命令/etc/shinit的内容手动加在~/.zshrc里
(你看下面这个service命令是咋实现的 :@(中枪) )

[ -x /bin/more ] || alias more=less
[ -x /usr/bin/vim ] && alias vi=vim || alias vim=vi

alias ll='ls -alF --color=auto'

[ -z "$KSH_VERSION" -o \! -s /etc/mkshrc ] || . /etc/mkshrc

[ -x /usr/bin/arp -o -x /sbin/arp ] || arp() { cat /proc/net/arp; }
[ -x /usr/bin/ldd ] || ldd() { LD_TRACE_LOADED_OBJECTS=1 $*; }

service() {
    [ -f "/etc/init.d/$1" ] || {
        echo "service "'"'"$1"'"'" not found, the following services are available:"
        ls "/etc/init.d"
        return 1
    }
    /etc/init.d/$@
}

[ -n "$KSH_VERSION" -o \! -s "$HOME/.shinit" ] || . "$HOME/.shinit"
[ -z "$KSH_VERSION" -o \! -s "$HOME/.mkshrc" ] || . "$HOME/.mkshrc"

最后安装自己喜欢的画风简单调整下显示,
放在oh-my-zsh安装文件夹/themes/选择的theme配置文件

PROMPT="
%{$terminfo[bold]$fg[blue]%}#%{$reset_color%} \
%{$fg[green]%}%n \
%{$fg[white]%}in \
%{$terminfo[bold]$fg[yellow]%}%~%{$reset_color%}\
${hg_info}\
${git_info}\
 \
%{$fg[white]%}[%*] $exit_code
%{$terminfo[bold]$fg[red]%}$ %{$reset_color%}"

生效配置

source ~/.zshrc

输入ssh命令,连接!
QQ截图20201026205042.png
完美。

(给路由器系统装omz是不是有点丧病)

公司网络比较慢,家里网络比较快而且有本地DNS和内外网分流,可以让公司电脑访问外网时候走家里的宽带。

用softether的L2TP实现了这个需求,但是公司电脑windows10不支持断线重连,于是需要自己写一个。

这个脚本实现的功能为:让公司电脑开机自动通过L2TP连接家里内网,并在L2TP断开连接后定时进行重拨,实际使用时需按照具体需求进行修改。

新建一个文本文档,内容如下

title 自动连接网络

#等待系统网络服务加载完成,避免网络未加载即运行导致的报错
TIMEOUT /T 20
# 开机后连接家里内网
rasdial L2TP连接名 用户名 密码
# 连接成功后微信通知我(这里本应该有个判定,我懒得写了)
curl -I https://sc.ftqq.com/[Api key].send?text=WrokPCReboot
# 此处延时避免重拨检测异常
TIMEOUT /T 60

:begin
# 检测内网连接是否正常(ping 本地DNS服务器)
ping -n 2 192.168.60.120 >nul
# 如果ping不通,则重新拨号
if "%errorlevel%"=="0" (cls & echo 连接正常) else (echo 内网不正常,正在重连 & goto redial)
# 避免连续检测
TIMEOUT /T 30
# 循环
goto begin

:redial
# 此处延时为了等待宿舍OP系统将PPPOE新接口的IP解析到域名上
TIMEOUT /T 600
# 重拨
rasdial L2TP连接名 用户名 密码
# 微信通知
curl -I https://sc.ftqq.com/[Api key].send?text=WrokPCRedial
# 此处延时避免重拨检测异常
TIMEOUT /T 30
# 继续监测
goto begin

脚本随便找个地方放。
然后新建一个vbs,用于隐藏脚本执行时的UI界面:

CreateObject("WScript.Shell").Run "cmd /c 脚本的路径",0

然后把vbs脚本放在自启目录下

C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

[purpleacc open="open" title="总结"]开机VBS自启,VBS调用隐身的CMD,CMD自动联网并循环监测,监测断网则自动重连,重连后继续进行循环监测。[/purpleacc]

[blueacc open="open" title="附注"]
1.如果你的脚本中含有路由设置这种需要获取管理员权限的命令,你可以使用BatToExeConverter把脚本转成exe,然后用Compatibility Administrator设置下UAC白名单避免开机就弹UAC。
2.如果你也是公司电脑访问家里内网,可以用route add -p添加永久路由,保证访问公司内网时走公司内部网络。[/blueacc]

最开始的时候,我的宿舍网络是由一个小光猫构成的,
光猫不仅可以拨号,还能作为无线接入点,手机直接连光猫的Wi-Fi就可以无线上网,
这也是大部分简单的家庭网络的模样:
QQ截图20201023210055.png
不过,很快就会发现连光猫的Wi-Fi很卡,一是光猫(北京联通)的无线模块只能提供50Mbps的网速,二是光猫无线吞吐性能不行,同时上网的设备一多就会掉帧丢包,100Mbps的网速到手机上只有30Mbps左右。怎么办呢?买个路由器。市面上的路由器,WiFi信号一般要好于光猫的信号,所以在网络中加上了路由器后,无线速度明显变快了,电脑也因为直接使用有线连接路由器,可以达到很快的网速了。
QQ截图20201023211042.png
随着宿舍无线设备的增多,我发现在线设备较多的时候,还是会出现丢包降速的情况,而且电脑直接用网线连路由器也只能跑到不到200Mbps,但是宽带是300Mbps,剩下的那100Mbps哪去了呢?
想来想去,应该是光猫的性能问题,CPU转发性能较低,在一直满速的情况下会发热,无法长时间保持稳定满速。
于是我考虑将光猫改成桥接模式,也就是变成一个纯二层光转电设备,把PPPOE拨号这些事情交给转发性能更强的路由器的CPU来做。
QQ截图20201023212055.png
在这样调整之后,路由器进行PPPOE拨号,这时候我发现路由器获得了一个公网IP,虽然是动态的,但是可以用手机直接访问路由器开放出去的端口。
于是我ssh登到路由器(小米R1D)上,编译了一个LNMP环境(路由器的Linux系统+Nginx+MySQL+PHP),放了一个简单的Wordpress博客在路由器上,然后把Wordpress端口开放到公网,这样就可以通过IP来访问我的博客了。
QQ截图20201023213158.png
QQ截图20201023213402.png
这样就又产生了一个问题,网络一重启,博客的IP就会变化,谁能每次都记得住IP呢。
于是我做了下面三件事:

1.注册了一个域名,并把域名备案;
2.找了一个脚本,让路由器每次重启的时候都获取一下PPPOE接口的IP,并绑定到域名上;
3.弄了个脚本,让路由器每次重启后发微信告诉我最新的IP。

这样就可以通过http://域名:55555来访问我的博客了。
为什么不用默认的80和443端口呢?因为家用宽带不会给你开放这两个端口(所以后来把博客迁移到云端了,后续更新)。
然后要做的事就是折腾Wordpress博客了,因为Wordpress博客的服务器全都在国外,对国内网络支持不太好,一下载插件就会502-Timeout,所以我需要让路由器遇到国外的IP时自动切换为外国的网络。
QQ截图20201023215316.png
当时用的是小米R1D,R1D是最早带硬盘的国产家用路由器,硬盘不能浪费掉,于是又开了个下载服务,想看的电影可以先离线下载到路由器硬盘上,再使用Samba服务把路由器里面的硬盘挂载到电脑上,晚上打开下载后就可以关掉电脑了,白天起来直接就可以在电脑上观看下载好的电影了。
IMG_6608(20201023-215703).JPG
这样,越来越多的服务在小米R1D上运行,路由器的芯片有些吃不消,
5d03a7c9b56594511.jpg_fo742.jpg
所以又从小米R1D换成便宜实用的斐讯K3,
u=422470737,4282744348&fm=26&gp=0.jpg
再后来,又从斐讯K3又换成了比较贵的华硕路由器ASUS-AC86U
timg.jpg
运行在路由器上面的服务也就越来越多了
QQ截图20201023221321.png
偶然的机会,发现自己的网络支持迅雷快鸟,打开迅雷快鸟的App后,网速会从300Mbps临时变更为700Mbps,这就很划算了,但是迅雷快鸟的App只能电脑登录或者是手机登录,电脑关掉或者手机休眠的时候,宽带就又变回300Mbps了。
正好我认识参与梅林插件的开发者Sadog,我和Sadog说了一下,他给我做了一个可以在AC86u路由器上运行的迅雷快鸟插件,这样,我路由器就可以一直保持700Mbps的网速了。
QQ截图20201023222003.png
迅雷快鸟插件的雏形:
QQ截图20201023222120.png
700Mbps的网速,导致我的路由器一下子就过时了。跑了那么多的服务,还想要Wi-Fi速度能达到700Mbps,有点痴人说梦。
这种路由器性能不足的情况持续了大概有半年的时间,我发现了新的解决方法。
将需要CPU算力的功能分给计算性能强的主机,将需要发射Wi-Fi信号的功能分给信号超级好的AP,这样的话就可以保持网络和运算性能都均衡了。
于是我跑到淘宝,买了一个3855u软路由,用于拨号,包转发,以及7层的App运行。
IMG_6609(20201023-222605).JPG
又买了一个Tp-LINK的AP2608GC,用于发射Wi-Fi信号。
QQ截图20201023222906.png
3855u买回来之后不太会用,把之前路由器的功能迁移过来,大概这个样子:
1.png
因为之前接触的x86平台一般是用来装Windows或者Ubuntu系统的,突然给了我一个没用过的系统,Koolshare的LEDE系统,就不会用了,面对LEDE的应用商店眼花缭乱的功能,我陷入了沉思。

这时候,我的朋友Luckybeans给我发了一个Lean自编译Openwrt系统的Github连接,我又糊涂了,这软路由到底怎么用呢。

[blueacc open="open" title="未完待续"]关于之后将博客部署到云主机+阿里WAF+OSS+CDN的网络中、用Openwrt开源代码定制X64固件、在软路由的ESXi系统搭建旁路双DNS缓存服务防污染、将应用从路由系统分离到Alpine_Docker的这些故事,我会在后续几章里面更新(咕咕咕)。[/blueacc]
[greenpro value="20"]PROGRESS[/greenpro]