先附上脚本地址 https://github.com/frostnotfall/DNSPodDdns

==================================================

目前联通已可获得ipv6地址,遂将原荒野无灯基于 anrip 的脚本添加了ipv6的动态解析支持
荒野无灯原帖:http://koolshare.cn/thread-37553-1-1.html

主要做了以下几点修改:
1. arNslookup (查询域名已解析的IP地址 )修改为 dnspod api post方式
2. 梅林固件重启后不会立刻获取到公网 ipv6 地址,当脚本检测不到 ipv6 地址时会等待 5 分钟后重新获取,还是没有则继续等待 5 分钟 ,以此类推,期间梅林控制台页面会显示叹号,但此时 ipv4 动态解析已经可用
3. 域名,二级域名 的传入参数作为全局变量使用,相关函数的传入参数做了简化

使用此脚本,需:
1.指定 arToken ,Token请去 https://www.dnspod.cn/console/user/security 获取
2.指定 arDdnsCheck “域名” “二级域名(可为空)” 如:
arDdnsCheck “baidu.com” “”  会动态解析 baidu.com 域名
arDdnsCheck “baidu.com” “www”  会动态解析 www.baidu.com 域名
3.因为 ipv4 与 ipv6 使用不同的recordID,使用脚本前先在 dnspod 官方控制台页面添加该域名(或二级域名)的 AAAA 记录,以生成 ipv6 的recordID

提醒:一般用作动态解析的域名,不会做 dns 负载均衡,所以为避免可能出现的问题,尽量只保持一个A记录和一个AAAA记录,避免解析错误,当然CNAME或NS等其他不受影响

之前用的是斐讯K2路由器刷了LEDE固件,做无线AP。

但是WAN口和LAN口都是百兆,平时通过无线传个视频什么的也太慢了。

忍无可忍,最终下单了小米路由器3G。

看硬件应该也够用了。

然后就是考虑固件的事了,原厂固件什么的从不考虑,而且小米的原厂固件功能少得可怜。

LEDE 并入了OpenWrt,现在 18.06 在开发中,17.04 进入维护期,正是青黄不接的时候,小米路由器3G只有snapshot版,而且居然有4个包,还有一个tar包,这蛋疼的。

各固件对比了一下,最终决定刷 Padavan 固件。

Padavan 官方现在不再提供编译好的固件,好在支持MTK的7620和7621,自己做了一下适配,开源在 Github 上了。

 

