王某某的笔记

记录我的编程之路

http协议代理

windows下测试的,Git for Windows 原生只支持http 和 https代理

使用HTTPS的方式克隆代码

1
git clone https://github.com/xxx/xxx.git

使用socks5代理

1
2
3
4
git config --local http.proxy 'socks5://127.0.0.1:1080'

git config --local https.proxy 'socks5://127.0.0.1:1080'

使用http 代理

1
2
3
4
git config --local https.proxy http://127.0.0.1:8080

git config --local https.proxy https://127.0.0.1:8080

全局或单个项目配置

全局配置用 git config –global http.proxy……
单个项目用 git config –local http.proxy……

一般我们设置单个项目就行了,内部项目一般不需要使用代理

查看

命令方式

查看当前项目配置,前提是处于项目目录下

1
git config --list

不再任何项目下时,查看的就是全局配置

查看全局配置

1
2
git config --global --list

文件方式配置

查看全局配置文件

1
cat ~/.gitconfig

查看单个项目的配置文件
先进入项目的.git目录下

1
2
3
4
pwd
/d/code/xxx/xxx/.git

MINGW64 /d/code/xxx/xxx/.git (GIT_DIR!)

在查看config文件

1
2
$ cat config

取消代理

1
2
3
git config --local --unset http.proxy

git config --local --unset https.proxy

或者修改文件,删掉对应记录

1
vi ~/.gitconfig

全局的参考上面,用:–global

测试

不启动代理时:

1
2
3
4
git clone https://github.com/xxx/xxx.git
Cloning into 'xxxx'...
fatal: unable to access 'https://github.com/xxx/xxx.git/': Failed to connect to 127.0.0.1 port 1080: Connection refused

git协议转http协议

之前是通过git协议克隆的项目

1
git clone git@github.com:xxx/xxx.git

查看

1
2
3
4
$ git remote -v
origin git@github.com:xxx/xxx.git (fetch)
origin git@github.com:xxx/xxx.git (push)

删除origin,原来是git协议

1
git remote remove origin

重新设置origin,这次用https协议

1
git remote add origin https://github.com/xxx/xxx.git

为分支设置追踪信息

1
git branch --set-upstream-to=origin/<branch> master

设置用户和邮箱

1
2
git config --local user.name "wwh"
git config --local user.email "wangwen135@gmail.com"

为什么要单独设置用户名和密码
全局设置的用户名和邮箱是另外一个,用于提交公司的代码

1、Burp Suite设置代理

设置代理.png

拦截服务端响应.png

也可在这里配置拦截某些匹配条件的服务端响应,如果条件能控制后就不用下面那样一个个的调试了

启动拦截

启用拦截.png

2、其他端设置代理

如手机端,浏览器等等,配置为上面的Burp Suite 代理

3、访问目标网页并进行拦截

访问目标网页,在代理的拦截选项中右键选择 Do Intercept –> Respense to this requests

执行拦截.png

4、然后forward发送,可以看到服务器端返回的数据

转发.png

这里是Response

5、修改响应数据,此时数据还未传递到客户端(手机、浏览器等)

修改响应数据.png

这里是文本内容,随意修改

6、点击上面的forward,将结果返回给客户端

客户端收到的是修改过后的响应


其他

设置拦截匹配规则

拦截的请求太多,可以在Options中设置拦截规则,如只配某个站点的请求

拦截规则.png

设备信息

EPON天翼网关(4口单频)

设备型号:PT926E

1、插一个有文件的u盘到光猫上

2、正常登陆光猫浏览文件

相关信息都在光猫的背面
如:
默认终端配置地址:192.168.1.1
默认终端配置账号:useradmin
U盘浏览文件.png

3、修改文件夹的名字,为..

F12编辑网页,修改超链接为 两个点,完了保存(ctrl+enter),之后再在网页上点击,就能 退到上一级目录了

退回到上级目录.png

