晨曦's Blog

This is a window to the soul

前记

由于我的 ADGuard Home 是安装在群晖的 Docker 中的,对外服务是在路由器上设置的 DNSDNS 请求如下

client->路由器->群晖->Docker->ADGuard Home

所以 ADGuard Home 的客户端列表只是显示了群晖 Docker 的网关地 172.17.0.1,没有显示具体的客户端 IP 地址,导致有很多请求都不知道是从哪个客户端发起的

解决

解决的办法就是将 ADGuard Home 所在的容器暴露到局域网中来,这就需要 DockerMacvlan 网络实现方式

对于 Docker3 种网络实现 HostBridgeMacvlan 可以参考这里

参考文档

第一步

开启 Open vSwitchOpen vSwitch 的作用是开启虚拟网络交换机,通过软件实现交换机的作用

控制面板->网络->网络界面->管理->Open vSwitch设置->启用Open vSwitch

第二步

创建 Macvlan 模式网络,SSH 到群晖上

1
docker network create -d macvlan --subnet=192.168.50.0/24 --gateway=192.168.50.1 --ip-range=192.168.50.100/31 -o parent=ovs_eth0 macvlan

192.168.50.0/24 是路由器中 DHCP 的网段

192.168.50.1 是路由器管理 IP

192.168.50.100/31Docker 可用 IP,此段为 100101 可用

ovs_eth0 是群晖的网卡名称,可用 ip addr 查看

第三步

ADGuard Home 容器分配到 Macvlan 网络下

Docker->网络->macvlan->管理->新增

当然你也可以选择通过 Docker 命令的模式来创建容器指定网络

1
docker run -d --restart=always --network macvlan --ip=192.168.50.50 --name nginx nginx

问题

本来是 Bridge 下的一个 Frp 容器提供穿透服务,由于 Macvlan 下容器无法与宿主机通信,所以 ADGuard Home 管理平台也就无法穿透出外网

解决方案就是将 ADGuard Home 容器同时加入 BridgeMacvlan 网络下,Bridge 映射端口到宿主机进行穿透,而 Macvlan 下的 IP 用来提供 DNS 服务


大功告成

前记

之前一直是用华硕 AC86Uv2ray 做客户端,最近也想把它迁移到群晖中去,然后把路由器刷回官方固件

安装

因为是容器安装这里就一笔带过,官方容器镜像

v2fly-core

需要注意的就一点,在高级设置 -> 网络 -> 使用与Docker Host相同的网络这里需要打勾

再一个就是配置文件 config.json 所在的文件夹必须挂载到 /etc/v2ray

配置

我电脑使用的是 V2rayU 客户端,直接配置导出即可使用。将 inbounds 中的 listen 改为 "listen": "0.0.0.0",

最后需要将 geoip.datgeosite.dat 规则文件跟配置文件放在一起

文件下载

使用

socks5:群晖IP:1080

http:群晖IP:1087

安装

由于我是在群晖安装的,安装比较简单,直接镜像 adguard/adguardhome 拉起来即可。

注意数据盘和端口就好

管理端口:3000:3000,另外 updtcp 端口:53:53

数据文件:/opt/adguardhome/work
配置文件:/opt/adguardhome/conf

Rules

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
filters:
- enabled: true
url: https://gitee.com/xinggsf/Adblock-Rule/raw/master/rule.txt
name: 乘风 广告过滤规则
id: 1610615684
- enabled: true
url: https://gitee.com/xinggsf/Adblock-Rule/raw/master/mv.txt
name: 乘风 视频广告过滤规则
id: 1610615685
- enabled: true
url: https://anti-ad.net/easylist.txt
name: anti-AD
id: 1610615686
- enabled: true
url: https://banbendalao.coding.net/p/adgk/d/ADgk/git/raw/master/ADgk.txt
name: adgk手机去广告规则
id: 1610615687
- enabled: true
url: https://raw.githubusercontent.com/VeleSila/yhosts/master/hosts.txt
name: yhosts
id: 1610615689
- enabled: true
url: https://easylist-downloads.adblockplus.org/easylistchina.txt
name: easylistchina
id: 1610615690
- enabled: true
url: https://easylist-downloads.adblockplus.org/easyprivacy.txt
name: easyprivacy
id: 1610615691
- enabled: true
url: https://easylist-downloads.adblockplus.org/easylist.txt
name: easylist
id: 1610615692
- enabled: true
url: https://raw.githubusercontent.com/jdlingyu/ad-wars/master/hosts
name: 大圣净化
id: 1610615704
- enabled: true
url: https://gitee.com/xinggsf/Adblock-Rule/raw/master/ublock-dynamic-rule.txt
name: 乘风 uBlock Origin过滤规则
id: 1610713745
- enabled: true
url: https://gitee.com/cjx82630/cjxlist/raw/master/cjxlist.txt
name: cjxlist
id: 1610713749
- enabled: true
url: https://gitee.com/cjx82630/cjxlist/raw/master/cjx-annoyance.txt
name: cjxlist cjx-annoyance
id: 1610713750
- enabled: true
url: https://gitee.com/cjx82630/cjxlist/raw/master/cjx-ublock.txt
name: cjxlist cjx-ublock
id: 1610713751
- enabled: true
url: https://gitee.com/cjx82630/cjxlist/raw/master/chinese.txt
name: cjxlist chinese
id: 1610713752
- enabled: true
url: https://gitee.com/halflife/list/raw/master/ad.txt
name: halflife ad
id: 1610713753
- enabled: true
url: https://gitee.com/halflife/list/raw/master/ad-edentw.txt
name: halflife ad-edentw
id: 1610713754
- enabled: true
url: https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=1&mimetype=plaintext
name: yoyo
id: 1610713767
- enabled: true
url: https://cdn.jsdelivr.net/gh/AdguardTeam/AdGuardSDNSFilter@master/Filters/rules.txt
name: AdGuardSDNSFilter(默认)
id: 1611042639
- enabled: true
url: https://cdn.jsdelivr.net/gh/AdAway/adaway.github.io@master/hosts.txt
name: AdAway
id: 1611042640
- enabled: true
url: https://cdn.jsdelivr.net/gh/lhbill/xiaomiad@master/xiaomi.txt
name: 小米盒子广告
id: 1611042641
- enabled: true
url: https://cdn.jsdelivr.net/gh/neoFelhz/neohosts@gh-pages/full/hosts.txt
name: neohosts
id: 1611042642

