YSC 的频道
因为有透明代理的需求,但又不想折腾路由器全局代理,于是调查了一下 sniproxy (C语言实现的那个) 的方案。sniproxy 本身不支持走 SOCKS 代理,需要套一层 proxychains,然后由于 sniproxy 是用 UDP 解析域名,proxychains 又不支持 UDP 代理,于是再加上 https-dns-proxy 走代理使用 DoH 解析 DNS。最终方案是基于Alpine Linux,可以运行在 Docker 或 WSL1 中。WSL2 未测试,建议使用 WSL1,因为可以和主机共享网络。…
又发现问题了,wsl后台运行的进程好像会被停止,必须要有一个前台的进程……
可以临时把前面提到的
可以临时把前面提到的
start-sniproxy.jse 改成:new ActiveXObject('WScript.Shell').Run('wsl -d sniproxy-socks /entrypoint.sh -f',0)我编写了个编译 nft-fullcone 内核模块的脚本,可编译适用于 OpenWrt 官方内核的模块。
编译出的模块的内核 vermagic 和 OpenWrt 官方内核是一致的,因此可以直接在 OpenWrt 官方镜像中安装。
编译流程参考了 https://hamy.io/post/0015/how-to-compile-openwrt-and-still-use-the-official-repository/
patch 文件修改自 https://github.com/wongsyrone/lede-1
使用 GitHub Actions 自动编译 https://github.com/ysc3839/openwrt-official-builds-fullcone/actions
https://github.com/ysc3839/openwrt-official-builds-fullcone
编译出的模块的内核 vermagic 和 OpenWrt 官方内核是一致的,因此可以直接在 OpenWrt 官方镜像中安装。
编译流程参考了 https://hamy.io/post/0015/how-to-compile-openwrt-and-still-use-the-official-repository/
patch 文件修改自 https://github.com/wongsyrone/lede-1
使用 GitHub Actions 自动编译 https://github.com/ysc3839/openwrt-official-builds-fullcone/actions
https://github.com/ysc3839/openwrt-official-builds-fullcone
YSC 的频道
我编写了个编译 nft-fullcone 内核模块的脚本,可编译适用于 OpenWrt 官方内核的模块。 编译出的模块的内核 vermagic 和 OpenWrt 官方内核是一致的,因此可以直接在 OpenWrt 官方镜像中安装。 编译流程参考了 https://hamy.io/post/0015/how-to-compile-openwrt-and-still-use-the-official-repository/ patch 文件修改自 https://github.com/wongsyrone/lede…
已更新,加入了修改过的 luci-app-firewall
https://github.com/ysc3839/openwrt-official-builds-fullcone/releases/tag/v22.03.2-2
https://github.com/ysc3839/openwrt-official-builds-fullcone/releases/tag/v22.03.2-2
GitHub
Release v22.03.2-2 · ysc3839/openwrt-official-builds-fullcone
Contribute to ysc3839/openwrt-official-builds-fullcone development by creating an account on GitHub.
阿里云的云服务器要安装自定义系统,只能传一个系统盘镜像上去,假如手头上只有iso怎么办呢?
实测可以把iso作为系统盘镜像传上去,再添加一个数据盘,启动后把系统安装到数据盘里,再开一台机子,挂载刚才的系统盘和数据盘,把数据盘的内容dd回系统盘,就能正常使用了。
原理是绝大多数Linux的iso镜像都是混合镜像,能当成硬盘镜像来用,包含MBR,在传统BIOS模式下能直接启动。即使遇到了一些不是混合镜像的系统(比如银河麒麟),使用UEFI模式也能启动,具体原理不明,猜测是UEFI也能认硬盘里面的光盘文件系统。
实测可以把iso作为系统盘镜像传上去,再添加一个数据盘,启动后把系统安装到数据盘里,再开一台机子,挂载刚才的系统盘和数据盘,把数据盘的内容dd回系统盘,就能正常使用了。
原理是绝大多数Linux的iso镜像都是混合镜像,能当成硬盘镜像来用,包含MBR,在传统BIOS模式下能直接启动。即使遇到了一些不是混合镜像的系统(比如银河麒麟),使用UEFI模式也能启动,具体原理不明,猜测是UEFI也能认硬盘里面的光盘文件系统。
nginx 的默认服务器这么写,可以实现 http 无 Host 时直接断开连接,https 无 SNI 时返回
ERR_SSL_UNRECOGNIZED_NAME_ALERT,同时 http 请求错误地发到 https 端口时也会直接断开连接。server {
server_name _;
listen 80 default_server;
listen 443 ssl http2 default_server;
ssl_reject_handshake on;
error_page 497 =444 /;
return 444;
}
YSC 的频道
nginx 的默认服务器这么写,可以实现 http 无 Host 时直接断开连接,https 无 SNI 时返回 ERR_SSL_UNRECOGNIZED_NAME_ALERT,同时 http 请求错误地发到 https 端口时也会直接断开连接。 server { server_name _; listen 80 default_server; listen 443 ssl http2 default_server; ssl_reject_handshake on; error_page…
nginx 内部的错误码 497 代表 http 请求错误地发到 https 端口。还可以利用这个错误码实现重定向到 https:
444也是 nginx 的内部错误码,代表直接断开连接,仅适用于 http 请求,不能用于 https 请求。
error_page 497 =301 https://$server_name$request_uri;444也是 nginx 的内部错误码,代表直接断开连接,仅适用于 http 请求,不能用于 https 请求。
Debian 系的 nginx 版本十分落后 (Ubuntu 23.04 的 nginx 版本只有 1.22.0),且缺少 brotli 插件。而 nginx 官方提供的包版本虽然新,但是 brotli 插件属于 NGINX Plus 付费功能,并没有提供。
因此看上去要用上新版 nginx+brotli,似乎都免不了要编译。然而 Alpine Linux 的官方源里面正好就有新版 nginx 和 brotli 插件。
于是就写了个 Docker Compose 配置,把 PID 和网络等设为不隔离,以主系统上的
同时我在使用 go-acme/lego 来获取 SSL 证书,配合 systemd timer 定时执行,同样以
相关配置文件将会在后续整理后发布到 GitHub。
因此看上去要用上新版 nginx+brotli,似乎都免不了要编译。然而 Alpine Linux 的官方源里面正好就有新版 nginx 和 brotli 插件。
于是就写了个 Docker Compose 配置,把 PID 和网络等设为不隔离,以主系统上的
www-data 用户运行。同时我在使用 go-acme/lego 来获取 SSL 证书,配合 systemd timer 定时执行,同样以
www-data 用户运行,这样可以直接发送信号 reload nginx。相关配置文件将会在后续整理后发布到 GitHub。
YSC 的频道
Debian 系的 nginx 版本十分落后 (Ubuntu 23.04 的 nginx 版本只有 1.22.0),且缺少 brotli 插件。而 nginx 官方提供的包版本虽然新,但是 brotli 插件属于 NGINX Plus 付费功能,并没有提供。 因此看上去要用上新版 nginx+brotli,似乎都免不了要编译。然而 Alpine Linux 的官方源里面正好就有新版 nginx 和 brotli 插件。 于是就写了个 Docker Compose 配置,把 PID 和网络等设为不隔离,以主系统上的…
顺带一提,Alpine Linux 中 nginx 的默认配置结构很清晰,子配置文件都放在
http.d 目录内,不像 Debian 系搞什么 sites-available,太麻烦了nginx 配置了 brotli 插件后并作为反向代理时,可能会发现浏览器收到的响应仍然是使用 gzip 压缩。这个问题有两种情况:
一种是没有使用 https,Chrome 浏览器只会对 https 请求启用 brotli 压缩,因为中间可能有某些透明代理服务器不支持。
另一种是 nginx 反向代理的上级服务器支持且只支持 gzip 压缩,nginx 把客户端请求发上去后,上级服务器发现客户端支持 gzip 就返回了 gzip 压缩后的数据,于是 nginx 就没法使用 brotli 压缩了。
解决办法是在 nginx 配置中加上
一种是没有使用 https,Chrome 浏览器只会对 https 请求启用 brotli 压缩,因为中间可能有某些透明代理服务器不支持。
另一种是 nginx 反向代理的上级服务器支持且只支持 gzip 压缩,nginx 把客户端请求发上去后,上级服务器发现客户端支持 gzip 就返回了 gzip 压缩后的数据,于是 nginx 就没法使用 brotli 压缩了。
解决办法是在 nginx 配置中加上
proxy_set_header Accept-Encoding ""; 让上级服务器以为客户端不支持压缩,直接返回未压缩的数据,然后 nginx 就会自动压缩了。Linux 使用 WireGuard 进行内网穿透,可以在公网机子上不开启 NAT,把内网机子上 WireGuard 的 allowed ips 设置成
这样设置后内网机子能拿到外部访问者的 IP 地址,同时沿原路发回数据包。这个方案也可以用于其他多网络的情况。
0.0.0.0/0,然后按如下设置 ip rule:ip route add default via $GW dev wg0 table 20其中
ip rule add from $IP table 20
$IP 是 WireGuard 接口的 IP,因为 WireGuard 是隧道协议,不需要 gateway,$GW 可以写 0.0.0.0,或者直接去掉 via $GW。20 是 table id,可以写任意整数。这样设置后内网机子能拿到外部访问者的 IP 地址,同时沿原路发回数据包。这个方案也可以用于其他多网络的情况。
YSC 的频道
Linux 使用 WireGuard 进行内网穿透,可以在公网机子上不开启 NAT,把内网机子上 WireGuard 的 allowed ips 设置成 0.0.0.0/0,然后按如下设置 ip rule: ip route add default via $GW dev wg0 table 20 ip rule add from $IP table 20 其中 $IP 是 WireGuard 接口的 IP,因为 WireGuard 是隧道协议,不需要 gateway,$GW 可以写 0.0.0.0,或者直接去掉…
如果使用 NetworkManager,可以把以下脚本放到
请按需要修改其中的
/etc/NetworkManager/dispatcher.d/ 并加上执行权限,实现自动设置 ip rule:#!/bin/bash
[ "$1" == "wg0" ] || exit
TABLE_ID=20
function update_routing_table() {
IP_ADDR="${IP4_ADDRESS_0%/*}"
ip route add default via ${IP4_GATEWAY} dev ${DEVICE_IP_IFACE} table ${TABLE_ID}
ip rule add from ${IP_ADDR} table ${TABLE_ID}
}
function clear_routing_table() {
ip rule del lookup ${TABLE_ID}
ip route flush table ${TABLE_ID}
}
case "$2" in
up)
update_routing_table
;;
down)
clear_routing_table
;;
*)
;;
esac
请按需要修改其中的
[ "$1" == "wg0" ]。这个脚本修改自 https://gist.github.com/dcode/bbf990ea781bed1e42d39e2351b6c432
YSC 的频道
Google Play 香港区可以使用内地银联卡了,添加时需要输入银行绑定手机号,接收短信验证码
已经看到有反馈说添加银行卡的页面输入了62就提示无效,原因不明,不知道是不是在灰度测试?
新项目发布
mTorrent (M-Team) PT 助手
Greasy Fork
GitHub
功能:
种子列表及排行列表批量复制链接
种子列表及排行列表右侧做种下载人数点击刷新
种子列表及种子详情页下载种子改为复制种子链接
种子详情页下载者列表按完成率从大到小排序
mTorrent (M-Team) PT 助手
Greasy Fork
GitHub
功能:
种子列表及排行列表批量复制链接
种子列表及排行列表右侧做种下载人数点击刷新
种子列表及种子详情页下载种子改为复制种子链接
种子详情页下载者列表按完成率从大到小排序
YSC 的频道
SingleExeXamlIsland 已发布。该项目演示了如何实现单 exe 文件调用 XAML Island 及 WinUI 2,详情请看 README。
SingleExeXamlIsland 现已支持在 Windows 10 下调用作为 AppX 应用安装在系统中的 WinUI 2。
GitHub
GitHub - ysc3839/SingleExeXamlIsland at winui2-win10
Contribute to ysc3839/SingleExeXamlIsland development by creating an account on GitHub.
YSC 的频道
mTorrent (M-Team) PT 助手 1.1.1 版本发布 支持新的API接口请求方式 Greasy Fork GitHub
mTorrent (M-Team) PT 助手 1.2.0 版本发布
支持新的种子列表布局
由于目前种子列表布局和排行列表布局有差异,不好使用同一套代码同时支持,所以暂时禁用了排行列表的修改
Greasy Fork
GitHub
支持新的种子列表布局
由于目前种子列表布局和排行列表布局有差异,不好使用同一套代码同时支持,所以暂时禁用了排行列表的修改
Greasy Fork
GitHub
greasyfork.org
mTorrent (M-Team) PT Helper
用于基于 mTorrent PT 站 (M-Team) 的辅助脚本
省流:Visual Studio NuGet 包浏览页面的
刚刚发现 NuGet Gallery 上的 Detours 包被隐藏了,还在疑惑为什么微软还会下架自己的包,突然发现 NuGet Gallery 上该包的 Owner 并不像是微软员工,但是 Visual Studio 中管理 NuGet 包的页面显示的是 by Microsoft,且并不会显示 Owner!
这个 Detours 包是预编译的 binary package,目前并不确定是否包含恶意代码。
同时建议各位检查其他包,避免下载到假冒官方、包含恶意代码的包。
By XXX 不可信,要进入 NuGet 网站看 Owner,小心下载到假冒官方、包含恶意代码的包。刚刚发现 NuGet Gallery 上的 Detours 包被隐藏了,还在疑惑为什么微软还会下架自己的包,突然发现 NuGet Gallery 上该包的 Owner 并不像是微软员工,但是 Visual Studio 中管理 NuGet 包的页面显示的是 by Microsoft,且并不会显示 Owner!
这个 Detours 包是预编译的 binary package,目前并不确定是否包含恶意代码。
同时建议各位检查其他包,避免下载到假冒官方、包含恶意代码的包。