2016年12月

ss公共服务器定时更改密码并同步更新到博客

公共服务器两天前就搭建好了,折腾了一阵,终于实现自动定时更改连接密码再自动在博文中更新它。
看到别人是通过php实现的,但博主我php拙计,只懂得一点shell脚本,最终通过shell弄好了,脚本分享出来,有一样需要的朋友可参考。

#! /bin/bash
#更改FTP的IP 用户名 密码
ftp_ip=glorystar.me
ftp_user=ftp
ftp_passwd=yourpasswd
#更改部分结束

passwd=`cat /dev/urandom | head -1 | md5sum | head -c 8`
cat > /etc/shadowsocks/config.json << EOF
{
    "server":"0.0.0.0",
    "server_port":8989,
    "local_address":"127.0.0.1",
    "local_port":1080,
    "password":"$passwd",
    "timeout":60,
    "method":"chacha20"
}
EOF
echo $passwd > /home/wwwroot/passwd.txt
cd /home/wwwroot
ftp -v -n $ftp_ip << END
user $ftp_user $ftp_passwd
passive
delete passwd.txt
put passwd.txt
bye
END
/etc/init.d/shadowsocks restart
exit

crontab定时执行以上脚本,我设定的是每天1时更改一次。

0 1 * * * sh ~/sh/ss.sh

解释一下脚本的实现过程
1 通过dev/urandom生成随机8位密码
2 用这个随机密码配置ss配置文件。
3 输出这个密码到passwd.txt文本文件,这个文件可供http访问。本来到这一步也就完成了,但因为vps服务器没有上ssl,在博客上直接引用这个txt文件会提示不安全内容而不加载,要手动加载,比较麻烦,所以有了下面的步骤。
4 通过ftp把这个passwd.txt上传到博客所在的服务器,博文上直接引用本地资源就不会有问题了。
PS 如果你的博客没有ssl,可以忽略ftp部分。

在博文上引用这个txt文件可通过iframe实现。

<iframe name="txt" marginwidth="0" marginheight="0" width="70" height="15" src="passwd.txt" frameborder="0"></iframe>

给用作公共服务器的vps安装vnstat流量监控

安装教程参照军哥的Linux VPS流量查看/监测工具 -- vnStat 原教程有坑,在这里也把我的安装过程说下

1.下载vnstat和vnstat php frontend

wget http://soft.vpser.net/status/vnstat/vnstat-1.9.tar.gz
wget http://soft.vpser.net/status/vnstat/vnstat_php_frontend-1.5.1.tar.gz

2.安装vnstat

tar zxvf vnstat-1.9.tar.gz
cd vnstat-1.9
make && make install

3.把vnstat php frontend放到网站目录

tar zxvf vnstat_php_frontend-1.5.1.tar.gz
mv vnstat_php_frontend-1.5.1 /home/wwwroot/default/vnstat

4.配置vnstat

cat > /var/lib/vnstat/dump.sh<<EOF
vnstat -u -i eth0
vnstat --dumpdb -i eth0 >/var/lib/vnstat/vnstat_dump_eth0
EOF

把这个脚本加入crontab每五分钟执行一次

crontab -e
*/5 * * * * sh /var/lib/vnstat/dump.sh

5.配置vnstat php frontend

cd /home/wwwroot/default/vnstat
vi config.php
#指定显示标题
$iface_title['eth0'] = 'vultr-vps';
#设置以什么图片格式显示图表,可选svg和png,png兼容更好,默认svg,我们改成png。
$graph_format='png';
#指定安装目录,默认如下不用更改
$vnstat_bin = '/usr/bin/vnstat';
#指定数据目录,改为之前我们通过脚本每五分钟dump出来的那个目录。
$data_dir = '/var/lib/vnstat/';
#其它项可不更改。

遇到的坑
vnstat php frontend需要popen函数,lnmp1.0之前的版本没有禁用函数,所以军哥也没在他的教程里指出来,之后的版本都禁用掉了这个函数,导致访问vnstat页会无响应,php-fpm进程会占用100%CPU。
解决办法是解禁popen函数

vi /usr/local/php/etc/php.ini
#把disable_functions里的popen删除掉。
lnmp restart