适合懒人直接拷贝

agnoster 主题乱码

原因:是缺少 Menlo for Powerline 字体

下载字体:Menlo for Powerline

安装字体:mv "Menlo for Powerline.ttf" ~/Library/Fonts

配置:Text->Font

ls 文件夹颜色

配置:Colors->Brighten bold text 勾选掉之后

rz/sz 配置

参考文档

zsh-autosuggestion 颜色与底色相同

更改 zsh-autosuggestion 颜色,在.zshrc 最后加入 ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=5'

参考文档

隐藏用户名和主机名

.zshrc 最后加入

1
prompt_context() {}

只显示用户名

.zshrc 最后加入

1
2
3
4
5
6
prompt_context() {
if [[ "$USER" != "$DEFAULT_USER" || -n "$SSH_CLIENT" ]]; then
prompt_segment black default "%(!.%{%F{yellow}%}.)$USER"
fi
}

只显示主机名

.zshrc 最后加入

1
2
3
4
5
prompt_context() {
if [[ "$USER" != "$DEFAULT_USER" || -n "$SSH_CLIENT" ]]; then
prompt_segment black default "%(!.%{%F{yellow}%}.)$HOST"
fi
}

自定义

.zshrc 最后加入

1
2
3
prompt_context () {
prompt_segment black default "JakeHu@MBP";
}

powerlevel10k

重新配置 p10k configure

参考

案例一

案例二

前记

AC86U 升级固件后挂载虚拟内存总是提示读写速度不够,新固件的读取速度要求 20M/s,写入速度要求 30M/s

解决

修改参数限制

ssh 登录到路由器,执行如下命令

1
2
3
4
5
6
# 修改写入速度限制,30替换为10
sed -i 's/^W_LIMIT=30/W_LIMIT=10/' /koolshare/scripts/swap_make.sh

# 修改读取速度限制,20替换为10
sed -i 's/^R_LIMIT=20/R_LIMIT=10/' /koolshare/scripts/swap_make.sh

以上参数可以根据自己的实际情况进行调整

完成后重新进入管理界面挂载虚拟内存即可

前记

搭建在群晖上的 gogs 还是 0.11.X 最近心血来潮升级到了 0.12.3 没想到升级后却出现了权限的问题 Permission denied 具体报错如下

1
2
3
4
5
6
Permission denied (publickey,keyboard-interactive).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

解决

后查阅文档发现可能是目录权限问题,权限设置如下:

1
2
3
4
5
# /data/git/.ssh/ 目录权限为0700
chmod 0700 /data/git/.ssh/

# /data/git/.ssh/authorized_keys 文件权限为0600
chmod 0600 /data/git/.ssh/authorized_keys

最后需要在后台重新生成 /data/git/.ssh/authorized_keys 文件

管理面板->管理员操作->重新生成 '.ssh/authorized_keys' 文件(警告:不是 Gogs 的密钥也会被删除)


大功告成

之前安装了 openldap 服务和 lam 管理平台,接下来我们看看如何在 ldap 中添加多个不同的组和用户来实现不同平台使用不同组下的用户登陆。

创建 Group

先创建一个组,如图:

创建用户

在刚才创建的组里创建用户,如图:

创建 Group 组

创建 objectClass 属性为 groupOfUniqueNames 的组 gogs 用于 gogs 登陆

其中 cn 为组名,uniqueMember 为组下用户