或者直接F12 再 ESC,打开控制台 ,输入:

1
openfile("..", false)

执行前需要先选择一下页面的元素

4、一直退到var

找到 config目录下的 lastgood.xml 文件,然后复制到u盘

/var/config/lastgood.xml

然后拔掉U盘,在电脑上打开这个文件

搜索 SUSER
密码.png

5、超级用户的用户名

telecomadmin

6、登陆光猫

打开: http://192.168.1.1/
输入用户:telecomadmin
和上面找到的密码

光猫后台.png

通过8888 在路由器上做一个 端口转发 访问光猫

路由器上配置防火墙规则

1
2
iptables -t nat -A PREROUTING -p tcp --dport 8888 -j DNAT --to-destination 192.168.1.1:80
iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.1 --dport 80 -j SNAT --to-source 192.168.1.100

192.168.1.100 是路由器配置的光猫段IP

http://xxx.ddns.net:8888/cgi-bin/luci

http://123.9.171.234:8888/cgi-bin/luci

MIWIFI开启SSH工具

https://d.miwifi.com/rom/ssh?userId=76878915

1722356696521.png

下载工具包

1686659398598.png

ROM 下载

http://www1.miwifi.com/miwifi_download.html

1686659423869.png

刷机教程

https://www.xiaomi.cn/post/19154125

在网页上升级成开发版

1686659451976.png

1686659536089.png

1686659558366.png

开启SSH

将miwifi_ssh.bin 文件复制到u盘根目录

将U盘插入到路由器的USB口上,注意U盘分区情况,用一个没有分区的U盘

按住reset按钮之后重新接入电源,指示灯变为黄色闪烁状态即可松开reset键

注意按Rest久一点

1686659609994.png

Canal

canal [kə’næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费

https://github.com/alibaba/canal

https://github.com/alibaba/canal/releases/tag/canal-1.1.4

工作原理

MySQL主备复制原理

  • MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志事件binary log events,可以通过 show binlog events 进行查看)
  • MySQL slave 将 master 的 binary log events 拷贝到它的中继日志(relay log)
  • MySQL slave 重放 relay log 中事件,将数据变更反映它自己的数据

canal 工作原理

  • canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议
  • MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )
  • canal 解析 binary log 对象(原始为 byte 流)

Canal Admin

canal 1.1.4版本,迎来最重要的WebUI能力,引入canal-admin工程,支持面向WebUI的canal动态管理能力,支持配置、任务、日志等在线白屏运维能力,具体文档:Canal Admin Guide

https://github.com/alibaba/canal/wiki/Canal-Admin-Guide

https://github.com/alibaba/canal/wiki/Canal-Admin-QuickStart

Canal java 客户端

https://github.com/alibaba/canal/wiki/ClientExample

使用

Mysql 开启binlog日志

先开启 Binlog 写入功能,配置 binlog-format 为 ROW 模式,my.cnf 中配置如下

1
2
3
4
5
6
7
8
9
10
11
# 唯一标识 不要和 canal 的 slaveId 重复
server-id=1

# binlog文件名
log-bin=mysql-binlog

# 选择 ROW 模式
binlog-format=ROW

# 要忽略的数据库
binlog-ignore-db=mysql

启动mysql后可以在data目录中看到新增的文件

  • mysql-binlog.000001
  • mysql-binlog.index

查看一下状态:

1
2
3
4
SHOW MASTER STATUS;

"File" "Position" "Binlog_Do_DB" "Binlog_Ignore_DB" "Executed_Gtid_Set"
"mysql-binlog.000001" "154" "" "mysql" ""

新建账号

授权 canal 链接 MySQL 账号具有作为 MySQL slave 的权限

1
2
3
4
5
CREATE USER canal IDENTIFIED BY 'canal';

GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';

FLUSH PRIVILEGES;

查看一下:
SELECT USER,HOST FROM mysql.user;