编译方法 Github 上已经提供了,这里给出刷 breed 及固件的方法。

  1. 官网下载开发版固件,在路由器web页面上刷入。
  2. 登陆小米账号,绑定账号,并下载ssh工具包,刷入方法官方有说明。
  3. 备份数据
    cat /proc/mtd
    dev: size erasesize name
    mtd0: 07f80000 00020000 "ALL"
    mtd1: 00080000 00020000 "Bootloader"
    mtd2: 00040000 00020000 "Config"
    mtd3: 00040000 00020000 "Bdata"
    mtd4: 00040000 00020000 "Factory"
    mtd5: 00040000 00020000 "crash"
    mtd6: 00040000 00020000 "crash_syslog"
    mtd7: 00040000 00020000 "reserved0"
    mtd8: 00400000 00020000 "kernel0"
    mtd9: 00400000 00020000 "kernel1"
    mtd10: 02000000 00020000 "rootfs0"
    mtd11: 02000000 00020000 "rootfs1"
    mtd12: 03580000 00020000 "overlay"
    mtd13: 012a6000 0001f000 "ubi_rootfs"
    mtd14: 030ec000 0001f000 "data"
    
    #!/bin/bash
    dd if=/dev/mtd0 of=/extdisks/sda4/ALL.bin
    dd if=/dev/mtd1 of=/extdisks/sda4/Bootloader.bin
    dd if=/dev/mtd2 of=/extdisks/sda4/Config.bin
    dd if=/dev/mtd3 of=/extdisks/sda4/Bdata.bin
    dd if=/dev/mtd4 of=/extdisks/sda4/Factory.bin
    dd if=/dev/mtd5 of=/extdisks/sda4/crash.bin
    dd if=/dev/mtd6 of=/extdisks/sda4/crash_syslog.bin
    dd if=/dev/mtd7 of=/extdisks/sda4/reserved0.bin
    dd if=/dev/mtd8 of=/extdisks/sda4/kernel0.bin
    dd if=/dev/mtd9 of=/extdisks/sda4/kernel1.bin
    dd if=/dev/mtd10 of=/extdisks/sda4/rootfs0.bin
    dd if=/dev/mtd11 of=/extdisks/sda4/rootfs1.bin
    dd if=/dev/mtd12 of=/extdisks/sda4/overlay.bin
    dd if=/dev/mtd13 of=/extdisks/sda4/ubi_rootfs.bin
    dd if=/dev/mtd14 of=/extdisks/sda4/data.bin
    

    备份到最后一个mtd14可以会出现如下出错提示: dd: can’t open ‘/dev/mtd14’: Device or resource busy

    该分区备份不成功无所谓,关键的mtd0-mtd4备份下来就行了。

  4. 如需恢复
    mtd write /extdisks/sda4/Bootloader.bin Bootloader
    mtd write /extdisks/sda4/Config.bin Config
    mtd write /extdisks/sda4/Bdata.bin Bdata
    mtd write /extdisks/sda4/Factory.bin Factory
    mtd write /extdisks/sda4/crash.bin crash
    mtd write /extdisks/sda4/crash_syslog.bin crash_syslog
    mtd write /extdisks/sda4/reserved0.bin reserved0
    mtd write /extdisks/sda4/kernel0.bin kernel0
    mtd write /extdisks/sda4/kernel1.bin kernel1
    mtd write /extdisks/sda4/rootfs0.bin rootfs0
    mtd write /extdisks/sda4/rootfs1.bin rootfs1
    mtd write /extdisks/sda4/overlay.bin overlay
    mtd write /extdisks/sda4/ubi_rootfs.bin ubi_rootfs
    mtd write /extdisks/sda4/data.bin data
    
  5. 刷入breed

    上传breed固件:breed-mt7621-xiaomi-r3g.bin

    mtd write breed-mt7621-xiaomi-r3g.bin Bootloader

    刷入后重启路由器

    breed 控制台网关:192.168.1.1

    路由器接入有线,电脑手动设置IP:19.2.68.1.X

    按住reset键的同时开机,路由器LED疯狂闪烁时松开reset键,访问 192.168.1.1 web控制台

  6. 在 breed 内更新固件,也可在 breed 内再备份一次,恢复时更方便

目前路由器做了端口映射,外网访问路由器及ESXI的web client都需要输入端口号,但是强迫症总是看着不舒服

既然实现了顶级域名的动态解析,是否可用反向代理的方式来代替端口映射呢,于是测了下443端口,好,没有被block,然后就是用nginx进行反向代理了,之前的极路由内置的就是nginx,极路由基于openwrt,所以路由器上运行nginx可行,那么有没有梅林可用的nginx呢?找了半天终于找到了,而nginx反向代理https需要ssl证书,虽说自建的ssl证书也可行但既然有免费的为什么不用呢,沃通证书不考虑,Let’s Encrypt证书比较新奇就用这个吧,使用DNS验证更是相当方便。

以下是步骤:

1、挂载U盘。

Enware-ng推荐安装在扩展设备上,内置存储虽然也可但毕竟寸土寸金,而且扩展看设备空间大不怕折腾

mkdir /mnt/sda1 && mount /dev/sda /mnt/sda1

2、梅林固件安装Enware-ng,按照说明进行安装,然后执行

opkg install nginx

3、获得Let’s Encrypt证书,DNS方式验证,github地址:https://github.com/xdtianyu/scripts/tree/master/le-dns,此脚本依赖另一个脚本letsencrypt.sh,须先下载letsencrypt.sh并进入letsencrypt.sh才可调用letsencrypt.sh脚本(目录名和脚本名都是letsencrypt.sh)。