为 Gogs 添加认证源

绑定DNLdap 管理员的 DN
绑定密码Ldap 管理员密码
用户搜索基准ou=users,dc=jakehu,dc=me 用户组
用户过滤规则
(&(objectClass=inetOrgPerson)(memberOf=cn=gogs,ou=groups,dc=jakehu,dc=me)(cn=%s))
实现不同平台不同分组的重点就是 memberOf

更改认证源

如何将已经存在 gogs 用户改为 ldap 认证,如下图,更改用户的认证方式即可


题外话:禅道 (zentao) 接入 Ldap 参考

Ldap

轻型目录访问协议(英文:Lightweight Directory Access Protocol,缩写:LDAP/ˈɛldæp/)是一个开放的,中立的,工业标准的应用协议,通过 IP 协议提供访问控制和维护分布式信息的目录信息。

摘自维基百科,关于 LDAP 概念和原理可以看看这篇文章 LDAP 概念和原理介绍

服务端

镜像

1
docker pull osixia/openldap:1.3.0

容器

1
2
3
4
5
6
7
8
docker run -p 389:389 --name openldap --restart=always \
--env LDAP_ORGANISATION="jakehu" \
--env LDAP_DOMAIN="jakehu.me" \
--env LDAP_ADMIN_PASSWORD="jakehu" \
--env LDAP_CONFIG_PASSWORD="jakehu" \
--volume /data/database:/var/lib/ldap \
--volume /data/config:/etc/ldap/slapd.d \
--detach osixia/openldap:1.3.0

参数

端口:默认服务端口使用 389 端口
LDAP_ORGANISATION:机构组织
LDAP_DOMAIN:域
LDAP_ADMIN_PASSWORD:管理员 (admin) 密码
LDAP_CONFIG_PASSWORD:配置管理密码
/etc/ldap/slapd.d:配置文件
/var/lib/ldap:后端数据,默认为 mdb

客户端

镜像

1
docker pull ldapaccountmanager/lam:7.2.RC1

容器

1
2
3
4
5
6
7
docker run -d --restart=always --name ldapaccountmanager -p 9880:80 \
--link openldap:openldap \
--env LDAP_DOMAIN=jakehu.me \
--env LAM_LANG=zh_CN \
--env LDAP_SERVER=ldap://openldap:389 \
--env LAM_PASSWORD=jakehu \
--detach ldapaccountmanager/lam:7.2.RC1

参数

LAM_LANG:语言
LDAP_SERVERLdap 服务器
LAM_PASSWORDlam 密码,默认用户名 lam

配置

接下来访问 http://IP:9880 就能看到下面画面

点击 LAM configuration 进入配置界面


这里的密码,就是我们设置的 LAM_PASSWORD

另外设置的 LDAP_SERVERLDAP_DOMAIN 都被体现出来了,最后在 Account types 中修改默认创建的两个组,这两个组会在首次登陆系统时提示创建

然后登陆创建我们刚设置的两个组

看下结构树,两个分组已经被创建了

到此就已经完成 docker 版的 openldaplam 的安装配置


o – organization(组织 - 公司)
ou – organization unit(组织单元 - 部门)
c - countryName(国家)
dc - domainComponent(域名)
sn – suer name(真实名称)
cn - common name(常用名称)

pip 出现以下错误

1
2
3
4
Traceback (most recent call last):
File "/usr/local/bin/pip3", line 6, in <module>
from pip._internal.cli.main import main
ModuleNotFoundError: No module named 'pip._internal.cli.main'

经过排查应该是 brew install openssh 之后安装了 python3.8 的包导致的

卸载 Openssh

利用 rmtree 卸载 Openssh 及其依赖

1
2
brew tap beeftornado/rmtree
brew rmtree openssh

Pip 修复

python3 -m pip install --upgrade pip --user

基于 Docker+Python 对 git 项目自动提交

使用场景

第一个使用场景

自己本地有几个私有库,如 hexo资料记载等… 这些个私有库有事没事就需要 push 更改,所以需要自动提交

第二个使用场景

home-assistant 安装在树莓派上,但是对于 home-assistant 的配置文件希望用 git 管理起来

使用

以上两个使用场景其实都是需要外挂盘符来操作的,接下来编写 docker-compose.yml 文件

1
2
3
4
5
6
7
8
9
10
11
version: '2'
services:
git-auto-push:
image: jakehu/git-auto-push:latest
container_name: git-auto-push
restart: always
volumes:
- /Web/项目1:/opt/Web/项目1
- /Web/项目2:/opt/Web/项目2
- /Web/项目3:/opt/Web/项目3
- /you_dir/.ssh/:/root/.ssh/

/opt/Web/ 勿修改,程序会自动读取 /opt/Web/ 下一级目录作为需要监听的项目,.ssh 挂载进去主要是不用单独去配置 ssh key

启动:docker-compose up -d


Github 地址

参考:GitPython 操作 Git