vnstat
之后访问就正常了,搞定收工~

Netgear网件官方固件的qos还挺好用的

苦逼的博主家里的网络还是电信6M(0.5M上行),平常使用还好;但是周末时哥嫂回到家里网络就真的是炸了,近十台手机,起码得有两个人同时用手机看在线视频,老妈还要看电视--乐视网络视频,那时电脑真的是看个网站都不顺畅,卡半天才能刷出来。

农村地区,还没光纤覆盖;打电话给电信说要升级宽带,被告知6M已达到这条线路的最大宽带,没有资源再供提速了。

因为这种情况,路由器qos成了刚需,前阵一直在折腾这个,下面把折腾的过程说下。

最先家里网络主路由是一个TP-LINK的猫路由一体机,下面再接一个NETGEAR WNR-3500Lv1提供有线千兆网络,因为这个路由的无线信号不强,又另接了个newifi mini专做ap。

首先开刀的是WNR-3500Lv1,原来刷了openwrt在用,因为听说tomato的qos比较强,就刷了一系列的tomato固件:tomato dualwanTomato by Shibby,一番使用下来,发现开启了qos也没有什么效果,完全无法限制住迅雷,虽然迅雷下载速度能被限制到100kb/s,但网络还是很卡,而网络总使用率不到400kb/s,但迅雷开启了近2000个并发连接,以为是主路由的锅,他的性能无法承受这个连接数。于是设置不使用tp-link的路由功能,把它当作一个纯粹的宽带猫来使用,使用桥接由wnr3500lv1进行拨号上网。但这样设置了,问题依旧。好吧,估计是电信作了连接数限制吧。

之后还设置过在tomato上命令配置限制连接数,但效果也不明显。

之后在齐齐奔跑---Alex看到了这个qos限速脚本

#bbs.dualwan.cn 2015-8-14 by cheng1196  qq372693586
#这是OPENWRT固件与Tomato固件通用智能限速脚本
#装载核心模块
 
insmod cls_u32
insmod em_u32
insmod act_connmark
insmod act_mirred
insmod sch_ingress
insmod cls_fw
insmod sch_htb
insmod sch_sfq
insmod sch_red
 
#设置局域网处于192.168.1.0的网段
UIP="192.168.1."
NET="192.168.1.0/24"
 
#设置限速的ip地址192.168.1.100到192.168.1.130
#DHCP分配也需要设置192.168.1.100到192.168.1.130 
IPS="100"
IPE="130" 
 
#设置宽带的最大上传下载速度,UP上传,DOWN下载,1兆等于128,这是20兆光纤上传与下载
UP=384
DOWN=2560
 
#装载核心模块,创建QOS专用链
insmod imq
ifconfig imq1 up
ifconfig imq0 up
 
 
iptables -t mangle -N QOSUP
iptables -t mangle -N QOSDOWN
iptables -t mangle -A FORWARD -s $NET -d ! $NET -p ! icmp -j QOSUP
iptables -t mangle -A FORWARD -d $NET -s ! $NET -p ! icmp -j QOSDOWN
iptables -t mangle -A QOSUP -j IMQ --todev 1
iptables -t mangle -A QOSDOWN -j IMQ --todev 0
 
iptables -t mangle -A QOSUP -p udp --dport 53 -j RETURN
iptables -t mangle -A QOSUP -m length --length :512 -j RETURN
iptables -t mangle -A QOSDOWN -p udp --sport 53 -j RETURN
iptables -t mangle -A QOSDOWN -m length --length :512 -j RETURN
 
tc qdisc del dev imq0 root
tc qdisc del dev imq1 root
tc qdisc add dev imq0 root handle 1: htb
tc qdisc add dev imq1 root handle 1: htb
tc class add dev imq0 parent 1: classid 1:1 htb rate $((DOWN))kbps
tc class add dev imq1 parent 1: classid 1:1 htb rate $((UP))kbps
 
i=$IPS; 
while [ $i -le $IPE ] 
do
 
tc class add dev imq1 parent 1:1 classid 1:$i htb rate $((UP/32))kbps ceil $((UP/16*4))kbps quantum 1500 prio 5
tc qdisc add dev imq1 parent 1:$i handle $i: sfq limit 64 perturb 10
tc filter add dev imq1 parent 1: protocol ip prio 100 handle $i fw classid 1:$i
 