Canal 配置

下载地址:https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.deployer-1.1.4.tar.gz

解压缩下载的canal-deployer压缩包

conf/canal.properties

默认配置,注意:

1
2
3
4
5
6
7
8
# 服务端口配置
canal.port = 11111

# 客户端连接账号配置(目前未设置)
# canal.user = canal
# canal.passwd = E3619321C1A937C46A0D8BD1DAC39F93B27D4458
# 客户端连接端点名
canal.destinations = example

conf/example/instance.properties

默认配置,注意:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
## canal伪装的slaveId(只要和已有的节点ID不冲突即可)
canal.instance.mysql.slaveId=99

# 数据库连接配置
canal.instance.master.address=127.0.0.1:3306
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal
canal.instance.connectionCharset = UTF-8

# 监听对象(数据库/数据表) 逗号分隔
#canal.instance.filter.regex=test.table1,test.table2
canal.instance.filter.regex=.*\\..*

# 监听黑名单(当需要监听很多表, 只有少量表不需要监听时配置)
canal.instance.filter.black.regex=

运行

  • 启动 - ${canal}/bin/start.sh
  • 停止 - ${canal}/bin/stop.sh
  • 重启 - ${canal}/bin/restart.sh

如果启动报错,如:

1
ch.qos.logback.core.LogbackException: Unexpected filename extension of file [file:/D:/dev/canal/canal.deployer-1.1.4/conf/]. Should be either .groovy or .xml

修改启动脚本:

1
2
3
4
5
6
7
8
@rem set logback_configurationFile=%conf_dir%\logback.xml

去掉 @rem

或者去掉

-Dlogback.configurationFile="%logback_configurationFile%"

查看日志

server日志 - ${canal}/logs/canal/canal.log

1
2
3
4
......
start the canal server[10.10.20.112(10.10.20.112):11111]
Start prometheus HTTPServer on port 11112.
## the canal server is running now ......

instance日志 - ${canal}/logs/example/example.log

1
2
RegisterSlaveCommandPacket[reportHost=127.0.0.1,reportPort=59599,reportUser=canal,reportPasswd=canal,serverId=99,command=21]
position:BinlogDumpCommandPacket[binlogPosition=973,slaveServerId=99,binlogFileName=mysql-binlog.000001,command=18]

完成后就可以用下面的java代码进行测试了

Canal Admin 配置

下载地址:https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.admin-1.1.4.tar.gz

解压canal.admin-1.1.4.tar.gz

conf/application.yml

默认配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
server:
port: 8089
spring:
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8

spring.datasource:
address: 127.0.0.1:3306
database: canal_manager
username: canal
password: canal
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://${spring.datasource.address}/${spring.datasource.database}?useUnicode=true&characterEncoding=UTF-8&useSSL=false
hikari:
maximum-pool-size: 30
minimum-idle: 1

canal:
adminUser: admin
adminPasswd: admin

注意:这里使用的是上面新建canal 账号,此时需要赋权

1
2
3
GRANT SELECT, INSERT, UPDATE, DELETE ON `canal_manager`.* TO 'canal'@'%';

FLUSH PRIVILEGES;

导入初始化SQL

1
2
3
4
mysql -h127.0.0.1 -uroot -p

# 导入初始化SQL
> source conf/canal_manager.sql

初始化SQL脚本里会默认创建canal_manager的数据库,建议使用root等有超级权限的账号进行初始化

启动

1
sh bin/startup.sh

查看 admin 日志

1
vi logs/admin.log

访问

http://127.0.0.1:8089/

默认密码:admin/123456


Canal 与 Canal admin 集成

canal-admin设计上是为canal提供整体配置管理、节点运维等面向运维的功能,提供相对友好的WebUI操作界面,方便更多用户快速和安全的操作