mkdir -p /opt/usr/ssl/ && cd /opt/usr/ssl/
git clone https://github.com/lukas2511/letsencrypt.sh.git
cd letsencrypt.sh
wget https://github.com/xdtianyu/scripts/raw/master/le-dns/le-cloudxns.sh
wget https://github.com/xdtianyu/scripts/raw/master/le-dns/cloudxns.conf
chmod +x le-cloudxns.sh

修改cloudxns.conf

API_KEY="YOUR_API_KEY"
SECRET_KEY="YOUR_SECRET_KEY"
DOMAIN="example.com"
CERT_DOMAINS="example.com www.example.com im.example.com"
#ECC=TRUE

修改其中的 API_KEY 及 SECRET_KEY 为您的 cloudxns api key ,修改 DOMAIN 为你的根域名,修改 CERT_DOMAINS 为您要签的域名列表,需要 ECC 证书时请取消 #ECC=TRUE 的注释。

4、执行le-cloudxns.sh

./le-cloudxns.sh cloudxns.conf

如果是一般linux环境下,直接执行不会有任何问题,但是在梅林固件下,会因为缺少一些命令而导致执行失败,所以在执行le-cloudxns.sh前需进行以下两步:

①安装缺少的相关命令

opkg install bash coreutils-mktemp

②由于bash是额外安装的,路径不再是不再是默认的/bin/bash,所以脚本的解释行要修改以下,查看当前目录下的所有*.sh文件的第一行,如果为

#!/bin/bash

则修改为

#!/usr/bin/env bash

5、修改nginx配置文件nginx.conf


user  nobody;
worker_processes  2;

events {
    use epoll;
    worker_connections  64;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile	on;
    tcp_nopush	on;
    keepalive_timeout	65;

    server {
		listen	443;
		server_name domain;

		ssl on;
		ssl_certificate	/opt/usr/ssl/letsencrypt.sh/certs/fullchain.pem;
		ssl_certificate_key /opt/usr/ssl/letsencrypt.sh/certs/privkey.pem; 
		ssl_ciphers	EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5;
		ssl_prefer_server_ciphers   on;
	
		location / {
			proxy_set_header Host $host;
			proxy_set_header X-Forwarded-For $remote_addr;
			proxy_pass https://192.168.199.1:7520/;
	}
}
	server {
		listen	443;
		server_name domain;
	
		ssl on;
		ssl_certificate	/opt/usr/ssl/letsencrypt.sh/certs/fullchain.pem;
		ssl_certificate_key /opt/usr/ssl/letsencrypt.sh/certs/privkey.pem; 
		ssl_ciphers	EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5;
		ssl_prefer_server_ciphers   on;
	
		location / {
			proxy_set_header Host          $host;
			proxy_set_header X-Real-IP     $remote_addr;
			proxy_set_header X-Forward-For $remote_addr;
			proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
			proxy_pass https://192.168.199.200/;
		}
    }

}

6、启动nginx

nginx

补充:
到这里就可以运行了,但是在我的是设备上(RV 6300 V2)重启就出现问题了。
问题出现在U盘挂载目录上,Enware-ng默认认为U盘挂载到/mnt/sda1上,但实际上是挂载到了/mnt/sda上,所以要修改一下:

修改/jffs/scripts/post-mount文件

#!/bin/sh

if [ "$1" = "/tmp/mnt/sda1" ] ; then #将sda1改为sda
ln -nsf $1/entware-ng.arm /tmp/opt
fi

sleep 2
if [ -f /opt/swap ]
then
echo -e "Mounting swap file..."
swapon /opt/swap
else
echo -e "Swap file not found or /opt is not mounted..."
fi

重启然后查看存在nginx进程,问题解决

最后在/jffs/scripts/services-start加入定时任务