tc class add dev imq0 parent 1:1 classid 1:$i htb rate $((DOWN/32))kbps ceil $((DOWN/16*14))kbps quantum 3001 mtu 3200 prio 5
tc qdisc add dev imq0 parent 1:$i handle $i: sfq perturb 10
tc filter add dev imq0 parent 1: protocol ip prio 100 handle $i fw classid 1:$i
 
iptables -t mangle -A QOSUP -s $UIP$i -j MARK --set-mark $i
iptables -t mangle -A QOSDOWN -d $UIP$i -j MARK --set-mark $i
 
i=`expr $i + 1` 
done

有一定效果,比tomato自带的qos效果更好一点,之前迅雷下载会导致整个网络几乎处于不可用状态,用这个还行,起码网页还刷得出来,视频能播放,不过放十几秒缓冲个几秒也是蛋痛得紧。

说到底还是网络的速度实在是太慢了,只有0.5M上传,在路由后台可以看到迅雷在下载时几乎占满了上传,导致整个网络拥堵。qos有一定效果但它毕竟也不是万能的。

最后突然想起来,网件的原生固件也有带qos的,何不试试它的qos怎么样呢?说真的,这个WNR3500Lv1路由器几乎买来就是折腾的,几乎没有正经用过网件的原生固件。

网件的qos最终带来的惊喜,其qos默认配置不用改,开启它就好,真的挺强的,实测能限制住迅雷,网络繁忙时其下载速度会自动降下来,其也会自动限制住迅雷多开连接,在tomato下,迅雷能开启近2000个并发连接,在原生qos下,只能开启300多个。

最终在这个qos下,我用6M宽带做到了两台手机看超清网络视频,我在一台电脑看斗鱼超清直播,另一台电脑开迅雷下载。而视频全部不卡,迅雷下载被限制在150kb/s左右。

如果你也有和我一样的困扰,并且你手里也有网件的路由器的话,不妨试下网件原生固件(界面看起来真的好挫)的qos功能,没准它能给你惊喜呢~

最后,祝各位圣诞快乐哦~

网件netgear系列路由丢失MAC地址改回原厂设定的办法

折腾学习openwrt的测试路由是网件Netgear WNR3500L V1,这个路由也算当年的一个经典型号,配置如下

Broadcom BCM4718A@453MHz
64MiB RAM
8MiB FLASH
4 x 1千兆LAN口
1 USB2.0

总体来说,可玩性很高,性能也还过得去。
这是网件的开源路由,各大路由系统DD-WRT OPENWRT TOMATO等都有支持。

在折腾的过程中,发现MAC地址丢失了,表现为mac地址为 00:FF:FF:FF:FF:FF ,这个问题曾经困扰了我很久,试了很多办法都不能把它改回来,走了很多弯路。

mac丢失并不会影响使用,但强迫症患者表示看到这个mac非常不爽!

近期总算找到办法把它改回出厂mac了,之前没有记录起来,导致又出现这个问题后又是一番查找才解决问题,这里把过程贴下,权作记录方便以后自己查找,也方便后来者遇到和我一样的问题少走弯路。

1、 无论你现在使用的是什么版本的固件,请把它刷回官方固件。
2、 下载网件的telnetenalbe,把telnetEnable.exe解压到你的个人文件夹(省去cd到目录或者加patch的麻烦)。
3、 WIN键+R 打开运行 输入 CMD 打开CMD 输入如下命令 telnetenable.exe 192.168.1.1 00FFFFFFFFFF Gearguy Geardog IP为你路由IP,请做相应更改,最后两参数为用户名密码,注意大小写。
4、 再另外打开一个CMD窗口, telnet 192.168.1.1 登录上去
5、 输入如下命令更改MAC

cd /sbin
burnethermac 设备原MAC地址
reboot #重启退出后门模式

注意mac地址不用加符号,只输入字符就行。
搞定收工。

此办法同样适用于以下网件路由型号