canal-admin的核心模型主要有:

  1. instance,对应canal-server里的instance,一个最小的订阅mysql的队列
  2. server,对应canal-server,一个server里可以包含多个instance
  3. 集群,对应一组canal-server,组合在一起面向高可用HA的运维

修改canal配置文件

修改canal配置文件让其注册到 canal-admin

使用canal_local.properties的配置覆盖canal.properties

1
2
3
4
5
6
7
8
9
10
11
# register ip
canal.register.ip =

# canal admin config
canal.admin.manager = 127.0.0.1:8089
canal.admin.port = 11110
canal.admin.user = admin
canal.admin.passwd = 4ACFE3202A5FF5CF467898FC58AAB1D615029441
# admin auto register
canal.admin.register.auto = true
canal.admin.register.cluster =

原本canal-server运行所需要的canal.properties/instance.properties配置文件就需要在web ui上进行统一运维,每个server只需要以最基本的启动配置 (比如知道一下canal-admin的manager地址,以及访问配置的账号、密码即可)

canal-admin 使用

canal-amdin 》 server管理 》 新建Server

  • 所属集群:单机
  • server名称:测试
  • Server IP:192.168.31.111
  • admin端口:11110

注意IP,如果canal启动不了,就需要去看看日志,是不是ip配置错误了
managerAddress:127.0.0.1:8089 can’t not found config for [10.10.20.112:11110]

操作 》 配置 可以修改canal server的配置

1
2
3
4
5
6
7
8
9
# tcp bind ip
canal.ip =
# register ip to zookeeper
canal.register.ip =
canal.port = 11111
canal.metrics.pull.port = 11112
# canal instance user/passwd
# canal.user = canal
# canal.passwd = E3619321C1A937C46A0D8BD1DAC39F93B27D4458

注释掉canal的用户名密码,不然会报错,不知道为啥
这里默认的用户名密码是 canal/canal

canal-amdin 》 Instance管理 》 新建Instance

  • Instance名称:demo
  • 所属集群/主机:测试

载入模板

修改配置

1
2
3
4
5
6
7
8
canal.instance.mysql.slaveId=99

canal.instance.dbUsername=canal
canal.instance.dbPassword=canal
canal.instance.connectionCharset = UTF-8
canal.instance.filter.regex=.*\\..*
canal.instance.filter.black.regex=

这里只改slaveId=99
要注意数据库连接信息

重新启动canal

查看日志

此时可以看到 server 和 instance 都是启动状态

使用java客户端进行测试

单机模式 和 用canal-admin 配置两种方式都用下面的代码测试

新建一个maven项目

导入依赖

1
2
3
4
5
<dependency>
<groupId>com.alibaba.otter</groupId>
<artifactId>canal.client</artifactId>
<version>1.1.0</version>
</dependency>

canal server 的用户名密码配置在 canal.properties 文件中,使用canal-amdin时配置在网页中
默认的用户名密码为:canal/canal

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package com.wwh.canal.test;

import java.net.InetSocketAddress;
import java.util.List;

import com.alibaba.otter.canal.client.CanalConnectors;
import com.alibaba.otter.canal.client.CanalConnector;
import com.alibaba.otter.canal.common.utils.AddressUtils;
import com.alibaba.otter.canal.protocol.Message;
import com.alibaba.otter.canal.protocol.CanalEntry.Column;
import com.alibaba.otter.canal.protocol.CanalEntry.Entry;
import com.alibaba.otter.canal.protocol.CanalEntry.EntryType;
import com.alibaba.otter.canal.protocol.CanalEntry.EventType;
import com.alibaba.otter.canal.protocol.CanalEntry.RowChange;
import com.alibaba.otter.canal.protocol.CanalEntry.RowData;