cru a sslupdate "42 4 10/25 * * /opt/usr/ssl/letsencrypt.sh/le-dnspod.sh /opt/usr/ssl/letsencrypt.sh/dnspod.conf >> /opt/var/log/le-dnspod.log 2>&1"

梅林固件默认不打开443端口,而且在管理界面也不允许设置443端口,所以使用iptables命令打开443端口

iptables -I INPUT 7 -p tcp --dport 443 -j ACCEPT

但是随便设置一条端口转发规则都会使443失效,要解决这个问题可以建立一个定时脚本,检测443端口

vim open443.sh
#!/bin/sh
path=`iptables -nvL | grep 443 | awk '{print $1}'`
if [ ! -n "$path" ]
then
iptables -I INPUT 7 -p tcp --dport 443 -j ACCEPT
fi

公司的局域网很复杂,之前一直没有时间了解一下公司的网络拓扑结构。

用到的工具只需要路由追踪工具和ping工具。

路由追踪工具:

windows端:tracert命令,Best Trace

Linux端:traceroute命令

Android端:Best Trace APP

我所在的部门有两台路由器,一台交换机,三个网段

交换机:192.168.71.*

TP-LINK路由器:192.168.0.*

H3C路由器:192.168.0.*

OK,介绍完毕

 

交换机IP段:

首先PC进行路由追踪,PC连接交换机,IP地址为192.167.71.172

可以看到数据包经过了3个节点,到第三个节点到达公网IP。

使用windows下的tracert命令测试,结果相同

 

H3C路由器IP段:

然后在H3C路由器下进行路由追踪,正巧一台内网服务器在其IP段,SSH登陆后测试

数据包经过了4个节点到达外网,其中第二跳与交换机所在IP段第一跳相同,说明H3C路由器WAN口与交换机处在同一级

 

TP-LINK路由器:

TP-LINK路由器走的是另一条外网,使用手机连入WIFI进行测试

可以看到数据包先后经历了5跳到达外网,而部门这几台网络设备都接在192.168.71.254这台路由器上,然后下一跳是172.16.100.253,依旧是内网,下一跳是外网的出口,可以看到这台路由器是公司局域网的根路由器

所以公司的网络拓扑结构基本上就出来了,而后发现TP-LINK路由器下的设备可以访问IP段192.167.71.*的设备,应该是做了静态路由

 

所以最终的网络拓扑结构图为

极路由是基于openwrt修改的,而openwrt是基于linux的,哈哈,有玩头了。

日前使用迅雷快鸟PC端时总是感觉不舒服,提升带宽按理来说应该是局域网根设备所做的工作,而不是让PC来加速,不开电脑就不能享受提速,便利性大打折扣,正常的逻辑应该是路由器拨号后立即进行加速,两步本应合成为一步,使带宽加速不再受限于PC端与手机端。

而小米路由器却有这功能,小米路由器mini采用的处理器是联发科7620,极路由也是采用的7620,是否存在移植的可能?

更为方便的是,github上@fffonion已经做到了,剩下的就好办了

这里解释一下:

源码是Python写的,运行 python ./swjsq.py生成ipk文件,安装,会生成swjsq文件,这个文件就是用来加速的脚本文件

作者的步骤:

1、在路由器上安装Python,

2、生成ipk文件,然后安装

3、运行swjsq

4、设置自启动

本人在实际过程中发现:本着性能最大化,文件最精简的原则,发现1、2步骤完全不用在路由器上进行。

所以实际步骤:

1、在本地安装Python

2、CD到Python根目录,

3、新建 swjsq.account.txt,填入用户名,密码,如ahaha,123456,保存

4、执行命令python ./swjsq.py,生成ipk文件

5、解压ipk文件,打开data.tar.gz,得到.\bin\swjsq文件

6、连接极路由,放到usr\bin目录下,chmod 777 swjsq

7、./swjsq测试运行是否成功

8、设置自启动,rc.local添加(/usr/bin/swjsq &)

OK!!!

注意:不管哪种办法都要路由器安装支持https的wget或curl