DC112a v1: Works with UDP of version TelnetEnable and adminstration admin/pw, telnet does not require password.
DGN1000v3: Router Firmware Version V1.0.0.14_0.0.14 works, gives access to a BusyBox console w/o authentication
DGND3700v1/DGND3800B: < 3.0.0.8 works with original telnetenable over TCP; >= 3.0.0.8 works with any telnetenable patched for UDP
EX2700: firmware V1.0.1.8 works, gives access to root shell w/o authentication (telnetenable listens on UDP/23)
EX6100: Works with original telnetenable (TCP/23) with credentials super_username/super_passwd (not admin/password as one might think) or Gearguy/Geardog or both. Sometimes it doesn't unlock with first attempt (parser_enable?)
R6700: V1.0.0.2_1.0.1 Tested and working with modified python script of telnetenable.
R7000: Assumed to be working with modified python script of telnetenable, and modified telnetenable binary for linux x86-64. V1.0.4.30_1.1.67 & V1.0.7.2_1.1.93 tested working with linux telnetenable from insaneid github using web GUI credentials. Doesn't work with super_username & super_passwd nvram variables that are still present. Changing them does nothing. The telnet login ignores credentials (telnet -l username router_ip).
R7500: V1.0.0.82 Tested and working with modified python script of telnetenable, and modified telnetenable binary for linux x86-64.
WG602 (unknown version): assumed to work
WGR614 v1-2: unknown; may work
WGR614 v3,v4,v5,v6: known to work
WGR614 v7: known to work (if it does not work for you, try to hard reset your router first)
WGR614 v8 (WGR614L): works, access to a BusyBox console without authentication
WGR614 v9: works, gives access to a BusyBox console without authentication
WGR614 v10: works, gives access to a BusyBox 0.60.0 console without authentication
normally uses the old TCP utility
the latest WNR1000v3 OEM firmware (1.0.2.68_60.0.93NA) modified (board id hex edited) uses the UDP utility
WGT624 (unknown version): assumed to work
WGT624 v2, v3: works
WGT624 V3H1: works (after 6-12 try, reboot, try again cycles)
WN3000RP v1: works; does not require username/password for login, but necessary for telnetenable (Geardog/Gearguy)
WNDR3300 : works. Does not require username/password for login. On connection the '#' prompt is displayed.
WNDR3400v2 v1.0.0.16_1.0.34 works; does not ask for username/password on login. On connection you should be dropped on a '#' prompt.
WNDR3700 V1.0.7.98: known to work - does not ask for username/password. After connection you will be root at BusyBox v1.4.2.
WNDR3800 v1.0.0.16 Tested with the python script of telnetenable.
WNDR4000 v1.0.0.88 works. Does NOT ask for username/password on login. On connection you should be dropped on a '#' prompt.
WNDR4300 V1.0.1.30/34/42 works with the python script. Does NOT ask for username/password on login. On connection you should be dropped on a '#' prompt.
WNDR4500 V1.0.1.40 works with the python script. Does NOT ask for username/password on login. On connection you should be dropped on a '#' prompt.
WNR1000 v1-2: works; does not require username/password for login. On connection the '#' prompt is displayed.
WNR1000 v3: works using the new UDP utility with GUI user/password, using latest OEM firmware 1.0.2.68_60.0.93NA
did not work initially, only having performed a GUI reset after upgrading firmware to latest
BusyBox 0.60.0 worked after a hard reset (power on holding reset button until lights flash)
firmware prior to latest was not tested, but expect the old TCP utility was required, per WGR614v10
WNR2000 v4: works; does not require username/password for login. On connection the '#' prompts is displayed.
WNR2200 v1: works; does not require username/password for login. Uses Gearguy/Geardog and the old TCP method. Displays OpenWrt header on connect (stock firmware)
WNR3500 v1.0.29: works; does not ask for username/password on login. On connection you should be dropped on a '#' prompt.
WNR3500L V1.2.2.44: Works. V1.2.2.48_35.0.55NA: fails. Does NOT ask for username/password on login. Dropped to '#' prompt on connection.
WPN824 v1, V2.0.15_1.0.11: known to work
WPN824 v2: known to work
WPN824 V3: not needed; enable the utelnetd option in Remote Management.

参考 Unlocking the Netgear Telnet Console