public class CanalTest {

public static void main(String args[]) {
System.out.println(AddressUtils.getHostIp());

// 创建链接
CanalConnector connector = CanalConnectors
.newSingleConnector(new InetSocketAddress(AddressUtils.getHostIp(), 11111), "demo", "", "");
// destination 配置为 example 或者 demo

int batchSize = 1000;
int emptyCount = 0;
try {
connector.connect();
connector.subscribe(".*\\..*");
connector.rollback();
int totalEmptyCount = 120;
while (emptyCount < totalEmptyCount) {
Message message = connector.getWithoutAck(batchSize); // 获取指定数量的数据
long batchId = message.getId();
int size = message.getEntries().size();
if (batchId == -1 || size == 0) {
emptyCount++;
System.out.println("empty count : " + emptyCount);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
} else {
emptyCount = 0;
// System.out.printf("message[batchId=%s,size=%s] \n", batchId, size);
printEntry(message.getEntries());
}

connector.ack(batchId); // 提交确认
// connector.rollback(batchId); // 处理失败, 回滚数据
}

System.out.println("empty too many times, exit");
} finally {
connector.disconnect();
}
}

private static void printEntry(List<Entry> entrys) {
for (Entry entry : entrys) {
if (entry.getEntryType() == EntryType.TRANSACTIONBEGIN
|| entry.getEntryType() == EntryType.TRANSACTIONEND) {
continue;
}

RowChange rowChage = null;
try {
rowChage = RowChange.parseFrom(entry.getStoreValue());
} catch (Exception e) {
throw new RuntimeException("ERROR ## parser of eromanga-event has an error , data:" + entry.toString(),
e);
}

EventType eventType = rowChage.getEventType();
System.out.println(String.format("================&gt; binlog[%s:%s] , name[%s,%s] , eventType : %s",
entry.getHeader().getLogfileName(), entry.getHeader().getLogfileOffset(),
entry.getHeader().getSchemaName(), entry.getHeader().getTableName(), eventType));

for (RowData rowData : rowChage.getRowDatasList()) {
if (eventType == EventType.DELETE) {
printColumn(rowData.getBeforeColumnsList());
} else if (eventType == EventType.INSERT) {
printColumn(rowData.getAfterColumnsList());
} else {
System.out.println("-------&gt; before");
printColumn(rowData.getBeforeColumnsList());
System.out.println("-------&gt; after");
printColumn(rowData.getAfterColumnsList());
}
}
}
}

private static void printColumn(List<Column> columns) {
for (Column column : columns) {
System.out.println(column.getName() + " : " + column.getValue() + " update=" + column.getUpdated());
}
}

}

临时启用telnet和ftp

http://192.168.1.1:8080/bd/modify_hide.asp

telnet访问

telnet 端口号是23

telent用户名密码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
telnet 192.168.1.1

#用户名
admin

#密码
TeleCom_1234


# 再切换到超级用户

su telecomadmin

#密码
TeleCom_xxxxxx

密码:(后面6位是设备标识的后六位,光猫背面有)
不能直接用telecomadmin

ftp访问

ftp控制端口一般为21,而数据端口不一定是20,这和FTP的应用模式有关,如果是主动模式,应该为20,如果为被动模式,由服务器端和客户端协商而定

防火墙策略

开放/关闭 FTP

1
2
3
4
5
6
7
8
#添加规则
iptables -I ftp_account 1 -i br0 -p tcp --dport 21 -j ACCEPT

#查看
iptables -L ftp_account -n -v

#删除规则
iptables -D ftp_account 1

ftp用户名密码

忘记了。。。。

SSH

开放关闭SSH

1
2
3
4
5
6
7
8
9
10
11
12
13
//开
iptables -I inacc 1 -i br0 -p tcp --dport 22 -j ACCEPT
//查看
iptables -L inacc -n -v --line-numbers
//关
iptables -D inacc 1


# SSH用户名密码就是电信的超级密码
# SSH 算法协议较老 需要增加额外的弱密码算法 ssh

telecomadmin@192.168.1.1 -oKexAlgorithms=+diffie-hellman-group1-sha1 -oCiphers=+3des-cbc

