LiteServer Project Minecraft 主站
LiteServer Project Minecraft 国际站
友链: 白天的小站
盧盧快閉嘴 / 劉思达LOFTHESTAR - 猜不透 (說唱版)「如果忽遠忽近的灑脫 是你要的自由 那我寧願回到一個人生活」【動態歌詞/PinyinLyrics】♪
若月亮沒來 (若是月亮還沒來) - 王宇宙Leto/喬浚丞『若是晨風還沒來,晚風也可吹入懷』【動態歌詞】
【循环歌曲】《Bloody Mary》(Slowed Instrumental)“人们对Bloody Mary的开发程度不足百分之一”(无损音质) 彩礼视频一转买车BGM
《航天の小曲》《赛博の小曲》《人类进步の小曲》《群星の小曲》《高燃の小曲》 R3cover-Lazer Boomerang | Lazer Boomerang - R3cover (Original Mix)
《进步の小曲》《进部の小曲》《考公の小曲》鸳鸯戏 (DJ完整版) —— 略略略
MENTE MÁ - NAKAMA (Official Lyric Video) 刀马刀马
Win10 22H2版本, 通过蓝牙连接音箱之后, 在操作系统内调整音量不起效果, 只能通过外接音箱上的音量调节改变音量大小…
找到一个类似的问题, 解决方案大概如下:
打开注册表管理器 计算机\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Bluetooth\Audio\AVRCP\CT
找到DisableAbsoluteVolume值,修改为1,如果没有,右键新建DWORD32位,建立对应值。修改后重启
这样操作下来之后确实可以调整操作系统内音量了, 但是总感觉哪里不太对, 调整外部音箱的音量仍然会修改类似【音量上限】, 而操作系统内的音量总感觉是相对这个上限的某个百分比…
1 | rsync -avzP <远程主机IP>:<远程主机上的路径> <本地主机上的路径> |
注意路径末尾的 /
, 源末尾带 /
表示复制文件夹的内容而不是文件夹本身, 相当于少了一层. 目标末尾带 /
或者不带没有区别.
-a
: archive mode, 尽量保留文件的各种属性
-v
: 详细模式
-z
: 压缩
-P
: 显示进度
当传输不稳定时(导致ssh会话断开), 由于rsync默认会先创建临时文件并写入, 待同步完成后再重命名到目标文件, 当链接断开时远端rsync over ssh session可能还在继续运行, 因此还没有将临时文件重命名为目标文件, 此时再次发起同步会发现并没有续传而是重传了. 一种简单的解决办法是使用 --inplace
参数跳过rsync的这套机制, 直接创建目标名称文件且就地更新.
例如仅同步 mp4
文件, 不处理其他任何文件.
1 | rsync -avzP --include '*.mp4' --exclude '*' ... |
在不能运行 ssh server 的时候 (比如WSL 1) 可以使用 rsync daemon, 通信不加密但在相对安全的内网环境下还算好用
需要先写一个最简单的配置文件 rsync.conf
1 | port = 12000 |
然后启动 rsync 服务器. 强制前台, 指定配置文件, 输出日志到控制台.
1 | rsync --daemon --no-detach --config rsync.conf --log-file=/dev/stdout |
客户端列出服务端分享了哪些文件
1 | rsync -rdt rsync://<主机IP>:12000 |
会有类似这样的显示:
1 | files SHARED LOCAL FILES |
同步文件方法与基于ssh链接使用方法一致:
1 | rsync -avzP rsync://<远程主机IP>:<远程主机上的路径>/files/ <本地路径> |
W&W & KSHMR - Bad (Official Music Video)
Deorro - Five Hours (Static Video) [LE7ELS]
攬佬SKAI ISYOUGOD【八方來財·因果】HD 高清官方完整版 MV 来财, 来
攬佬SKAI ISYOURGOD/AR劉夫陽【大展鴻圖】HD 高清官方歌词版MV 别墅里面唱K
白水寒 - 天真的橡皮(DJ林泽版)「人生呐 能不能放过我这一次」
卢润泽 - 别让爱凋落 (DJ抖音版) (Remix Tiktok) - DJ卡点节奏版 | 循环歌单🎧 || 《别让爱凋落》卢润泽:“My Love,请别让爱凋落”
【黄诗扶】“人是寻常人 遇谁才缤纷” | 《赴鸿门》(歌词PV) | 【排骨】赴鴻門
T-ARA (티아라) - NUMBER NINE (넘버나인) [Han/Rom/Eng] Color Coded Lyrics
精卫 (DJ抖音版) - 30年前、50年后『是现在我所有期待 所有的爱,为什么不明白 说的话为什么不记得 为什么不记得。』♪ || 一听就上头的神曲 | 抖音热门歌曲 | 抖音 | TikTok
[Edit] CMon - DJ Sok - 给我闹 - DouYinBGM 2025 美式追逐的小曲 给我闹 | (ko bản quyền)《美警追车の小曲》CMon-DJ Sok | Arash feat. Sean Paul - She Makes Me Go (Official Video)
10. Basshunter - I Can Walk On Water
Ubuntu Server 22.04, 24.04 LTS版本下, 有一部分ip route
, ip rule
是通过脚本添加的, 但是周期性会消失, 有时apt upgrade
, apt install
也会莫名其妙的丢失. 查了一圈发现到一个非常类似的问题:
结果发现是systemd-networkd
的操作删除了不受其管理的路由和规则, 顺带又发现了若干个Issue:
Pod routing policies deleted by systemd #1600 - aws/amazon-vpc-cni-k8s
network: add ManageForeignRoutingPolicyRules= boolean setting #19287 - systemd/systemd
解决方案如下:
判断systemd版本: systemd --version
编辑networkd配置文件: /etc/systemd/networkd.conf
1 | [Network] |
修改为:
1 | ManageForeignRoutingPolicyRules=no |
然后重启networkd:
1 | sudo systemctl daemon-reload |
PS: 一大早上被警报叫起来说网络出问题了结果查了半天发现是systemd的问题, 我只能说大家讨厌systemd不是没有原因的 :-|
在一个包含多个跃点的网络中建立若干条GRE隧道, 如果隧道是从网络外的一侧通往网络外部的另一侧, 且通往网络外部的一侧配置了NAT, 那么会遇到比较头疼的问题.
首先我们知道, 对于conntrack来说, 确立一条”连接”需要五个因素: 协议, 源IP, 源端口, 目标IP, 目标端口, 而GRE协议没有端口的, 所以对于conntrack来说如果源IP目标IP一致, 就会认为是同一条隧道. 进而表现为同一时间只有一个GRE隧道能通过NAT且有流量.
但是当我们打开RFC文档, 不难发现即使是最早的RFC 1701版本中也规定了一个key field可以用来在源IP, 目标IP都相同的时候用来给两侧终端区分不同链接. 后续新版的GRE协议, 也有RFC 2890给出了针对GRE协议的key field扩展, 而且与RFC 1701的协议是兼容的. 那为什么conntrack不把key加入到用来区分不同链接的因素中呢?
带着这个疑问, 让我们打开Linux源码(狗头):
在 net/netfilter/nf_conntrack_proto_gre.c
中, gre_pkt_to_tuple
是用来解析GRE报文并提取链接要素的.
1 | /* gre hdr info to tuple */ |
可以看到这里 判断了GRE包是否的GRE_VERSION
bit 是否不是 GRE_VERSION_1
, 这个宏的定义在 include/uapi/linux/if_tunnel.h
:
1 | #define GRE_VERSION_0 __cpu_to_be16(0x0000) |
为什么会有 GRE_VERSION_1
呢? 在RFC 2784中可以找到答案:
1 | 7.1. GRE Version Numbers |
所以这里conntrack的逻辑是, 只要是普通的GRE协议, 就直接返回. 只有当协议是PPTP的时候才会提取key字段. 这也就解释了为什么同一时间只能有一个有效的GRE隧道.
1 | gre 47 169 src=<redacted> dst=<redacted> srckey=0x0 dstkey=0x0 src=<redacted> dst=<redacted> srckey=0x0 dstkey=0x0 [ASSURED] mark=0 use=1 |
如此看来唯一的解决办法就是绕过Conntrack, 使用如下命令:
1 | iptables -t raw -A PREROUTING -p gre -j NOTRACK |
注意这会让GRE协议跳过conntrack, 也不会进入nat表, 因此在网络外侧的接收点需要手动或其他方式来配置到网络另一侧节点的IP路由. (原来的时候remote只需要写出网边缘节点的IP即可)
驱动文件由zadig/libwdi生成
需要先安装Visual Studio 2022, Windows SDK, Windows Driver Kit (WDK), 参考: 下载 Windows 驱动程序工具包 (WDK)
inf2cat
, signtool
等工具建议在 Developer Command Prompt for VS 2022中操作
1 | New-SelfSignedCertificate -Subject "CN=<Name>" -CertStoreLocation "Cert:\CurrentUser\My" -KeyAlgorithm RSA -KeyLength 4096 -HashAlgorithm SHA256 -NotBefore (Get-Date) -NotAfter (Get-Date).AddYears(10) -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.3", "2.5.29.17={text}email=<email>") -KeyUsage None |
关于 New-SelfSignedCertificate,参考:New-SelfSignedCertificate (PKI) | Microsoft Learn
其中 2.5.29.37
是增强型密钥用法(enhanced key usage), 1.3.6.1.5.5.7.3.3
是代码签名(code signing). 2.5.29.17
是使用者可选名称(subjectAltName). New-SelfSignedCertificate
命令有一个 -DNSName
参数似乎不支持email
这样细粒度级别的配置.
另外命令还支持 -Type
参数, 指定为 CodeSigningCert
时生成出来的证书, “增强型密钥用法”前面会有一个叹号, 不确定是为什么所以最后改成TextExt这种模式了.
-KeyUsage None
可以避免证书附带上默认用途.
1 | $password = ConvertTo-SecureString -String "<redacted>" -Force -AsPlainText |
1 | inf2cat /v /driver:<dir> /os:XP_X86,XP_X64,Vista_X86,Vista_X64,7_X86,7_X64 |
注意,这里的/os 参考: Inf2Cat - Windows drivers | Microsoft Learn
一份更全的列表可以参考: Inf2Cat 工具
这个os字符串是根据zadig/libwdi生成出来的catalog文件的安全目录OSAttr属性推出来的,OSAttr列表参见:List of Microsoft Windows versions - Wikipedia
libwdi源码中使用的是 7_X86,7_X64,8_X86,8_X64,8_ARM,10_X86,10_X64,10_ARM
但用这个字符串签出来的文件不太对, 不是很确定原因.
若要使用_ARM
参数, 需要保证安装了对应架构的构建工具, 否则inf2cat
会报错参数错误.
1 | signtool sign /fd SHA256 /f "<pfx file path>" /p <redacted> /t http://timestamp.digicert.com <cat file path> |
1 | Export-Certificate -Cert "Cert:\CurrentUser\My\<Thumbprint>" -FilePath "<filename>" |
因为certutil
需要用admin权限, 加一段自动提权UAC
1 | @echo off |
最近在给办公室配置网络, 要求访问国内网站时走国内DNS解析+国内运营商直出, 访问国外网站时走国外DNS解析+专线转发.
整体思路上是根据IP段/CIDR进行分流, 由于主要访问国内网站, 整理了一份海外IP列表. 命中列表的IP请求走专线转发.
创建ipset: ipset create overseas hash:net
其中 overseas
是名字, 可以修改为别的.
添加IP段到ipset中: ipset add overseas 1.1.64.0/18
…
使用iptables标记流量, 这里的 2
是对流量添加的 fwmark, 可以选择任意值.
1 | iptables -t mangle -A PREROUTING -m set --match-set overseas dst -j MARK --set-mark 2 |
添加一个独立的路由表, 将默认路由修改为专线. 这里的 55
是 TableID, 可以选择任意值.
1 | ip route add default via 10.10.0.1 table 55 |
添加ip rule, 将fwmark和路由表关联起来:
1 | ip rule add fwmark 2 table 55 |
这样, 从本机和其他网络传递过来的包, 如果命中海外IP列表就会走专线转发. 注意, 如果要给其他网络提供功能(即作为路由器), 需要添加NAT, 即:
1 | sysctl net.ipv4.ip_forward=1 |
这样发往互联网的数据包的源IP就是互联网网卡的IP, 而不是内网IP.
可选的方案有CoreDNS, Dnsmasq, Pihole, BIND9, PowerDNS等等. 在权衡之后选择了BIND9方案.
(Github上有一个SmartDNS项目也可以实现类似的功能, 但是多重考虑下使用了比较原始的方案)
1 | sudo apt update && sudo apt install bind9 bind9utils bind9-doc |
/etc/bind/named.conf.options
注意, 这个配置关闭了DNSSEC. 不然会出现类似 broken trust chain resolving 'github.com/A/IN': 8.8.8.8#53
的报错. (当然更好的解决办法是配置DNSSEC)
默认使用了腾讯云, 阿里云, 114的公共DNS. 日志输出到了syslog, 可以通过 journalctl 检索.
1 | options { |
/etc/bind/named.conf.whitelist-zones
1 | zone "docker.com" { |
可以通过python脚本比较方便的生成zone文件:
1 | import subprocess |
1 | sudo systemctl restart named |
如果配置没有问题的话可以看到named输出的日志:
1 | Mar 05 13:36:19 office-server named[6387]: managed-keys-zone: loaded serial 7 |
有解析请求时会输出日志:
1 | Mar 05 13:37:16 office-server named[6387]: 05-Mar-2025 13:37:16.472 client @0x7a7f2c005368 <...>#25256 (main.vscode-cdn.net): query: main.vscode-cdn.net IN A + (...) |
可以通过以下命令来测试DNS响应
1 | dig +short @127.0.0.1 baidu.com |
dnsmasq ipset iptables 实现对流量进行分流 很棒的文章,思路很清晰一下就明白了
How To Configure BIND as a Private Network DNS Server on Ubuntu 20.04