错误日志配置

如果Nginx发生异常,它将在错误日志中记录所有事件

启用错误日志,使用error_log指令
语法:

1
error_log log_file log_level ;
  • 第一个参数表示日志文件路径,必填
  • 第二个参数表示日志事件的安全级别, debug | info | notice | warn | error | crit

全局日志配置:

1
error_log /var/log/nginx/error.log;

为单个虚拟主机设置单独的错误日志

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
http {
...
...
error_log /var/log/nginx/error_log;
...
server {
listen 80;
server_name example1.com;
error_log /var/log/nginx/example1.error_log warn;
...
}
server {
listen 80;
server_name example2.com;
error_log /var/log/nginx/example2.error_log debug;
...
}
}

访问日志配置

在HTTP中使用access_log指令启用访问日志

1
access_log log_file log_format ;
  • log_file 指定日志文件路径和名称,必须要填
  • log_format 是可选的用于指定日志格式,不设置则将以默认的组合格式写入日志

默认情况下,访问日志是在HTTP块下定义的,因此,所有虚拟主机的访问日志将存储在同一配置文件中。

如:
指定格式的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;

...
...
server {
...
...
}

或使用默认格式

1
2
3
4
5
http {
...
access_log /var/log/nginx/access.log;
...
}

如果需要将每个虚拟主机的日志单独记录,则可以为每个server块单独进行设置

1
2
3
4
5
6
7
8
9
10
11
12
13
http {
...
access_log /var/log/nginx/access.log;
...
server {
listen 80;
Server_name example.com
access_log /var/log/nginx/example.access.log;
...
...
}
}

自定义日志格式

Nginx内置的默认格式

1
2
3
log_format combined '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';

格式参数说明

参数 说明
$remote_addr 客户端ip地址(若使用了高匿代理服务器,显示代理服务ip),例如 123.57.78.100
$remote_port 客户端的端口,例如 54673
$http_x_forwarded_for 可以记录客户端IP,通过代理服务器来记录客户端的ip地址
$remote_user 用户记录远程客户端的用户名称,一般为 ‘-‘
$http_host($host) 浏览器中输入的地址(IP或域名),例如: proxy.mimvp.com 或 123.57.78.100
$time_local 用具记录访问时间和时区,日期格式:18/Feb/2017:14:10:17 +0800
$time_iso8601 用具记录访问时间和时区,日期格式:2017-02-18T14:10:17+08:00
$status 响应状态码 ‘404’页面找不到 ‘200’成功等
$request_time 整个请求的总时间,从接收用户请求的第一个字节到发送完响应数据的时间,即包括接收请求数据时间,程序响应时间,输出响应数据时间
$bytes_sent 传输给客户端的全部字节数,包含响应头等信息
$body_bytes_sent 给客户端发送的文件主题内容字节数,响应头不计算在内
$request_length 请求的长度(包括请求的地址,http请求头和请求主体)
$http_referer url跳转来源,用来记录从哪个页面链接访问过来的,例如:https://proxy.mimvp.com
$upstream_addr 后台提供服务的地址(即转发处理的目标地址)
$upstream_response_time 从nginx向后端建立连接开始到接受完数据然后关闭连接为止的时间
$upstream_status upstream状态,例如 200
$http_user_agent 用户所使用的代理(一般为浏览器)
$request 用于记录请求的url以及请求方法,格式:”GET /free.php?proxy=in_tp HTTP/1.1”
$request_method 用于记录请求的url以及请求方法,格式:GET、POST
$request_body 客户端的请求主体,此变量可以在location中使用,将请求主体通过proxy_pass,fastcgi_pass,uwsgi_pass和scgi_pass传递给下一级的代理
$args 请求中的参数值,格式:”proxy=in_tp”
$uri 请求中的当前URI(不带请求参数,参数位于$args),可以不同于浏览器传递的$request_uri的值,它可以通过内部重定向,或者使用index指令修改,格式:”/free.php”
$request_uri 这个变量等于包含一些客户端请求参数的原始URI,它无法修改
$ssl_protocol SSL协议版本,例如 TLSv1、TLSv2
$ssl_cipher SSL协议的交换数据中的算法,例如 RC4-SHA,ECDHE-RSA-AES128-GCM-SHA256,ECDHE-RSA-AES256-GCM-SHA384
$geoip_country_code 用户地理位置代码(国家代码)
$http_accept_language 用户浏览器语言。如:上例中的 “es-ES,es;q=0.8”
$http_true_client_ip 客户端的真实ip地址
1
2
3
4
5
6
7
8
http {
log_format custom '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" "$gzip_ratio"';

access_log /var/log/nginx/example.access.log custom;
......
}

很好的工具,用了FTP、Aria2、FileBrowser、AliDDNS 等

github 地址

https://github.com/monlor/MIXBOX-ARCHIVE

下面为操作步骤记录

安装

一键安装

1
2
sh -c "$(curl -kfsSl https://cdn.jsdelivr.net/gh/monlor/mbfiles/install.sh)" && source /etc/profile &> /dev/null

过程记录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
***********************************************
** **
** Welcome to MIXBOX ! **
** **
***********************************************
【Tools】: 请按任意键安装工具箱(Ctrl + C 退出).

请在以下路径中选择一个合适的工具箱安装位置和一个用户文件目录:
小米路由器硬盘版推荐 工具箱安装位置:/etc,用户目录:/userdisk/data
小米路由器普通版推荐 工具箱安装位置:/etc,用户目录:/extdisks/sda*
如果未插入u盘,用户目录可与工具箱安装位置相同!
1./
2./dev
3./tmp
4./
5./extdisks
6./data
7./userdisk
8./userdisk/data
9./etc
...
...
请输入你的工具箱安装路径[可手动输入路径]:9
请输入你的用户文件目录[可手动输入路径]:8
【Tools】: 下载工具箱文件...
【Tools】: 解压工具箱文件
【Tools】: 初始化工具箱配置信息...
【Tools】: 执行工具箱初始化脚本...
【Tools】: 工具箱初始化脚本启动...
【Tools】: 检查环境变量配置
【Tools】: 检查定时任务配置
【Tools】: 检查工具箱开机启动配置
【Tools】: 执行工具箱监控脚本
【Tools】: 防火墙重启插件检查
【Tools】: 运行用户自定义脚本
【Tools】: 工具箱安装完成!
【Tools】: 运行mixbox命令即可配置工具箱
root@XiaoQiang:~#


使用

运行工具

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# mixbox
获取工具箱插件列表...
***************************************
***** MIXBOX 工具箱 *****
***************************************
当前版本:[0.1.9.13] 最新版本:[0.1.9.13]
设备型号:[R2D] 核心温度:[68°C]
***************************************
00. 退出工具箱
01. 已安装插件
02. 未安装插件
03. 工具箱管理

请输入你的选择:

其他

1
mixbox help

FTP

安装ftp:

1
2
3
4
请输入vsftpd用户名:xxx
请输入vsftpd密码:xxx123456
请输入xxx访问目录:/userdisk/data/ftp

创建目录,修改目录权限

1
2
# mkdir /userdisk/data/ftp
# chmod 777 ftp

访问

资源管理器输入:

ftp://xxx.ddns.net

再输入用户名和密码

Aria2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
********* Aria2 ***********
[Linux下一款高效的下载工具]
启动aria2服务[1/0] [回车即1]:1
修改aria2端口号()?[1/0] 0
修改aria2配置(空, /userdisk/data/下载)?[1/0] /userdisk/data/aria2Download
请输入aria2外网访问配置[1/0][回车即1]:1
【Aria2】: 正在停止aria2服务...
【Aria2】: 删除nat-start触发...
【Aria2】: 正在启动aria2服务...
【Aria2】: 加载aria2配置...
【Aria2】: 更新bt-tracker
【Aria2】: 生成aria2本地web页面
【Aria2】: 添加nat-start触发事件...
【Aria2】: 启动aria2服务完成!
【Aria2】: 访问[http://192.168.31.1/backup/log/aria2]管理服务
【Aria2】: jsonrpc地址:http://192.168.31.1:6800/jsonrpc

FileBrowser

1
2
3
4
5
6
7
8
9
10
11
********* FileBrowser ***********
[Web文件浏览器]
启动filebrowser服务[1/0] [回车即1]:1
修改filebrowser端口号(1086)?[1/0]
修改filebrowser默认访问路径(/userdisk/data)?[1/0]
请输入filebrowser外网访问配置[1/0][回车即1]:0
【FileBrowser】: 正在停止filebrowser服务...
【FileBrowser】: 删除nat-start触发...
【FileBrowser】: 正在启动filebrowser服务...
【FileBrowser】: 启动filebrowser服务完成!
【FileBrowser】: 请在浏览器中访问[http://192.168.31.1:1086],默认用户名密码admin

启动有问题,单独启动测试一下:

1
2
3
4
5
./filebrowser -p 1086 -d /etc/mixbox/apps/filebrowser/bin/filebrowser.db 

daemon /etc/mixbox/apps/filebrowser/bin/filebrowser -a 0.0.0.0 -p 1086 -d /etc/mixbox/apps/filebrowser/bin/filebrowser.db

daemon /etc/mixbox/apps/filebrowser/bin/filebrowser -a 192.168.31.1 -p 1086 -d /etc/mixbox/apps/filebrowser/bin/filebrowser.db

修改一下启动脚本:/etc/mixbox/apps/filebrowser/scripts/filebrowser.sh

1
2
3
4
5
6
daemon ${mbroot}/apps/${appname}/bin/${appname} -p ${port} -d ${mbroot}/apps/${appname}/config/${appname}.db -l ${mbroot}/var/log/${appname}.log -s $scope 

改成:

daemon ${mbroot}/apps/${appname}/bin/${appname} -a 0.0.0.0 -p ${port} -d ${mbroot}/apps/${appname}/bin/${appname}.db -l ${mbroot}/var/log/${appname}.log

用户名密码改一下:
admin/adminxxx

aliddns

配置记录:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
请输入你的选择:1
********* AliDDNS ***********
[动态将你的路由器IP绑定到域名]
启动aliddns服务[1/0] [回车即1]:1
修改aliddns配置?[1/0] 1
请输入aliddns访问ID[回车即xxxxxxxxxxxxxxxxxxxxxxxxx]:
请输入aliddns访问密钥[回车即xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx]:
请输入aliddns域名[例如@.mixbox.com或www.mixbox.com][回车即test.xxxxxxxxxxxxx.top]:@.xxxxxxxxxxxxxxxxx.top
请输入aliddns检查分钟间隔(建议10)[回车即10]:
支持类型[0仅ipv4/1仅ipv6/2通吃][回车即0]:
重启aliddns服务[1/0][回车即1]:
【AliDDNS】: 正在停止aliddns服务...
【AliDDNS】: 正在启动aliddns服务...
【AliDDNS】: 启动aliddns服务完成!

https://dns.console.aliyun.com/

阿里云的解析速度比较慢,可以买个1块钱的域名试试看


端口开放相关

/etc/mixbox/bin/base

用的iptable

防火墙开放

1
2
3
4
5
6
7
8
9
10
11
12
# 查看
iptables -list

# 显示行号
iptables -nL --line-number | more

# 删除INPUT表的第3条

iptables -D INPUT 3

# 允许某个IP访问全部服务
iptables -I INPUT -s 123.240.202.217 -j ACCEPT
0%