[{"content":"0. 前言 在 fw4（nftables）环境中，可以使用 ipset 保存电信、移动和境外地址表，再由 mwan3 根据目标地址选择不同的出口。\n这种配置运行起来并不复杂，但实际使用中可能遇到两个时序问题：\nOpenWrt 启动时，ipset 地址表已经加载，而电信、移动的 PPPoE 还没有拨号完成。此时过早执行 mwan3 reload，mwan3 无法基于完整的接口和路由状态生成规则。 运营商定期断开 PPPoE，接口自动重拨并取得新地址后，mwan3 的运行状态没有及时刷新，最终出现分流错乱。 本文使用两个职责明确的脚本解决这些问题：\nipset-load.sh：开机加载地址表。 99-mwan3-wan-reload：在电信或移动接口重新上线后，自动重载 mwan3。 ipset 负责地址数据，mwan3 负责策略与选路，OpenWrt hotplug 负责监听接口事件。\n1. 网络环境与问题原因 本文使用三个 mwan3 逻辑接口：\nct：中国电信 PPPoE 出口。 cm：中国移动 PPPoE 出口。 glb：使用静态 IP 的代理 OpenWrt 虚拟机。 其中 ct 和 cm 会因为开机拨号、运营商强制重拨或临时掉线而重新上线；glb 是本地静态接口，通常不会发生 PPPoE 重拨，所以只需要监控 ct 和 cm。\n原来的开机流程如下：\nOpenWrt 启动 → rc.local 执行 ipset-load.sh → 地址表加载完成并重载 mwan3 → 此时 PPPoE 可能尚未拨号成功 → ct/cm 后续才获得地址和路由 → mwan3 没有再次重载 → 分流状态异常 增加接口 hotplug 钩子后，流程变为：\nOpenWrt 启动 → rc.local 加载 ipset 地址表 → ct/cm 完成 PPPoE 拨号 → OpenWrt 产生 ifup 事件 → hotplug 钩子等待路由稳定 → 自动执行 mwan3 reload 同一个钩子也能处理路由器运行期间发生的 PPPoE 自动重拨。\n2. 地址表加载脚本 2.1 脚本代码 将下面的脚本保存为 /usr/bin/ipset-load.sh：\n#!/bin/sh set -eu load_set() { SET=\u0026#34;$1\u0026#34; FILE=\u0026#34;$2\u0026#34; [ -f \u0026#34;$FILE\u0026#34; ] || return 0 awk -v SET=\u0026#34;$SET\u0026#34; \u0026#39; BEGIN { print \u0026#34;create \u0026#34; SET \u0026#34; hash:net family inet -exist\u0026#34; print \u0026#34;flush \u0026#34; SET } NF \u0026amp;\u0026amp; $1 !~ /^#/ { print \u0026#34;add \u0026#34; SET \u0026#34; \u0026#34; $1 \u0026#34; -exist\u0026#34; }\u0026#39; \u0026#34;$FILE\u0026#34; | ipset restore } load_set ct_ipv4 /etc/ipset/ct.txt load_set cm_ipv4 /etc/ipset/cm.txt load_set glb_ipv4 /etc/ipset/glb.txt # 让刚更新的地址表立即参与 mwan3 分流，不会重启网络接口。 /etc/init.d/mwan3 reload exit 0 2.2 脚本原理 load_set 函数接收两个参数：ipset 集合名称和对应的地址表文件。\n以电信地址表为例：\nload_set ct_ipv4 /etc/ipset/ct.txt 脚本通过 awk 把文本地址表转换成 ipset restore 能够批量执行的命令：\ncreate ct_ipv4 hash:net family inet -exist flush ct_ipv4 add ct_ipv4 1.0.1.0/24 -exist 参数 -exist 表示集合或条目已经存在时不报错。因此，同一脚本既可以在首次开机时运行，也可以在更新地址表后重复运行。\n地址表应该分别放在：\n/etc/ipset/ct.txt /etc/ipset/cm.txt /etc/ipset/glb.txt 文本文件一行写一个 IP 或 CIDR，可以包含空行和以 # 开头的注释：\n# 中国电信地址示例 1.0.1.0/24 1.0.2.0/23 2.3 设置开机加载 赋予执行权限：\nchmod +x /usr/bin/ipset-load.sh 编辑 /etc/rc.local，在 exit 0 前加入：\n/usr/bin/ipset-load.sh exit 0 rc.local 只在开机阶段执行一次，因此适合恢复 ipset 地址表，但不能用于持续监听 PPPoE 重拨。\n3. PPPoE 上线监听脚本 3.1 为什么使用 hotplug OpenWrt 会在网络接口上线或下线时执行 /etc/hotplug.d/iface/ 中的钩子，并向脚本传入环境变量：\nACTION：事件类型，例如 ifup 或 ifdown。 INTERFACE：/etc/config/network 中的逻辑接口名，例如 ct、cm。 需要注意，INTERFACE 不是 eth0、pppoe-wan 等设备名称。\n3.2 脚本代码 将下面的脚本保存为 /etc/hotplug.d/iface/99-mwan3-wan-reload：\n#!/bin/sh # 需要监听的 OpenWrt 逻辑接口名称。 WAN_INTERFACES=\u0026#34;ct cm\u0026#34; # 接口上线后等待路由稳定的时间，单位为秒。 RELOAD_DELAY=\u0026#34;5\u0026#34; # 防止短时间内重复执行 mwan3 reload。 LOCK_DIR=\u0026#34;/var/lock/mwan3-wan-reload.lock\u0026#34; # 只处理接口上线事件，忽略 ifdown 等其他事件。 [ \u0026#34;${ACTION:-}\u0026#34; = \u0026#34;ifup\u0026#34; ] || exit 0 # 只处理 WAN_INTERFACES 列表中的完整接口名称。 case \u0026#34; $WAN_INTERFACES \u0026#34; in *\u0026#34; ${INTERFACE:-} \u0026#34;*) ;; *) exit 0 ;; esac # 后台等待并重载 mwan3，避免阻塞 OpenWrt hotplug 流程。 ( mkdir \u0026#34;$LOCK_DIR\u0026#34; 2\u0026gt;/dev/null || exit 0 trap \u0026#39;rmdir \u0026#34;$LOCK_DIR\u0026#34; 2\u0026gt;/dev/null\u0026#39; EXIT INT TERM sleep \u0026#34;$RELOAD_DELAY\u0026#34; logger -t mwan3-hotplug \u0026#34;interface $INTERFACE is up; reloading mwan3\u0026#34; if ! /etc/init.d/mwan3 reload; then logger -t mwan3-hotplug -p daemon.err \\ \u0026#34;failed to reload mwan3 after interface $INTERFACE came up\u0026#34; exit 1 fi ) \u0026amp; exit 0 3.3 接口筛选 下面的配置表示只监控电信和移动接口：\nWAN_INTERFACES=\u0026#34;ct cm\u0026#34; LAN、loopback 和静态的 glb 接口事件都会被忽略。如果以后还需要监控其他动态 WAN，可以把对应逻辑接口名加入列表：\nWAN_INTERFACES=\u0026#34;ct cm wan2\u0026#34; 3.4 延迟与重复事件处理 接口刚产生 ifup 事件时，地址已经取得，但路由状态仍可能处于更新阶段。因此脚本默认等待 5 秒：\nRELOAD_DELAY=\u0026#34;5\u0026#34; 如果设备启动较慢，或者开机后仍偶尔出现规则异常，可以提高到 10 秒：\nRELOAD_DELAY=\u0026#34;10\u0026#34; PPPoE 重连期间可能连续产生多个相近事件。脚本使用 /var/lock/mwan3-wan-reload.lock 作为互斥锁：第一份脚本创建锁目录后继续执行，后续重复事件发现锁已存在便直接退出。\n如果 ct 和 cm 几乎同时上线，通常只会执行一次 mwan3 reload。这不会遗漏某一套规则，因为 reload 会重新加载完整的 mwan3 配置，而不是只刷新触发事件的单个接口。\n3.5 为什么文件没有 .sh 后缀 Linux 脚本能否执行取决于第一行的解释器声明和文件执行权限，而不是扩展名：\n#!/bin/sh OpenWrt 的 hotplug 钩子通常使用 数字-名称 的格式命名，例如：\n99-mwan3-wan-reload 前面的 99- 让该钩子在多数接口钩子之后运行。ipset-load.sh 是放在 /usr/bin 中供人主动调用的普通脚本，保留 .sh 后缀更容易辨认；两种命名方式都不影响 Shell 执行。\n4. 安装方法 假设已经把两个文件上传到路由器的 /tmp 目录，执行：\ncp /tmp/ipset-load.sh /usr/bin/ipset-load.sh mkdir -p /etc/hotplug.d/iface cp /tmp/99-mwan3-wan-reload \\ /etc/hotplug.d/iface/99-mwan3-wan-reload chmod +x /usr/bin/ipset-load.sh chmod +x /etc/hotplug.d/iface/99-mwan3-wan-reload 最终文件结构如下：\n/etc/ ├── hotplug.d/ │ └── iface/ │ └── 99-mwan3-wan-reload ├── ipset/ │ ├── ct.txt │ ├── cm.txt │ └── glb.txt └── rc.local /usr/bin/ └── ipset-load.sh 两个脚本不要放在同一个位置，也不要把 hotplug 钩子加入 rc.local：\n文件 放置位置 调用方式 ipset-load.sh /usr/bin/ipset-load.sh /etc/rc.local 在开机时调用 99-mwan3-wan-reload /etc/hotplug.d/iface/99-mwan3-wan-reload OpenWrt 在接口上线时自动调用 5. 测试与验证 5.1 测试地址表加载 手动运行：\n/usr/bin/ipset-load.sh 检查三个集合：\nipset list ct_ipv4 | head ipset list cm_ipv4 | head ipset list glb_ipv4 | head 5.2 模拟接口上线 模拟电信接口上线：\nACTION=ifup INTERFACE=ct \\ /etc/hotplug.d/iface/99-mwan3-wan-reload 模拟移动接口上线：\nACTION=ifup INTERFACE=cm \\ /etc/hotplug.d/iface/99-mwan3-wan-reload 等待超过 RELOAD_DELAY 设置的时间，然后查看日志：\nlogread | grep mwan3-hotplug 正常情况下可以看到：\nmwan3-hotplug: interface ct is up; reloading mwan3 最后检查 mwan3 的接口和规则状态：\nmwan3 status mwan3 status rules 5.3 重启验证 完成手动测试后重启路由器：\nreboot 重新登录后依次检查：\nipset list ct_ipv4 | head logread | grep mwan3-hotplug mwan3 status mwan3 status rules 如果日志中出现 ct 或 cm 上线后重载 mwan3 的记录，并且规则恢复正常，说明开机时序问题已经解决。\n6. 常见问题 6.1 为什么不能只用 rc.local rc.local 只在系统启动时运行一次。运营商在数小时或数天后强制断开 PPPoE 时，它不会再次执行，因此无法处理运行期间的自动重拨。\nhotplug 是由接口事件驱动的：只要 ct 或 cm 再次上线，脚本就会重新执行。\n6.2 是否需要监控 glb 本文中的 glb 是使用静态 IP 的本地代理 OpenWrt 虚拟机，不参与 PPPoE 拨号。代理节点的外部连接最终仍通过 ct 或 cm 出口，因此通常不需要监控 glb。\n即便代理虚拟机重启，主路由上的静态 glb 接口也不一定产生新的 ifup 事件。如果确实需要检测代理虚拟机是否在线，应使用独立的可达性检测方案，而不是简单地把 glb 加入 hotplug 列表。\n6.3 如何确认逻辑接口名称 执行：\nuci show network | grep \u0026#39;=interface\u0026#39; 确认 /etc/config/network 中的逻辑接口名是否确实为 ct 和 cm。不要把 pppoe-ct、pppoe-cm 或物理网卡名填入 WAN_INTERFACES。\n6.4 为什么重载而不是重启 本文执行的是：\n/etc/init.d/mwan3 reload 它用于重新加载 mwan3 策略，不会主动重启 PPPoE 接口。相比重启整个网络服务，它影响更小，也不会为了修复分流而制造一次新的断线。\n7. 总结 这套方案把开机初始化和接口事件处理拆成两个脚本：\nipset-load.sh → 恢复 ct/cm/glb 地址表 → 适合由 rc.local 在开机时调用 99-mwan3-wan-reload → 监听 ct/cm 的 ifup 事件 → 等待地址和路由稳定 → 自动执行 mwan3 reload 最终既解决了 OpenWrt 开机时 PPPoE 尚未完成的问题，也处理了运营商定期重拨后 mwan3 分流失效的问题。两个脚本各自只负责一类任务，后续维护和排错也更直观。\n","permalink":"https://blog.octlog.com/p/openwrt-mwan3-ipset-pppoe-auto-reload/","summary":"\u003ch2 id=\"0-前言\"\u003e0. 前言\u003c/h2\u003e\n\u003cp\u003e在 fw4（nftables）环境中，可以使用 ipset 保存电信、移动和境外地址表，再由 mwan3 根据目标地址选择不同的出口。\u003c/p\u003e\n\u003cp\u003e这种配置运行起来并不复杂，但实际使用中可能遇到两个时序问题：\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eOpenWrt 启动时，ipset 地址表已经加载，而电信、移动的 PPPoE 还没有拨号完成。此时过早执行 \u003ccode\u003emwan3 reload\u003c/code\u003e，mwan3 无法基于完整的接口和路由状态生成规则。\u003c/li\u003e\n\u003cli\u003e运营商定期断开 PPPoE，接口自动重拨并取得新地址后，mwan3 的运行状态没有及时刷新，最终出现分流错乱。\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e本文使用两个职责明确的脚本解决这些问题：\u003c/p\u003e","title":"OpenWrt mwan3 + ipset：解决开机与 PPPoE 重拨后的分流失效"},{"content":"写在前面 最近在折腾一个长期运行的个人 AI 助手，最终选择了 OpenClaw 作为底座。\nOpenClaw 的整体设计思路很明确：\n它不是一个“网页应用”，而是一个 以 CLI + Gateway 为核心的常驻型工具，更像你服务器上的一个基础服务。\n在 Linux（尤其是 Ubuntu Server）环境下，官方推荐的使用方式也很清晰：\n全局安装 CLI 使用官方的 Onboarding Wizard 完成初始化 通过 systemd 用户级服务 让 Gateway 常驻运行 这篇文章记录一套 从零到可用、尽量少踩坑 的部署流程，适合个人服务器、家宽公网或云主机环境。\n0. 部署前准备 在正式开始之前，先简单确认一下环境。\nOpenClaw 对系统本身没有太多特殊要求，但下面这些是必不可少的：\n操作系统：Ubuntu 24.04 LTS（或同级发行版） Node.js：22 及以上 systemd：用于常驻 Gateway（Ubuntu 默认自带） 一些基础工具： bash curl git ca-certificates sudo lsof（用于排查端口占用） 如果你是通过 SSH 使用服务器，并且希望在退出登录后 OpenClaw 仍然继续运行，那么 loginctl linger 是后面一定要开的。\n1. 安装系统必备组件 sudo apt update sudo apt install -y \\ bash \\ curl \\ git \\ ca-certificates \\ sudo \\ lsof 2. 安装 Node.js 22（推荐 nvm） 2.1 安装 nvm curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash source ~/.bashrc 2.2 安装并启用 Node.js 22 nvm install 22 nvm use 22 node -v npm -v 3. 安装 OpenClaw npm install -g openclaw@latest openclaw --version 4. 运行 Doctor（强烈建议） openclaw doctor 5. 使用 Onboarding 向导初始化 openclaw onboard --install-daemon 6. 启用 linger（非常关键） sudo loginctl enable-linger \u0026lt;user\u0026gt; 7. 启动与验证 openclaw gateway --port 18789 --verbose openclaw agent --message \u0026#34;hello，帮我确认你正常工作\u0026#34; --thinking high 8. 常用排错命令 openclaw gateway probe systemctl --user status openclaw-gateway --no-pager journalctl --user -u openclaw-gateway.service -n 200 --no-pager openclaw doctor 9. 默认目录说明 ~/.openclaw/ 小结 到这里，一个 可以长期运行、可扩展、可维护的 OpenClaw 基础环境 就已经搭建完成。\n","permalink":"https://blog.octlog.com/p/openclaw-ubuntu-install/","summary":"\u003ch2 id=\"写在前面\"\u003e写在前面\u003c/h2\u003e\n\u003cp\u003e最近在折腾一个长期运行的个人 AI 助手，最终选择了 \u003cstrong\u003eOpenClaw\u003c/strong\u003e 作为底座。\u003c/p\u003e\n\u003cp\u003eOpenClaw 的整体设计思路很明确：\u003cbr\u003e\n它不是一个“网页应用”，而是一个 \u003cstrong\u003e以 CLI + Gateway 为核心的常驻型工具\u003c/strong\u003e，更像你服务器上的一个基础服务。\u003c/p\u003e\n\u003cp\u003e在 Linux（尤其是 Ubuntu Server）环境下，官方推荐的使用方式也很清晰：\u003c/p\u003e","title":"Ubuntu部署 OpenClaw 完整指南"},{"content":"引言 在中国大陆的网络环境中，跨境访问长期呈现出一种略显矛盾的状态。\n一方面，国际出口带宽在持续扩容；另一方面，在晚高峰时段，跨境访问仍然频繁出现连接不稳定、吞吐下降、应用层卡顿等问题。同时，通过 traceroute 等工具观察到的路径，往往表现为明显的绕行，与直觉中的“最短路径”并不一致。\n这些现象通常被简单归因于“国际出口不够用”，但如果从更长的时间尺度与更高的网络层级来看，它们更像是大型运营商在跨境网络治理中做出的结构性选择。\n一、跨境网络的典型表现 在实际使用中，跨境网络通常呈现出以下特征：\n非高峰时段体验相对稳定，高峰时段波动明显； RTT 数值并不异常，但应用层响应明显变慢； traceroute 显示路径跨省、跨区域，甚至出现反直觉的跳转。 这些现象表明，问题并不完全出在单一链路或单一节点上，而是与整体路径选择和承载结构密切相关。\n二、BGP 与“绕路”的必然性 1. BGP 并不以性能最优为目标 跨境路径的选择主要由 BGP 决定。\nBGP 的设计目标是自治系统之间的可达性和策略表达能力，而非端到端性能最优。\n其决策依据主要包括：\nAS-PATH 长度 Local Preference 路由策略与社区属性 RTT、丢包率、抖动等性能指标并不在协议的原生考量范围内。\n因此，从协议层面看，路径“绕行”并不构成异常，而是策略约束下的自然结果。\n2. 精细策略与自动收敛之间的冲突 在多出口环境中，运营方通常会通过精细路由策略改善路径质量，例如为特定前缀指定出口或设置偏好。\n这类策略在路径健康时可以带来更好的体验，但当路径出现性能退化而未完全中断时，BGP 并不会触发重新选路。\n结果是系统进入一种状态：\n路径仍然被视为可达； 实际性能已明显下降； 自动切换无法发生。 这种“半失效”状态在跨境网络中并不少见。\n三、运营商规模与路径风格差异 1. 小规模网络的主动优化 在规模较小的网络中：\n出口数量有限； 故障影响范围较小； 策略调整与回滚成本较低。 在这种环境下，通过精细策略尽量拉直路径，是一种常见且可接受的做法。\n2. 大规模运营商的风险约束 全国级运营商面对的约束条件则完全不同：\n单一策略可能影响大量用户； 同步性失败的代价极高； 外部网络的不确定性被显著放大。 在这种背景下，将大量流量集中到“看起来最优”的路径上，反而会增加系统性风险。\n因此，大型运营商通常只在少数关键方向进行深度工程化，而在其余方向上保留路径的自然分散。\n四、电信的路径工程化实践 1. 热点方向的工程化承载 在美西、欧洲核心节点、日本、新加坡、香港等方向，具有以下共同特征：\n流量规模巨大； 目的地相对稳定； 对整体用户体验影响显著。 这些方向通常被纳入明确的承载体系中，例如固定或半固定路径、MPLS / SR Policy，以及独立的治理与调度域。\n在这些区域，传统公网的表现已经接近专线级别。\n2. 非热点方向的自然选路 对于流量分散、目的地不稳定、投入产出比低的方向：\n不进行深度路径工程； 不编写复杂策略； 交由 BGP 在既定边界内自然选路。 因此，这类路径在可视化工具中往往显得“绕”，但整体系统更加稳健。\n五、CN2、公网与统一承载的演进 1. CN2 的角色 CN2 的核心价值并不仅体现在更低的延迟或更高的带宽上，而在于：\n更严格的 SLA； 更高优先级的故障处理； 更激进的路径工程手段。 同时，它也是路径治理方法论的重要验证环境。\n2. 公网能力的下沉 随着工程经验的成熟，这些方法逐步应用到公网的热点方向，并通过统一的承载域进行治理。\n在这一过程中：\n公网身份 ASN 仍然对外存在； 实际承载逐步集中到统一的内部体系； 路由身份与物理承载出现分离。 这并不意味着公网等同于高端线路，而是成熟工程能力的自然下沉。\n六、骨干网络的黑箱化趋势 随着 MPLS、SR、隧道化承载等技术的广泛应用：\n中间节点不再响应 ICMP TTL； 交换节点在逻辑路径中不可见； traceroute 难以反映真实承载结构。 在这种架构下，traceroute 的角色发生转变：\n不再用于解释完整路径； 而更适合用于发现异常延迟或丢包信号。 七、跨境网络体验评价方式的变化 在路径逐渐黑箱化的背景下，网络质量的评价标准也随之改变：\n稳定性优于峰值速度； 长期 RTT 与丢包分布优于单次测试； 多服务、多目的地的一致性优于单一路径表现。 从结果来看，热点方向体验的改善并非偶然，而是长期治理策略演进的自然体现。\n结论 跨境网络路径“经常绕路”并不必然意味着网络能力不足。\n对于大规模网络而言，这种现象更多反映的是：\n对同步性失败的规避； 对外部不可控因素的克制； 对工程可治理性的优先选择。 从这一角度看，当下的跨境网络形态并非退化，而是进入了一个更加成熟、更加工程化的阶段。\n","permalink":"https://blog.octlog.com/p/china-cross-border-routing-detour/","summary":"\u003ch2 id=\"引言\"\u003e引言\u003c/h2\u003e\n\u003cp\u003e在中国大陆的网络环境中，跨境访问长期呈现出一种略显矛盾的状态。\u003c/p\u003e\n\u003cp\u003e一方面，国际出口带宽在持续扩容；另一方面，在晚高峰时段，跨境访问仍然频繁出现连接不稳定、吞吐下降、应用层卡顿等问题。同时，通过 traceroute 等工具观察到的路径，往往表现为明显的绕行，与直觉中的“最短路径”并不一致。\u003c/p\u003e","title":"[对话之外] 跨境网络为何经常绕路？"},{"content":"引言 在调试跨境网络或访问海外服务时，很多人都会遇到类似的问题：\n延迟高、抖动大、Traceroute 路径绕行严重，甚至连最基础的 ICMP ping 都会出现明显丢包。\n起初我也认为这是「物理距离远」「国际带宽不足」导致的自然结果。但在不断查资料和思考之后，我逐渐意识到：\n问题并不单纯出在带宽大小，而在于跨境网络的整体架构。\n这篇文章记录了我从一个非常具体的现象 —— ICMP 丢包 —— 出发，一步步推导到跨境互联网结构层面的思考过程。\n本文收录于专题 「对话之外」。\n从一个现象开始：为什么 ICMP 丢包这么严重？ 在中国大陆访问海外网络时，一个非常典型的现象是：\nTCP 业务还能勉强使用 UDP 和 ICMP 经常出现明显丢包 高峰期延迟和抖动大幅波动 这并不是因为 ICMP 本身「不重要」，而是因为在网络拥塞时，它往往被视为最低优先级流量，最先被丢弃。\n但问题在于：\n为什么跨境链路会长期处于这种“必须丢包才能维持业务”的状态？\n一个常见但不完整的理解：本地化就够了吗？ 我最初对「流量在本地消化」的理解，其实非常直观：\n把数据中心建在本地 使用 CDN、边缘节点 让用户尽量不跨境访问 这种做法当然是正确的，而且在内容分发层面也非常有效。\n但它并不能解释这样一个事实：\n即便访问的是必须跨境的服务，\n为什么海外的网络体验仍然可以长期稳定，而中国大陆却始终处于“紧绷”状态？\n显然，问题不只在于内容是否本地化，而在于跨境流量是如何被组织和转发的。\n国际出口：真正的瓶颈在哪里？ 在中国大陆的网络架构中，几乎所有跨境流量都遵循同一个模式：\n用户 / 城域网 ↓ 省网 / 国内骨干网 ↓ 运营商国际出口（C-I 段） ↓ 境外网络 这里的关键不是某一条具体的链路，而是一个逻辑边界：\n所有跨境流量，必须经过运营商的国际出口转发与控制。\n这意味着：\n全国的跨境流量被集中汇聚 拥塞发生在少数几个固定节点 高峰期必须依靠 QoS 丢弃低优先级流量维持可用性 ICMP 丢包，其实只是这个结构性拥塞的一个外在表现。\n为什么海外的跨境体验反而更好？ 对比海外网络，会发现一个很反直觉的现象：\n很多国家运营商公布的「国际出口带宽」数值并不大，\n但跨境网络体验却明显更稳定。\n原因在于：\n大量跨境流量，根本不经过运营商的“国际出口”。\n国际 IX：被忽略的关键角色 在许多国家和地区，跨境流量并不完全依赖运营商提供的国际转发服务，而是通过：\n国际 Internet Exchange（IX） 私有 Peering 云厂商与内容提供商的直连 在这些场景中：\nAS 与 AS 之间可以直接交换路由 流量在本地或区域层面完成分流 运营商只承担 transit 或兜底角色 注：本文所说的“国际 IX”，指的是开放式、自治的 Internet Exchange，\n不等同于运营商内部或封闭环境中的交换节点。\n这类流量在工程和统计意义上，通常被视为 peering traffic，而不是 international transit traffic。\n也正因如此：\n海外运营商的“国际出口”只承载一部分流量，\n而不是全国跨境流量的唯一通道。\n结构性的差异，而不是带宽的差异 将两种模式对比，可以发现根本区别在于：\n模式 跨境流量路径 集中式出口 所有流量汇聚到少数出口 IX / Peering 流量在多点自治分流 前者的问题不是「不扩容」，而是：\n无论扩多少带宽，队列始终集中在同一个逻辑位置。\n而后者的优势在于：\n拆分队列 分散拥塞 避免单点过载 这是一种架构层面的差异，而不是单纯的资源规模问题。\n为什么中国大陆难以采用 IX 模式？ 国际 IX 的本质，并不仅仅是“更快的出口”，而是：\nAS 之间的自治互联 路由路径由通信双方协商决定 流量不必经过统一的运营商骨干 这意味着跨境流量不再必然经过同一个 C-I 段逻辑边界。\n在以集中转发、统一控制为目标的网络体系下，这种模式与既有设计并不兼容，因此难以直接引入。\n总结 中国大陆国际出口“永远不够用”，并不是因为技术能力不足或建设投入不够，而是因为：\n几乎所有跨境流量，都被集中送入了同一个逻辑出口队列。\n在这种架构下：\n拥塞是常态 ICMP 丢包是必然现象 单纯扩容无法从根本上解决体验问题 理解这一点，有助于区分哪些问题属于工程优化范畴，哪些已经是架构层面的选择。\n后记 本文并非试图给出解决方案，而是对一个常见网络现象进行结构层面的拆解。\n当把问题从“带宽是否足够”上移到“流量如何被组织和转发”，很多现象本身就已经给出了答案。\n","permalink":"https://blog.octlog.com/p/china-cross-border-packet-loss/","summary":"\u003ch2 id=\"引言\"\u003e引言\u003c/h2\u003e\n\u003cp\u003e在调试跨境网络或访问海外服务时，很多人都会遇到类似的问题：\u003cbr\u003e\n延迟高、抖动大、Traceroute 路径绕行严重，甚至连最基础的 ICMP ping 都会出现明显丢包。\u003c/p\u003e\n\u003cp\u003e起初我也认为这是「物理距离远」「国际带宽不足」导致的自然结果。但在不断查资料和思考之后，我逐渐意识到：\u003cbr\u003e\n\u003cstrong\u003e问题并不单纯出在带宽大小，而在于跨境网络的整体架构。\u003c/strong\u003e\u003c/p\u003e","title":"[对话之外] 为什么中国大陆国际出口永远不够用？"},{"content":"背景 在 fw4（nftables）时代，很多关于 mwan3 + ipset 的教程仍然沿用 fw3 / iptables 的思路：\n在 /etc/config/firewall 里声明 ipset 每次更新地址表就 reload firewall helper / 脚本 / mwan3 职责混杂 这些做法在新架构下并非必须，反而容易带来不稳定性和维护成本。\n本文整理一套 fw4 时代可长期使用、工程上可接受的 mwan3 + ipset 分流方案，在“理论正确”和“现实可用”之间做出明确取舍。\n设计原则 ipset 只负责数据 mwan3 负责策略与选路 firewall 不参与 ipset 管理 地址表可频繁更新 更新过程尽量不中断已有连接 地址表准备 统一放置在：\n/etc/ipset/ ├── ct.txt ├── cm.txt └── glb.txt 文件格式：\n# 注释 1.0.8.0/21 8.8.8.8 223.5.5.5/32 一行一个 IP 或 CIDR 支持空行和注释 ipset 自动加载脚本（核心） 该脚本只负责一件事：\n将 txt 文件内容同步到内核 ipset 中\n并在最后 重载 mwan3，确保运行态规则立即重新评估。\n/usr/bin/ipset-load.sh #!/bin/sh set -eu load_set() { SET=\u0026#34;$1\u0026#34; FILE=\u0026#34;$2\u0026#34; [ -f \u0026#34;$FILE\u0026#34; ] || return 0 awk -v SET=\u0026#34;$SET\u0026#34; \u0026#39; BEGIN { print \u0026#34;create \u0026#34; SET \u0026#34; hash:net family inet -exist\u0026#34; print \u0026#34;flush \u0026#34; SET } NF \u0026amp;\u0026amp; $1 !~ /^#/ { print \u0026#34;add \u0026#34; SET \u0026#34; \u0026#34; $1 \u0026#34; -exist\u0026#34; }\u0026#39; \u0026#34;$FILE\u0026#34; | ipset restore } load_set ct_ipv4 /etc/ipset/ct.txt load_set cm_ipv4 /etc/ipset/cm.txt load_set glb_ipv4 /etc/ipset/glb.txt # 关键：重载 mwan3（不重启接口） /etc/init.d/mwan3 reload exit 0 启用脚本：\nchmod +x /usr/bin/ipset-load.sh 手动测试：\n/usr/bin/ipset-load.sh ipset list ct_ipv4 | head ipset 的“持久化” ipset 内容本身不会自动持久化，这是内核设计。\n正确做法是 开机自动恢复：\n编辑 /etc/rc.local，在 exit 0 前加入：\n/usr/bin/ipset-load.sh mwan3 配置结构（最小集合） interface（出口健康检测） config interface \u0026#39;ct\u0026#39; option enabled \u0026#39;1\u0026#39; option family \u0026#39;ipv4\u0026#39; list track_ip \u0026#39;223.5.5.5\u0026#39; config interface \u0026#39;cm\u0026#39; option enabled \u0026#39;1\u0026#39; option family \u0026#39;ipv4\u0026#39; list track_ip \u0026#39;223.6.6.6\u0026#39; config interface \u0026#39;glb\u0026#39; option enabled \u0026#39;1\u0026#39; option family \u0026#39;ipv4\u0026#39; list track_ip \u0026#39;8.8.8.8\u0026#39; member（policy 与 interface 的桥梁） config member \u0026#39;ct_m1\u0026#39; option interface \u0026#39;ct\u0026#39; option metric \u0026#39;1\u0026#39; option weight \u0026#39;1\u0026#39; config member \u0026#39;cm_m1\u0026#39; option interface \u0026#39;cm\u0026#39; option metric \u0026#39;1\u0026#39; option weight \u0026#39;1\u0026#39; config member \u0026#39;glb_m1\u0026#39; option interface \u0026#39;glb\u0026#39; option metric \u0026#39;1\u0026#39; option weight \u0026#39;1\u0026#39; policy（选路策略） config policy \u0026#39;ct_only\u0026#39; list use_member \u0026#39;ct_m1\u0026#39; config policy \u0026#39;cm_only\u0026#39; list use_member \u0026#39;cm_m1\u0026#39; config policy \u0026#39;glb_only\u0026#39; list use_member \u0026#39;glb_m1\u0026#39; rule（ipset → policy） config rule option name \u0026#39;glb_match\u0026#39; option ipset \u0026#39;glb_ipv4\u0026#39; option use_policy \u0026#39;glb_only\u0026#39; config rule option name \u0026#39;ct_match\u0026#39; option ipset \u0026#39;ct_ipv4\u0026#39; option use_policy \u0026#39;ct_only\u0026#39; config rule option name \u0026#39;cm_match\u0026#39; option ipset \u0026#39;cm_ipv4\u0026#39; option use_policy \u0026#39;cm_only\u0026#39; 规则顺序非常重要：\nglb → ct → cm → default\nfirewall：刻意不参与 在 fw4 时代：\n❌ 不需要在 /etc/config/firewall 声明 ipset ❌ 不需要为地址表更新 reload firewall mwan3 生成的 nft 规则直接引用内核 ipset 验证方式 1. ipset 是否加载成功 ipset list glb_ipv4 | head 2. mwan3 规则是否命中 mwan3 status rules 观察 match-set xxx_ipv4 dst 计数。\n3. 实际路径验证 traceroute 8.8.8.8 什么时候需要 reload / restart？ 操作 是否需要 更新地址表 ❌（脚本已处理） 运行 ipset-load.sh ❌ 修改 mwan3 rule / policy / member ✅ 排错 手动 常见误区 1. 必须在 firewall 里声明 ipset fw4 + mwan3 场景下并非必须，反而增加复杂度。\n2. 更新地址表就要 reload firewall 这是旧时代习惯，会导致连接中断。\n3. ipset 属于 firewall 实际上 ipset 是独立的内核数据结构。\n4. helper 是“官方正确方式” 在 fw4 时代，简单脚本反而更透明、可控。\n总结 ipset 是数据\nmwan3 是策略\nfirewall 是执行器\n在 fw4 时代，真正稳定的方案往往是：\n配置更少 职责更清晰 行为更可预期 ","permalink":"https://blog.octlog.com/p/nftables-mwan3-ipset-practical/","summary":"\u003ch2 id=\"背景\"\u003e背景\u003c/h2\u003e\n\u003cp\u003e在 fw4（nftables）时代，很多关于 \u003ccode\u003emwan3 + ipset\u003c/code\u003e 的教程仍然沿用 fw3 / iptables 的思路：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e在 \u003ccode\u003e/etc/config/firewall\u003c/code\u003e 里声明 ipset\u003c/li\u003e\n\u003cli\u003e每次更新地址表就 reload firewall\u003c/li\u003e\n\u003cli\u003ehelper / 脚本 / mwan3 职责混杂\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e这些做法在新架构下并非必须，反而容易带来\u003cstrong\u003e不稳定性和维护成本\u003c/strong\u003e。\u003c/p\u003e\n\u003cp\u003e本文整理一套 \u003cstrong\u003efw4 时代可长期使用、工程上可接受的 mwan3 + ipset 分流方案\u003c/strong\u003e，在“理论正确”和“现实可用”之间做出明确取舍。\u003c/p\u003e","title":"nftables 时代的 mwan3 + ipset 分流"},{"content":"前言 在 ESXi 等虚拟化环境中部署 OpenWrt x86 时，官方镜像通常只有一百多 MB 的根分区空间。在安装 LuCI、OpenClash、Docker 等组件之前，扩容几乎是必做操作。\n但 OpenWrt x86 的磁盘结构和启动方式，与常规 Linux 发行版存在明显差异。如果直接套用“Linux 扩容教程”，大概率会反复踩坑。\n本文完整记录了一次 真实发生的 OpenWrt x86 根分区扩容过程，不仅包含最终可行方案，也包含所有失败尝试及对应的错误输出，作为一份可复盘、可复用的工程记录。\n一、必须先了解的关键事实 OpenWrt x86 无法在自身运行状态下离线维护根文件系统 resize2fs 不能对已经挂载的 /（rootfs）执行 重建或调整分区后，PARTUUID 会发生变化 OpenWrt x86 的 GRUB 默认使用 PARTUUID 作为 root 参数 结论只有一个：\n必须借助 Linux Live 系统，对 OpenWrt 的磁盘进行离线维护。\n二、最初的直觉方案：在 OpenWrt 内直接扩容（失败） 确认磁盘已经在 ESXi 中扩展到 25GB：\nfdisk -l /dev/sda Disk /dev/sda: 25 GiB /dev/sda1 16M /dev/sda2 25G 尝试直接扩展 ext4：\nresize2fs /dev/sda2 得到错误：\nFilesystem at /dev/sda2 is mounted on / resize2fs: Invalid argument While checking for on-line resizing support 原因说明：\n/dev/sda2 正在作为 / 挂载 OpenWrt x86 不支持 rootfs 在线扩容 三、尝试关闭 ext4 journal（仍然失败） tune2fs -O ^has_journal /dev/sda2 The has_journal feature may only be cleared when the filesystem is unmounted or mounted read-only. 即使在 failsafe 模式下，根分区依然会被挂载，无法满足 ext4 的离线条件。\n四、尝试 failsafe / init hack（不可行） 尝试通过 GRUB 传入参数：\nroot=/dev/ram init=/bin/sh 结果表现为：\ninit 进程退出 内核自动重启 回到 GRUB 在 OpenWrt 24.x x86 环境下，该路径 不可行。\n五、结论：必须使用外部 Linux Live 系统 到此可以确认：\n在 OpenWrt x86 自身环境中，不可能完成根分区 ext4 扩容\n唯一稳定方案是：\n使用 Linux Live ISO，在 OpenWrt 未启动的情况下进行维护。\n六、在 Ubuntu Live 中离线扩容（成功） 从 Ubuntu Live Server 启动后：\nlsblk sda 25G ├─sda1 16M ├─sda2 25G └─sda128 此时 /dev/sda2 未挂载，可以安全操作。\n1. 文件系统检查 sudo e2fsck -f /dev/sda2 ***** FILE SYSTEM WAS MODIFIED ***** 这是扩容分区后的正常现象。\n2. 扩展 ext4 文件系统 sudo resize2fs /dev/sda2 The filesystem on /dev/sda2 is now XXXXX blocks long. ext4 文件系统已完整扩展。\n七、返回 OpenWrt 后的启动问题 重启后系统卡在：\nwaiting for root device PARTUUID=... 原因分析 扩容过程中分区被重建 PARTUUID 已发生变化 GRUB 仍使用旧 PARTUUID 八、永久修复 GRUB 启动参数 编辑配置文件：\nvi /boot/grub/grub.cfg 将所有启动项中的：\nroot=PARTUUID=xxxx 统一修改为：\nroot=/dev/sda2 普通启动与 failsafe 启动项 都必须修改。\n九、最终验证 df -h /dev/root 24.7G Available 24.6G Mounted on / 根分区容量与启动状态均已恢复正常。\n结语 OpenWrt x86 根分区扩容并不是工具问题，而是 系统设计层面的限制。\n这次实践得出的结论非常明确：\n❌ 不要在 OpenWrt 内尝试扩容 rootfs ❌ 不要依赖 failsafe 或 init hack ✅ 使用 Linux Live 离线维护 ✅ 扩容后避免继续使用 PARTUUID 这是一条 唯一稳定、可复现、可长期使用的路径。\n","permalink":"https://blog.octlog.com/p/openwrt-partition-expansion/","summary":"\u003ch2 id=\"前言\"\u003e前言\u003c/h2\u003e\n\u003cp\u003e在 ESXi 等虚拟化环境中部署 OpenWrt x86 时，官方镜像通常只有一百多 MB 的根分区空间。在安装 LuCI、OpenClash、Docker 等组件之前，扩容几乎是必做操作。\u003c/p\u003e\n\u003cp\u003e但 OpenWrt x86 的磁盘结构和启动方式，与常规 Linux 发行版存在明显差异。如果直接套用“Linux 扩容教程”，大概率会反复踩坑。\u003c/p\u003e","title":"一次完整的 OpenWrt x86 根分区扩容与启动修复记录"},{"content":"前言 博主在搭建博客的过程中，饱受备份的困扰，于是将图片与文章分离。因Cloudflare R2提供10G的免费存储空间，故博主将本站的图片存放于R2中。这样一来，文章的备份确实是方便了，但由于R2没有直接提供对接的客户端，没法直接像本地磁盘一样对里面的目录与文件进行管理。当然，R2兼容AWS S3，自然是可以使用API进行管理。用于管理S3的工具自然有很多，但考虑到RaiDrive是图形化界面配置，且挂载方便，故本文记录了使用RaiDrive挂载R2的过程。\n1.获取Cloudflare相关API (1).Account ID\n该API位于“存储与数据库-R2对象存储-概述”页面\n(2).访问密钥 ID和 机密访问密钥\n该API位于“存储与数据库-R2对象存储-概述”页面，API Tokens右侧有个Manage，点击进入以后，点击“创建 User API令牌”，在\u0026quot;权限\u0026quot;中，选择“管理员读和写”\n记录下“访问密钥”和“机密访问密钥”，并点击完成\n2.使用RaiDrive挂载 点击“添加”，服务类型选择“Enterprise”-\u0026ldquo;CloudflareR2\u0026rdquo;\n至此，挂载完成。\n","permalink":"https://blog.octlog.com/p/raidrivr-cfr2/","summary":"\u003ch2 id=\"前言\"\u003e前言\u003c/h2\u003e\n\u003cp\u003e博主在搭建博客的过程中，饱受备份的困扰，于是将图片与文章分离。因Cloudflare R2提供10G的免费存储空间，故博主将本站的图片存放于R2中。这样一来，文章的备份确实是方便了，但由于R2没有直接提供对接的客户端，没法直接像本地磁盘一样对里面的目录与文件进行管理。当然，R2兼容AWS S3，自然是可以使用API进行管理。用于管理S3的工具自然有很多，但考虑到RaiDrive是图形化界面配置，且挂载方便，故本文记录了使用RaiDrive挂载R2的过程。\u003c/p\u003e","title":"使用RaiDrive挂载Cloudflare R2"},{"content":"前言 博主原本使用WordPress+Inspire搭建个人博客，然而，Inspire不再更新，也不再兼容新版php，兼容性逐渐出现各种问题；与此同时，博主不太喜欢wordpress默认的一系列主题，为改善博客兼容性问题，提高博客相应速度，博主决定从wordpress的动态博客转向纯Html的静态博客。经过筛选，博主最终决定使用**Hugo框架+Stack主题**搭建我的静态博客。\n需要注意的是，Hugo与WordPress是不同的，Hugo采用MarkDown作为文本格式，在写好内容后，使用Hugo作为生成工具，手动生成Html等静态资源，Hugo没有专门的内容编辑后台，所有文字工作需要在本地完成。\n1.下载Hugo 由于博主本地使用Windows环境，故下载Windows版本的Hugo。Hugo分为3个版本，具体区别如下表\n版本 特点 SCSS/SASS 支持 Hugo Pipes 支持 hugo deploy 支持 Standard（普通版） 最基础版本，适合纯 Markdown 转 HTML ❌ ❌ ❌ Extended（拓展版） 支持现代前端构建，适合大多数主题 ✅ ✅ ❌ Extended with Deploy 在 Extended 基础上增加部署功能 ✅ ✅ ✅ 🔑 关键区别 普通版 (Standard)\n适合纯 Markdown → HTML 的轻量级博客或文档站点\n没有复杂前端需求时足够\n不支持 SCSS/SASS、PostCSS、Tailwind 等\nExtended (拓展版)\n支持 SCSS/SASS 编译（Hugo Pipes）\n支持 PostCSS，能直接处理 Tailwind、Autoprefixer 等\n适合大多数现代 Hugo 主题（因为很多主题依赖 SCSS/SASS）\nExtended with Deploy\n在 Extended 的基础上，额外支持 hugo deploy 命令\n可以直接把生成的网站部署到远程（如 S3、Azure、GCP 等）\n适合需要 Hugo 自带部署功能的用户，否则和 Extended 没区别\n为了后期使用的便利，直接下载 hugo_extended_withdeploy 就完事了\n下载完成后，你会得到一个Hugo静态网站生成器的exe执行文件，该执行文件可以帮助你生成一个静态网站的全部内容。此步骤可做可不做：将hugo所在的目录放在系统环境变量path中。笔者是做了这一步的，这一步的作用是，无论你在那个目录下，都能使用hugo命令。如不添加，则当你生成了一个静态网站资源，你需要将hugo.exe文件拖入静态网站资源的目录下，以便你日后在在目录内调用hugo命令。\n在控制台（如果没有添加环境变量，则需要在有hugo.exe的目录下执行）使用hugo version命令测试hugo是否安装成功，如果安装成功，则输出如下\nD:\\Web\\blog\u0026gt;hugo version hugo v0.150.1-ce44a8e835e6934292acda936e5b43b70f451af9+extended+withdeploy windows/amd64 BuildDate=2025-09-25T10:26:04Z VendorInfo=gohugoio 2.创建新站点 在cmd中（如果没有配置全局路径，在hugo.exe目录下使用该命令）使用命令，会在当前目录下创建一个站点\nhugo new site yoursitename #yoursitename 是你的站点文件夹名称， 可以使用dev或自己起个名字 上面截图显示了创建新的站点成功，并且会给你一些提示，按照提示走就可以花很少的时间搭建出一个静态网站\nHugo会在这个D:\\Web目录下自动新建一个名为Test的目录，如上图所示\n进入test目录\nD:\\Web\\blog\u0026gt;cd D:\\Web D:\\Web\u0026gt; 3.添加主题 Hugo下载好后，就可以开始挑选自己喜欢的主题，可以在Hugo官网下挑选（Complete List | Hugo Themes），每个主题都可以点进去查看详细信息与下载地址，笔者这里使用了stack主题，特别适合用于搭建个人博客网站。可以通过Hugo Themes中选中stack主题，进去Download，也可以在GitHub上直接搜索CaiJimmy/hugo-theme-stack: Card-style Hugo theme designed for bloggers，仿照上面下载hugo的方法找到对应位置下载源码（source code）压缩包即可。\n3.1解压主题 将stack主题的源码解压到test\\themes目录下（接下来为了方便，test统称为站点目录）。\n将解压的目录名称中的版本号删除，改成像我一样hugo-theme-stack\n值得注意的是，如果你想换其它主题，或者你一开始便不打算下载stack主题，操作也是一样的，同样将版本号删除，并将yaml配置文件中的主题改成对应的主题目录名称即可（后面会提及）\n3.2从主题文件中复制两个重要文件 在解压的目录（hugo-theme-stack）下，有一个样例目录名为：exampleSite，里面有两个非常重要的东西，一个是content目录，一个是hugo.yaml配置文件，将这两个文件复制出来\n放到站点目录下\n将原本的默认配置文件hugo.toml删除，用我们复制过来的hugo.yaml做配置文件\n注意：在content\\post\\目录下，有一个rich-content的目录删掉，post目录下存放的就是你的博客内容，这个rich-content博客中做了一些引用Youtube的样例操作，可能会导致你运行失败，这些国外网站可能会导致你访问超时\n4.修改配置文件 打开刚才复制过来的hugo.yaml\n4.1更换主题 可以看到，这里主题选择的是hugo-theme-stack，如果你想更换其它的主题，只需下载其它主题的源码到themes\\目录下，并将配置文件中的主题换掉即可\n以下使用代码段形式展现笔者修改了的部分:\n笔者将url的重定向到自己的博客域名\nbaseurl: https://blog.octlog.com 修改了著作权，当然，这个著作权是指本博客的著作权，而非hugo也非该主题\ncopyright: 八爪日志 将默认语言修改为中文\nDefaultContentLanguage: zh-cn 修改以下配置，据说可以更精确的计算读文章的时长\nhasCJKLanguage: true 这里修改的是博客左上方的标题，有中英两个版本，但笔者的博客全是中文博客，还没有做国际化的打算，故只修改了中文部分\nlanguages: en: languageName: English title: Example Site weight: 1 params: sidebar: subtitle: Example description zh-cn: languageName: 中文 title: 八爪日志 weight: 2 params: sidebar: subtitle: 一个科技爱好者的博客 这个参数是指一页展示多少篇文章\npagination: pagerSize: 5 你可以在static目录下存放你博客的图标，将名称改为favicon.ico\nfavicon: /favicon.ico # e.g.: favicon placed in `static/favicon.ico` of your site folder, then set this field to `/favicon.ico` (`/` is necessary) 以下参数是修改你的头像以及添加emoji（头像右下角的表情），首先将图片名称改为avatar.png，并添加到assets\\img\\目录下，如果没有img目录可自行创建，然后将参数修改：\nsidebar: emoji: 😺 subtitle: Lorem ipsum dolor sit amet, consectetur adipiscing elit. avatar: enabled: true local: true src: img/avatar.jpg 修改下面的参数，可以添加或修改头像下面的快捷链接小图标，笔者增加了链接进入笔者B站主页和进入笔者CSDN主页的快捷链接，图标以SVG格式存放在assets\\icons\\目录下，值得注意的是，下面参数icon是图标的文件名去掉.svg，比如brand-bilibili.svg去掉.svg，如下:\nsocial: - identifier: github name: GitHub url: https://github.com/572615681 params: icon: brand-github - identifier: home name: Home url: https://www.octlog.com params: icon: navigation - identifier: csdn name: CSDN url: https://blog.csdn.net/chenxiyu712 params: icon: brand-coinbase - identifier: mvs name: MVS url: https://msdn.octlog.com params: icon: brand-visual-studio 说明，本文的icon图标来源于此网站，此网站的icon风格与此主题较为匹配\n5.运行博客 命令：\nhugo server -D 注意： 必须是在站点目录下使用该命令。（上面我们通过cd test进入了目录） 必须是D而不是d\n运行命令后会出现以下信息\n可以看见，通过访问http://localhost:1313即可访问博客\n6.开始写文章 6.1文章目录结构 首先看一下文章目录结构，文章都保存在content目录下：\n看看对应的网站结构：\n其实无论是page，categories，post，都可以看作一个一级目录，然后每一篇文章，每一个分类，亦或者每一个侧边栏的选项，都是二级目录，二级目录下才是真正的内容，比如，在categories目录下：\n有这么几个二级目录，分别代表了四个我已经创建并附带说明的分类\n7.如何写文章 写博文采用的是markdown格式，使用Typora工具，写markdown手感特别好。\n在写博文的时候需要注意的是开头携带的信息，如下所示：\n+++ title = \u0026#39;爱快+OpenWRT最佳部署方案探讨\u0026#39; date = 2025-08-18T21:55:00+08:00 slug= \u0026#34;ikuai\u0026amp;openwrt-policy-routing\u0026#34; image = \u0026#34;https://oss.octlog.net/ikuai%26openwrt-policy-routing/top.webp\u0026#34; categories = [ \u0026#34;计算机\u0026#34;, \u0026#34;网络\u0026#34;, ] tags = [ \u0026#34;iKuai\u0026#34;, \u0026#34;OpenWrt\u0026#34;, \u0026#34;Linux\u0026#34;, ] +++ 如果是普通的编写模式，则是下面这个样子的：\ntitle：文章标题 description：副标题，简介 date：编写日期 image：文章最上方的图片 categories：分类 tags：标签 分类和标签的内容可以是中文，可以多个，但需要采用[“xx”,“xx”]的格式 :后需要加一个空格，再输入内容 后面的就按照正常markdown创作即可\n","permalink":"https://blog.octlog.com/p/hugo-static-blog/","summary":"\u003ch2 id=\"前言\"\u003e前言\u003c/h2\u003e\n\u003cp\u003e博主原本使用WordPress+Inspire搭建个人博客，然而，Inspire不再更新，也不再兼容新版php，兼容性逐渐出现各种问题；与此同时，博主不太喜欢wordpress默认的一系列主题，为改善博客兼容性问题，提高博客相应速度，博主决定从wordpress的动态博客转向纯Html的静态博客。经过筛选，博主最终决定使用**\u003ca href=\"https://github.com/gohugoio/hugo\"\u003eHugo\u003c/a\u003e框架+\u003ca href=\"https://github.com/CaiJimmy/hugo-theme-stack\"\u003eStack主题\u003c/a\u003e**搭建我的静态博客。\u003c/p\u003e","title":"使用Hugo搭建静态博客"},{"content":"0.前言 博主曾在一篇文章中看到，Linux内核高于4.9，默认内置bbr,博主天真得以为，内置=启用，故多年以来就不再手动启用BBR，直至近期使用垃圾线路的vps，发现其上行速率一言难尽后，才在网友口中得知，系统默认并不会启用BBR，需要手动启用。因此，记录下启用BBR的配置过程于此。\n1.检查内核版本 BBR 需要 Linux 内核版本 ≥ 4.9，而 Ubuntu 22.04 默认使用的是 5.x 版本，完全支持。\nuname -r 2.启用BBR拥塞控制 vim /etc/sysctl.conf 添加以下两行到文件末尾：\nnet.core.default_qdisc = fq net.ipv4.tcp_congestion_control = bbr 保存并退出，然后使配置生效：\nsysctl -p 3.验证是否启用成功 运行以下命令确认 BBR 是否已启用：\nsysctl net.ipv4.tcp_congestion_control 输出应为：\nnet.ipv4.tcp_congestion_control = bbr 再确认 BBR 是否在系统中可用：\nlsmod | grep bbr 如果有输出，说明 BBR 模块已加载。\n","permalink":"https://blog.octlog.com/p/linux-enable-bbr/","summary":"\u003ch2 id=\"0前言\"\u003e0.前言\u003c/h2\u003e\n\u003cp\u003e博主曾在一篇文章中看到，Linux内核高于4.9，默认内置bbr,博主天真得以为，内置=启用，故多年以来就不再手动启用BBR，直至近期使用垃圾线路的vps，发现其上行速率一言难尽后，才在网友口中得知，系统默认并不会启用BBR，需要手动启用。因此，记录下启用BBR的配置过程于此。\u003c/p\u003e","title":"Linux系统启用BBR"},{"content":"0.前言 从硬路由到软路由，再从软路由裸机到虚拟机，博主在此过程中体验到了软路由带来的便利，也因此产生了更多想要实现的需求，单独使用OpenWRT的方案已经难以实现博主的某些流控需求。恰好，爱快系统的特色就在于流控分流。然而，网上现有的资料，在使用爱快作为主路由，OpenWRT作为旁路由的时候，要么需手动指定网关地址，要么需要两台硬件设备实现分流，配置的灵活性与便利性有所欠缺，本文则是在网络现有教程的基础上，使用一台硬件设备，使用爱快主路由实现分流，无需手动指定网关，免去客户端的繁琐配置过程。\n1.软硬件及网络环境 1.1软硬件情况 i5-1135G7六口软路由（2.5GE） VMware ESXi 8.0U2 iKuai8_3.7.20_Build202506041743 OpenWrt R24.2.2 Buddha V1[2024] Compiled by eSir 1.2网络接入环境 中国电信PPPOE，2000M/200M 中国移动PPPOE，300M/50M 1.3实现效果 爱快作主路由，负责网络接入，实现电信/移动网络的PPPOE，提供DHCP服务，以及实现QoS， OpenWRT作为特别网关，提供DNS服务，负责非中国大陆网络的路由，实现跨境路由优化 2.ESXI配置 本次配置仅有一台硬件设备，自然是没法把网线插到网口进行直接的路由了，故需要通过ESXI的虚拟机功能，将爱快与OpenWRT两台设备相连，模拟两台设备端口相连的环境\n2.1新建虚拟机 打开 网络-虚拟交换机-添加标准虚拟交换机\n在 vSwitch 名称 中随便起个名，我以 vSwitch_inter 命名，将此交换机用于esxi间各虚拟机的内部互联，随后点击 确定 即可新建虚拟交换机。\n2.2虚拟机添加网络适配器 在爱快与OpenWRT中，各添加一张虚拟网卡，并选择接入 vSwitch_inter 交换机\n3.主路由配置 3.1基础配置 博主的接入环境中，由于中国电信的接入带宽较大，故将中国电信作为默认网关\n中国移动仅做网内访问及跨境路由\n基础配置信息\nLAN口信息：\n10.0.0.0/8\n3.2与OpenWRT互联 虚拟机互联的地址段，博主暂定为172.16.0.0/16\n将新新添加的网口设置为wan口，接入方式选择静态IP\nIP地址：172.16.0.1\n子网掩码： 255.255.0.0\n网关：172.16.0.2（暂定OpenWRT接口地址）\n爱快多线负载配置如下\n由爱快的多线负载官方文档可知\n先添加的规则优先，匹配到规则后停止匹配。 静态路由\u0026gt;域名分流\u0026gt;端口分流\u0026gt;协议分流\u0026gt;多线负载\u0026gt;默认网关\n故本策略可这样理解：\n目的地址为中国电信时，优先走中国电信出口 当中国电信出口不通时，走中国移动出口 目的地址为中国移动时，优先走中国移动出口 当中国移动出口不通时，走中国电信出口 非中国大陆地址（下文提供txt文件）优先走wan3(OpenWRT)出口 wan3出口不通时，走中国移动出口 wan3与中国移动均不通时，走中国电信出口 该路由策略多出口间互为备用，保证了网络的稳定性，即便在某个接口断开时，也不影响网络的畅通\n4.OpenWRT特别网关配置 4.1配置前说明 OpenWRT首先应当是作为一个用户，接入到爱快路由的网络中 OpenWRT应当通过lan口承载爱快转发的流量，再由wan口转出 OpenWRT的LAN口应当取消DHCP服务 4.2OpenWRT接口配置 由 4.1 的说明可知，OpenWRT的wan口应当配置为DHCP，或者静态IP，作为用户接入爱快（接入爱快的LAN口），博主此处通过Mac与IP地址绑定，指定该地址为10.0.0.3/8 由 4.1 的说明可知，OpenWRT的lan口应当配置为静态IP，用于与OpenWRT内网互联，暂定为172.16.0.2/16 由 4.1 的说明可知，应在 网络-接口-LAN DHCP服务器中，勾选忽略此接口 4.3OpenWRT防火墙区域配置 这里的lan区域和wan区域和通常情况下的有点不太一样，因为通常情况下流量只从lan口进，wan口出并进行nat，而我这种结构下lan和wan都有流量进入，区别只是lan口是专门给爱快用的，wan口是给内网用户使用的(不是用来配置默认网关，而是给内网用户用来访问openclash自带的socks5和http代理)\n5.爱快主路由的优化配置 5.1非中国大陆IP地址 点此下载\n该配置可通过 流控分流-分流设置-多线负载-自定义运营商 进行导入\n帮助提示： 如果您的 目标地址 超过5000条，则可以分多次添加重复的名称，每次最多添加5000条\n博主此处以glb命名\n5.2固定OpenWRT出口 该出口可根据代理服务器来具体测试选择，如，代理服务器对电信比较友好，则可选择固定到电信出口\n博主此处固定到移动出口\n6.最终效果 根据博主的策略，非中国大陆地址走OpenWRT出口，而WRT出口又被固定到了移动，故效果如图\n7.进阶玩法 好不容易把境外地址分流出去，当然是为了\u0026hellip;\u0026hellip;\n具体配置以SoftEther为例，可以参考博主的另一篇文章\n此处，应将DNS交由OpenWRT接管\n7.1爱快配置dns 在 网络设置-DHCP设置-DHCP服务端 当中，可将首选DNS 改为OpenWRT的内部互联地址（博主此处为172.16.0.2）\n7.2OpenWRT相应配置 考虑到后期会在OpenWRT下接入隧道服务\n在 网络-DHCP/DNS-基本设置 当中，取消勾选 仅本地服务 以保证此DNS可被其网段的用户使用\n","permalink":"https://blog.octlog.com/p/ikuaiopenwrt-policy-routing/","summary":"\u003ch2 id=\"0前言\"\u003e0.前言\u003c/h2\u003e\n\u003cp\u003e从硬路由到软路由，再从软路由裸机到虚拟机，博主在此过程中体验到了软路由带来的便利，也因此产生了更多想要实现的需求，单独使用OpenWRT的方案已经难以实现博主的某些流控需求。恰好，爱快系统的特色就在于流控分流。然而，网上现有的资料，在使用爱快作为主路由，OpenWRT作为旁路由的时候，要么需手动指定网关地址，要么需要两台硬件设备实现分流，配置的灵活性与便利性有所欠缺，本文则是在网络现有教程的基础上，使用一台硬件设备，使用爱快主路由实现分流，无需手动指定网关，免去客户端的繁琐配置过程。\u003c/p\u003e","title":"爱快+OpenWRT最佳部署方案探讨"},{"content":"本教程转载自 远景在线 ，感谢原作者\n本教程不含软件激活，只谈下载。请自行购买软件许可证，并按官方指导的方式激活。请支持正版软件。\n1.首先去 https://www.rarlab.com/download.htm 下载有广告版本，在页面上找到\nChinese Simplified (64 bit) 下载即可。注意：中文的最新版本可能比英文的最新版本晚几天发布。\n找到刚才下载的文件，例如它的文件名是winrar-x64-713sc.exe，不要运行、不要安装，直接右键-属性，然后查看数字签名的日期，例如2025年8月4日。\n2.按照上面找到的信息，替换下面的链接模板中对应的位置。 https://www.win-rar.com/fileadmin/winrar-versions/sc/sc日期/wrr/文件名 例如我们刚才找到信息替换后的下载链接就是\nhttps://www.win-rar.com/fileadmin/winrar-versions/sc/sc20250804/wrr/winrar-x64-713sc.exe 3.下载这个链接，然后安装即可。 这个版本的WinRAR和其他语言版本一样，未集火的情况下，首次使用会弹一个广告界面（一般是告诉你怎么购买WinRAR），以后就不会弹广告了。\n4.也可在此下载 n2far2000/winrarsc: WinRAR Official Release (Simplified Chinese)\n","permalink":"https://blog.octlog.com/p/ad-free-winrar/","summary":"\u003cp\u003e本教程转载自 \u003ca href=\"https://bbs.pcbeta.com/viewthread-2004225-1-1.html\"\u003e远景在线\u003c/a\u003e ，感谢原作者\u003c/p\u003e\n\u003cp\u003e本教程不含软件激活，只谈下载。请自行购买软件许可证，并按官方指导的方式激活。请支持正版软件。\u003c/p\u003e\n\u003ch2 id=\"1首先去\"\u003e1.首先去\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-gdscript3\" data-lang=\"gdscript3\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003ehttps\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"o\"\u003e//\u003c/span\u003e\u003cspan class=\"n\"\u003ewww\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003erarlab\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ecom\u003c/span\u003e\u003cspan class=\"o\"\u003e/\u003c/span\u003e\u003cspan class=\"n\"\u003edownload\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ehtm\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e下载有广告版本，在页面上找到\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eChinese Simplified (64 bit)\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e下载即可。注意：\u003cstrong\u003e中文的最新版本可能比英文的最新版本晚几天发布。\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e找到刚才下载的文件，例如它的文件名是winrar-x64-713sc.exe，不要运行、不要安装，直接右键-属性，然后查看数字签名的日期，例如2025年8月4日。\u003c/p\u003e","title":"下载无广告版本的中文WinRAR"},{"content":"1.进入阿里云 AccessKey管理 2.开始使用子账户 3.创建用户 4.保存AccessKey信息 5.添加权限 6.Openwrt-动态DNS配置 7.查看启用和更新状态 至此，配置完成\n","permalink":"https://blog.octlog.com/p/openwrt-ali-ddns/","summary":"\u003ch2 id=\"1进入阿里云-accesskey管理\"\u003e1.进入阿里云 AccessKey管理\u003c/h2\u003e\n\u003cp\u003e\u003cimg alt=\"阿里云AccessKey管理\" loading=\"lazy\" src=\"https://oss.octlog.net/openwrt-ali-ddns/ali-1.png\"\u003e\u003c/p\u003e\n\u003ch2 id=\"2开始使用子账户\"\u003e2.开始使用子账户\u003c/h2\u003e\n\u003cp\u003e\u003cimg alt=\"阿里云子账户入口\" loading=\"lazy\" src=\"https://oss.octlog.net/openwrt-ali-ddns/ali-2.png\"\u003e\u003c/p\u003e\n\u003ch2 id=\"3创建用户\"\u003e3.创建用户\u003c/h2\u003e\n\u003cp\u003e\u003cimg alt=\"创建用户界面\" loading=\"lazy\" src=\"https://oss.octlog.net/openwrt-ali-ddns/ali-3.png\"\u003e\u003c/p\u003e\n\u003ch2 id=\"4保存accesskey信息\"\u003e4.保存AccessKey信息\u003c/h2\u003e\n\u003cp\u003e\u003cimg alt=\"保存AccessKey\" loading=\"lazy\" src=\"https://oss.octlog.net/openwrt-ali-ddns/ali-4.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"AccessKey详情\" loading=\"lazy\" src=\"https://oss.octlog.net/openwrt-ali-ddns/ali-5-1.png\"\u003e\u003c/p\u003e\n\u003ch2 id=\"5添加权限\"\u003e5.添加权限\u003c/h2\u003e\n\u003cp\u003e\u003cimg alt=\"权限管理界面\" loading=\"lazy\" src=\"https://oss.octlog.net/openwrt-ali-ddns/ali-6.png\"\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"权限选择\" loading=\"lazy\" src=\"https://oss.octlog.net/openwrt-ali-ddns/ali-7.png\"\u003e\u003c/p\u003e\n\u003ch2 id=\"6openwrt-动态dns配置\"\u003e6.Openwrt-动态DNS配置\u003c/h2\u003e\n\u003cp\u003e\u003cimg alt=\"OpenWRT动态DNS配置\" loading=\"lazy\" src=\"https://oss.octlog.net/openwrt-ali-ddns/wrt-1.png\"\u003e\u003c/p\u003e\n\u003ch2 id=\"7查看启用和更新状态\"\u003e7.查看启用和更新状态\u003c/h2\u003e\n\u003cp\u003e\u003cimg alt=\"状态检查界面\" loading=\"lazy\" src=\"https://oss.octlog.net/openwrt-ali-ddns/wrt-2.png\"\u003e\u003c/p\u003e\n\u003cp\u003e至此，配置完成\u003c/p\u003e","title":"openwrt通过阿里云子AccessKey添加阿里云ddns"},{"content":"本文节选自微软官方文档，如有必要请参考原文\n适用于： Windows Server 2022、Windows Server 2019、Windows Server 2016、Windows 10、Windows 11\n重要：为了方便起见，提供了自动登录功能。 但是，此功能可能会带来安全风险。 如果将计算机设置为自动登录，则以物理方式获取计算机访问权限的任何人都可以访问计算机的所有内容，包括计算机连接到的任何网络。 此外，启用自动登录时，密码以纯文本形式存储在注册表中。 Authenticated Users 组可以远程读取存储此值的特定注册表项。 仅当计算机处于物理安全状态且已采取步骤确保不受信任的用户无法远程访问注册表时，才建议使用此设置。\n使用注册表编辑器启用自动登录 此部分（或称方法或任务）介绍了修改注册表的步骤。 但是，注册表修改不当可能会出现严重问题。 因此，按以下步骤操作时请务必谨慎。 作为额外保护措施，请在修改注册表之前先将其备份。 如果之后出现问题，您就可以还原注册表。 有关如何备份和还原注册表的详细信息，请参阅如何备份和还原 Windows 中的注册表\n要使用注册表编辑器启用自动登录，请执行以下步骤：\n1.选择“​开始​”，然后选择“​运行​”。 2.在 “运行 ”框中，键入 ​regedit.exe​，然后按Enter。 3.在注册表中找到HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon子项。 4.在​**“编辑​”菜单上，选择“新建​”​，然后指向“​字符串值**​”。 5.键入 ​AutoAdminLogon​，然后按 Enter。 6.双击“AutoAdminLogon”。 7.在 “编辑字符串 ”对话框中，键入 1 ，然后选择“ ​确定​”。 8.双击 DefaultUserName 条目，键入用户名，然后选择“ ​确定​”。 9.双击 DefaultPassword 条目，键入密码，然后选择“ ​确定​”。 如果 DefaultPassword 值和DefaultUserName值不存在，则必须添加该值。 要添加该值，请执行以下步骤： a.在​**“编辑​”菜单上，选择“新建​”​，然后指向“​字符串值**​”。 b.键入 ​DefaultUserName​，然后按 Enter。 c.双击“DefaultUserName”。 d.在 “编辑字符串 ”对话框中，键入用户名，然后选择“ ​确定​”。 e.键入 ​DefaultPassword​，然后按 Enter。 f.双击“DefaultPassword”。 g.在 “编辑字符串 ”对话框中，键入密码，然后选择“ ​确定​”。 10.如果已将计算机加入域，应添加 DefaultDomainName 值，值的数据应设置为域的完全限定域名 (FQDN) ，例如 contoso.com.。 11.退出注册表编辑器。 12.Restart your computer. 现在可以自动登录。 备注：如果未指定 DefaultPassword 字符串，Windows 会自动将键的值 AutoAdminLogon 从 1 （true）更改为 0 （false），禁用 AutoAdminLogon 功能。\n","permalink":"https://blog.octlog.com/p/windows-automatic-login/","summary":"\u003cp\u003e本文节选自\u003ca href=\"https://learn.microsoft.com/zh-cn/troubleshoot/windows-server/user-profiles-and-logon/turn-on-automatic-logon\"\u003e微软官方文档\u003c/a\u003e，如有必要请参考原文\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e适用于：\u003c/em\u003e Windows Server 2022、Windows Server 2019、Windows Server 2016、Windows 10、Windows 11\u003c/p\u003e\n\u003cp\u003e重要：为了方便起见，提供了自动登录功能。 但是，此功能可能会带来安全风险。 如果将计算机设置为自动登录，则以物理方式获取计算机访问权限的任何人都可以访问计算机的所有内容，包括计算机连接到的任何网络。 此外，启用自动登录时，密码以纯文本形式存储在注册表中。 Authenticated Users 组可以远程读取存储此值的特定注册表项。 仅当计算机处于物理安全状态且已采取步骤确保不受信任的用户无法远程访问注册表时，才建议使用此设置。\u003c/p\u003e","title":"在 Windows 中启用自动登录功能"},{"content":"博主在使用ESXI过程中需要使用到虚拟机自动启动的功能，设置后发现依然无法生效，故查阅资料后将配置过程记录于此\n1.设置ESXI自动启动 1.登录到虚拟机，依次点击 主机-管理-系统-自动启动\n2.在编辑设置中，将“已启用”项选择为“是”，其余配置可根据实际需要更改，也可保持默认\n2.设置虚拟机及OS自动启动 在配置完ESXI自启以后，接着就可以配置虚拟机自启了\n1.选择虚拟机-右击-自动启动-启用\n至此，配置完成\n","permalink":"https://blog.octlog.com/p/vmware-autostart/","summary":"\u003cp\u003e博主在使用ESXI过程中需要使用到虚拟机自动启动的功能，设置后发现依然无法生效，故查阅资料后将配置过程记录于此\u003c/p\u003e\n\u003ch2 id=\"1设置esxi自动启动\"\u003e1.设置ESXI自动启动\u003c/h2\u003e\n\u003cp\u003e1.登录到虚拟机，依次点击 主机-管理-系统-自动启动\u003c/p\u003e\n\u003cp\u003e\u003cimg loading=\"lazy\" src=\"https://oss.octlog.net/vmware-autostart/esxiautostart-1.png\"\u003e\u003c/p\u003e\n\u003cp\u003e2.在编辑设置中，将“已启用”项选择为“是”，其余配置可根据实际需要更改，也可保持默认\u003c/p\u003e","title":"Vmware ESXI 配置虚拟机开机启动"},{"content":"本文参考Microsoft官方文档整理，其中密钥均来自MS官方\n安装产品密钥 slmgr /ipk \u0026lt;product key\u0026gt; 设置KMS服务器 slmgr -skms \u0026lt;kms server\u0026gt; 激活系统 slmgr -ato Windows Server LTSC Windows Server 2025 操作系统版本 KMS 客户端产品密钥 Windows Server 2025 标准 TVRH6-WHNXV-R9WG3-9XRFY-MY832 Windows Server 2025 数据中心 D764K-2NDRG-47T6Q-P8T8W-YP6DF Windows Server 2025 Datacenter：Azure Edition XGN3F-F394H-FD2MY-PP6FD-8MCRC Windows Server 2022 操作系统版本 KMS 客户端产品密钥 Windows Server 2022 Standard VDYBN-27WPP-V4HQT-9VMD4-VMK7H Windows Server 2022 Datacenter WX4NM-KYWYW-QJJR4-XV3QB-6VM33 Windows Server 2022 Datacenter：Azure Edition NTBV8-9K7Q8-V27C6-M2BTV-KHMXV Windows Server 2019 操作系统版本 KMS 客户端产品密钥 Windows Server 2019 Standard N69G4-B89J2-4G8F4-WWYCC-J464C Windows Server 2019 Datacenter WMDGN-G9PQG-XVVXX-R3X43-63DFG Windows Server 2019 Essentials WVDHN-86M7X-466P6-VHXV7-YY726 Windows Server 2016 操作系统版本 KMS 客户端产品密钥 Windows Server 2016 Standard WC2BQ-8NRM3-FDDYY-2BFGV-KHKQY Windows Server 2016 Datacenter CB7KF-BWN84-R7R2Y-793K2-8XDDG Windows Server 2016 Essentials JCKRF-N37P4-C2D82-9YXRT-4M63B Windows Server 半年频道 Windows Server，版本 20H2、2004、1909、1903 和 1809 操作系统版本 KMS 客户端产品密钥 Windows Server Standard N2KJX-J94YW-TQVFB-DG9YT-724CC Windows Server Datacenter 6NMRW-2C8FM-D24W7-TQWMY-CWH2D 重要Windows Server 版本 20H2 已于 2022 年 8 月 9 日终止服务，不再接收安全更新。 这包括停用 Windows Server 半年频道 (SAC)，不再提供未来版本。使用 Windows Server SAC 的客户应迁移到Azure Stack HCI。 或者，客户可使用 Windows Server 的长期服务渠道。 Windows 11 和 Windows 10（半年频道） 有关受支持的版本和服务终止日期的信息，请参阅 Windows 生命周期情况说明书\n操作系统版本 KMS 客户端产品密钥 Windows 11 专业版Windows 10 专业版 W269N-WFGWX-YVC9B-4J6C9-T83GX Windows 11 专业版 NWindows 10 专业版 N MH37W-N47XK-V7XM9-C7227-GCQG9 Windows 11 专业工作站版Windows 10 专业工作站版 NRG8B-VKK3Q-CXVCJ-9G2XF-6Q84J Windows 11 专业工作站版 NWindows 10 专业工作站版 N 9FNHH-K3HBT-3W4TD-6383H-6XYWF Windows 11 专业教育版Windows 10 专业教育版 6TP4R-GNPTD-KYYHQ-7B7DP-J447Y Windows 11 专业教育版 NWindows 10 专业教育版 N YVWGF-BXNMC-HTQYQ-CPQ99-66QFC Windows 11 教育版Windows 10 教育版 NW6C2-QMPVW-D7KKK-3GKT6-VCFB2 Windows 11 教育版 NWindows 10 教育版 N 2WH4N-8QGBV-H22JP-CT43Q-MDWWJ Windows 11 企业版Windows 10 企业版 NPPR9-FWDCX-D2C8J-H872K-2YT43 Windows 11 企业版 NWindows 10 企业版 N DPH2V-TTNVB-4X9Q3-TJR4H-KHJW4 Windows 11 企业版 GWindows 10 企业版 G YYVX9-NTFWV-6MDM3-9PT4T-4M68B Windows 11 企业版 G NWindows 10 企业版 G N 44RPN-FTY23-9VTTB-MP9BX-T84FV Windows 企业版 LTSC 和 LTSB Windows 11 LTSC 2024 Windows 10 LTSC 2021、2019 操作系统版本 KMS 客户端产品密钥 Windows 11 企业版 LTSC 2024Windows 10 企业版 LTSC 2021Windows 10 企业版 LTSC 2019 M7XTQ-FN8P6-TTKYV-9D4CC-J462D Windows 11 企业版 N LTSC 2024Windows 10 企业版 N LTSC 2021Windows 10 企业版 N LTSC 2019 92NFX-8DJQP-P6BBQ-THF9C-7CG2H Windows IoT LTSC 操作系统版本 KMS 客户端产品密钥 Windows IoT 企业版 LTSC 2024Windows IoT 企业版 LTSC 2021 KBN8V-HFGQ4-MGXVD-347P6-PDQGT Windows 10 LTSB 2016 操作系统版本 KMS 客户端产品密钥 Windows 10 企业版 LTSB 2016 DCPHK-NFMTC-H88MJ-PFHPY-QJ4BJ Windows 10 企业版 N LTSB 2016 QFFDN-GRT3P-VKWWX-X7T3R-8B639 Windows 10 LTSB 2015 操作系统版本 KMS 客户端产品密钥 Windows 10 企业版 LTSB 2015 WNMTR-4C88C-JK8YV-HQ7T2-76DF9 Windows 10 企业版 N LTSB 2015 2F77B-TNFGY-69QQF-B8YKP-D69TJ 早期版本的 Windows Server Windows Server 版本 1803 操作系统版本 KMS 客户端产品密钥 Windows Server Standard PTXN8-JFHJM-4WC78-MPCBR-9W4KR Windows Server Datacenter 2HXDN-KRXHB-GPYC7-YCKFJ-7FVDG Windows Server 版本 1709 操作系统版本 KMS 客户端产品密钥 Windows Server Standard DPCNP-XQFKJ-BJF7R-FRC8D-GF6G4 Windows Server Datacenter 6Y6KB-N82V8-D8CQV-23MJW-BWTG6 Windows Server 2012 R2 操作系统版本 KMS 客户端产品密钥 Windows Server 2012 R2 Standard D2N9P-3P6X9-2R39C-7RTCD-MDVJX Windows Server 2012 R2 Datacenter W3GGN-FT8W3-Y4M27-J84CP-Q3VJ9 Windows Server 2012 R2 Essentials KNC87-3J2TX-XB4WP-VCPJV-M4FWM Windows Server 2012 操作系统版本 KMS 客户端产品密钥 Windows Server 2012 BN3D2-R7TKB-3YPBD-8DRP2-27GG4 Windows Server 2012 N 8N2M2-HWPGY-7PGT9-HGDD8-GVGGY Windows Server 2012 单语言版 2WN2H-YGCQR-KFX6K-CD6TF-84YXQ Windows Server 2012 特定国家/地区版 4K36P-JN4VD-GDC6V-KDT89-DYFKP Windows Server 2012 Standard XC9B7-NBPP2-83J2H-RHMBY-92BT4 Windows Server 2012 MultiPoint 标准版 HM7DN-YVMH3-46JC3-XYTG7-CYQJJ Windows Server 2012 MultiPoint 高级版 XNH6W-2V9GX-RGJ4K-Y8X6F-QGJ2G Windows Server 2012 Datacenter 48HP8-DN98B-MYWDG-T2DCC-8W83P Windows Server 2012 Essentials HTDQM-NBMMG-KGYDT-2DTKT-J2MPV Windows Server 2008 R2 操作系统版本 KMS 客户端产品密钥 Windows Server 2008 R2 Web 版 6TPJF-RBVHG-WBW2R-86QPH-6RTM4 Windows Server 2008 R2 HPC 版 TT8MH-CG224-D3D7Q-498W2-9QCTX Windows Server 2008 R2 标准版 YC6KT-GKW9T-YTKYR-T4X34-R7VHC Windows Server 2008 R2 企业版 489J6-VHDMP-X63PK-3K798-CPX3Y Windows Server 2008 R2 Datacenter 74YFP-3QFB3-KQT8W-PMXWJ-7M648 面向基于 Itanium 系统的 Windows Server 2008 R2 GT63C-RJFQ3-4GMB6-BRFB9-CB83V Windows Server 2008 操作系统版本 KMS 客户端产品密钥 Windows Web Server 2008 WYR28-R7TFJ-3X2YQ-YCY4H-M249D Windows Server 2008 标准版 TM24T-X9RMF-VWXK6-X8JC9-BFGM2 不带 Hyper-V 的 Windows Server 2008 标准版 W7VD6-7JFBR-RX26B-YKQ3Y-6FFFJ Windows Server 2008 企业版 YQGMW-MPWTJ-34KDK-48M3W-X4Q6V 不带 Hyper-V 的 Windows Server 2008 企业版 39BXF-X8Q23-P2WWT-38T2F-G3FPG Windows Server 2008 HPC RCTX3-KWVHP-BR6TB-RB6DM-6X7HP Windows Server 2008 Datacenter 7M67G-PC374-GR742-YH8V4-TCBY3 不带 Hyper-V 的 Windows Server 2008 数据中心版 22XQ2-VRXRG-P8D42-K34TD-G3QQC 面向基于 Itanium 系统的 Windows Server 2008 4DWFP-JF3DJ-B7DTH-78FJB-PDRHK 早期版本的 Windows 客户端 Windows 8.1 操作系统版本 KMS 客户端产品密钥 Windows 8.1 专业版 GCRJD-8NW9H-F2CDX-CCM8D-9D6T9 Windows 8.1 专业版 N HMCNV-VVBFX-7HMBH-CTY9B-B4FXY Windows 8.1 企业版 MHF9N-XY6XB-WVXMC-BTDCT-MKKG7 Windows 8.1 企业版 N TT4HM-HN7YT-62K67-RGRQJ-JFFXW Windows 8 操作系统版本 KMS 客户端产品密钥 Windows 8 专业版 NG4HW-VH26C-733KW-K6F98-J8CK4 Windows 8 专业版 N XCVCF-2NXM9-723PB-MHCB7-2RYQQ Windows 8 企业版 32JNW-9KQ84-P47T8-D8GGY-CWCK7 Windows 8 企业版 N JMNMF-RHW7P-DMY6X-RF3DR-X2BQT Windows 7 操作系统版本 KMS 客户端产品密钥 Windows 7 专业版 FJ82H-XT6CR-J8D7P-XQJJ2-GPDD4 Windows 7 专业版 N MRPKT-YTG23-K7D7T-X2JMM-QY7MG Windows 7 专业版 E W82YF-2Q76Y-63HXB-FGJG9-GF7QX Windows 7 企业版 33PXH-7Y6KF-2VJC9-XBBR8-HVTHH Windows 7 企业版 N YDRBP-3D83W-TY26F-D46B2-XCKRJ Windows 7 企业版 E C29WB-22CC8-VJ326-GHFJW-H9DH4 Windows Vista 操作系统版本 KMS 客户端产品密钥 Windows Vista 商用版 YFKBB-PQJJV-G996G-VWGXY-2V3X8 Windows Vista 商用版 N HMBQG-8H2RH-C77VX-27R82-VMQBT Windows Vista 企业版 VKK3X-68KWM-X2YGT-QR4M6-4BWMV Windows Vista 企业版 N VTC42-BM838-43QHV-84HX6-XJXKV ","permalink":"https://blog.octlog.com/p/windows-kms/","summary":"\u003cp\u003e本文参考Microsoft官方文档整理，其中密钥均来自MS官方\u003c/p\u003e\n\u003ch2 id=\"安装产品密钥\"\u003e安装产品密钥\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eslmgr /ipk \u0026lt;product key\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"设置kms服务器\"\u003e设置KMS服务器\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eslmgr -skms \u0026lt;kms server\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"激活系统\"\u003e激活系统\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eslmgr -ato\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"windows-server-ltsc\"\u003eWindows Server LTSC\u003c/h2\u003e\n\u003ch3 id=\"windows-server-2025\"\u003eWindows Server 2025\u003c/h3\u003e\n\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003e操作系统版本\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003eKMS 客户端产品密钥\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eWindows Server 2025 标准\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eTVRH6-WHNXV-R9WG3-9XRFY-MY832\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eWindows Server 2025 数据中心\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eD764K-2NDRG-47T6Q-P8T8W-YP6DF\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eWindows Server 2025 Datacenter：Azure Edition\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eXGN3F-F394H-FD2MY-PP6FD-8MCRC\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"windows-server-2022\"\u003eWindows Server 2022\u003c/h3\u003e\n\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003e操作系统版本\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003eKMS 客户端产品密钥\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eWindows Server 2022 Standard\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eVDYBN-27WPP-V4HQT-9VMD4-VMK7H\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eWindows Server 2022 Datacenter\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eWX4NM-KYWYW-QJJR4-XV3QB-6VM33\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eWindows Server 2022 Datacenter：Azure Edition\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eNTBV8-9K7Q8-V27C6-M2BTV-KHMXV\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"windows-server-2019\"\u003eWindows Server 2019\u003c/h3\u003e\n\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003e操作系统版本\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003eKMS 客户端产品密钥\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eWindows Server 2019 Standard\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eN69G4-B89J2-4G8F4-WWYCC-J464C\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eWindows Server 2019 Datacenter\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eWMDGN-G9PQG-XVVXX-R3X43-63DFG\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eWindows Server 2019 Essentials\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eWVDHN-86M7X-466P6-VHXV7-YY726\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"windows-server-2016\"\u003eWindows Server 2016\u003c/h3\u003e\n\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003e操作系统版本\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003eKMS 客户端产品密钥\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eWindows Server 2016 Standard\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eWC2BQ-8NRM3-FDDYY-2BFGV-KHKQY\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eWindows Server 2016 Datacenter\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eCB7KF-BWN84-R7R2Y-793K2-8XDDG\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eWindows Server 2016 Essentials\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eJCKRF-N37P4-C2D82-9YXRT-4M63B\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"windows-server-半年频道\"\u003eWindows Server 半年频道\u003c/h2\u003e\n\u003ch3 id=\"windows-server版本-20h2200419091903-和-1809\"\u003eWindows Server，版本 20H2、2004、1909、1903 和 1809\u003c/h3\u003e\n\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003e操作系统版本\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003eKMS 客户端产品密钥\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eWindows Server Standard\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eN2KJX-J94YW-TQVFB-DG9YT-724CC\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eWindows Server Datacenter\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e6NMRW-2C8FM-D24W7-TQWMY-CWH2D 重要Windows Server 版本 20H2 已于 2022 年 8 月 9 日终止服务，不再接收安全更新。 这包括停用 Windows Server 半年频道 (SAC)，不再提供未来版本。使用 Windows Server SAC 的客户应迁移到\u003ca href=\"https://learn.microsoft.com/zh-cn/azure-stack/hci/\"\u003eAzure Stack HCI\u003c/a\u003e。 或者，客户可使用 Windows Server 的长期服务渠道。\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"windows-11-和-windows-10半年频道\"\u003eWindows 11 和 Windows 10（半年频道）\u003c/h2\u003e\n\u003cp\u003e有关受支持的版本和服务终止日期的信息，请参阅 \u003ca href=\"https://support.microsoft.com/help/13853/windows-lifecycle-fact-sheet\"\u003eWindows 生命周期情况说明书\u003c/a\u003e\u003c/p\u003e","title":"各版本Windows系统KMS产品密钥"},{"content":"本文翻译自Hetzner官方文档\n是否可以使用自己的许可证安装 Windows？ 请参阅您的许可证的 Microsoft 许可条件，以确定它是否有资格在云服务器上使用。 必须手动完成安装。为此，您可以使用 CD/DVD 映像。\n另请注意以下有关服务器架构类型的信息：\n架构类型 服务器计划 安装 x86 CX、CPX、CCX 如果您拥有必要的许可证，请按照“示例说明”中说明的步骤进行操作。 手臂64 CAX 具有 Arm64 架构的 Hetzner Cloud 服务器不支持Windows Server。 为什么我服务器上的时间不正确？ 所有云服务器主机都使用 UTC 作为系统时间，这就是 Windows 经常出现虚拟服务器中系统时间问题的原因。\n要永久解决此问题，必须在 Windows 注册表中创建一个条目，该条目告诉 Windows 硬件时钟（RTC - 由主机系统模拟）不是本地时区，而是 UTC。\n必须在命令提示符 （cmd.exe） 中输入以下命令：\nreg add \u0026#34;HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Control\\TimeZoneInformation\u0026#34; /v RealTimeIsUniversal /d 1 /t REG_DWORD /f 然后需要重新启动 Windows。\n重新启动后，可以使用以下命令来检查设置是否已成功应用：\nreg query \u0026#34;HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Control\\TimeZoneInformation\u0026#34; /s 如果成功应用了更改，则应显示一行内容为 RealTimeIsUniversal 和值 0x1。\nIPv6 配置 默认情况下，Windows 使用 IPv6 连接使用临时地址。这可能会阻止您可以使用 /64 网络。为了能够使用 IPv6 网络，您应该默认禁用临时地址。\nWindows 服务器 2012、2012R2、2016 在具有管理权限的 powershell 中运行以下命令：\nSet-NetIPv6Protocol -RandomizeIdentifiers Disabled Set-NetIPv6Protocol -UseTemporaryAddresses Disabled 视窗 2008R2 在具有管理权限的 cmd.exe中运行以下命令：\nnetsh interface ipv6 set global randomizeidentifiers=disabled store=active netsh interface ipv6 set global randomizeidentifiers=disabled store=persistent netsh interface ipv6 set privacy state=disabled store=active netsh interface ipv6 set privacy state=disabled store=persistent 手动安装时应注意什么？ 要安装 Windows，必须安装 VirtIO 驱动程序。例如，可以通过 ISO 映像 （virtio-win-latest[\u0026hellip;] 挂载和安装驱动程序。iso 的 API 中）。\n所需驱动程序的文件夹命名如下：\n•Balloon\n•NetKVM\n•vioscsi\n它们中的每一个通常都有一个包含架构 （amd64） 的文件夹。必须选择此项才能安装驱动程序。\n示例说明 挂载镜像 要选择可用的 CD/DVD 映像，您必须在 Cloud Console 中选择您的服务器并切换到“ISO IMAGES”选项卡。然后，您必须选择 ISO 并通过单击“MOUNT”进行安装它\n现在，您可以启动服务器并正常执行安装，直到安装要求安装类型为止。请选择自定义安装并继续安装。 如果您遇到蓝屏，请使用 ON/OFF 开关关闭和打开服务器。\n安装驱动程序 现在继续到安装搜索驱动器的位置。此时，您必须将映像切换到最新可用的 VirtIO 驱动程序 CD。\n随后，需要安装下面提到的驱动程序。\n每个文件夹通常都有一个包含架构 （amd64） 的子文件夹。必须选择此项才能安装驱动程序。\n安装驱动程序后，您需要切换回以前使用的 Windows 映像。\n现在，您必须删除并格式化驱动器。最后，您可以正常恢复安装。\n","permalink":"https://blog.octlog.com/p/hz-cloud-install-win/","summary":"\u003cp\u003e本文翻译自Hetzner官方文档\u003c/p\u003e\n\u003ch2 id=\"是否可以使用自己的许可证安装-windows\"\u003e是否可以使用自己的许可证安装 Windows？\u003c/h2\u003e\n\u003cp\u003e请参阅您的许可证的 Microsoft 许可条件，以确定它是否有资格在云服务器上使用。 必须手动完成安装。为此，您可以使用 CD/DVD 映像。\u003c/p\u003e\n\u003cp\u003e另请注意以下有关服务器架构类型的信息：\u003c/p\u003e\n\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003e架构类型\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003e服务器计划\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003e安装\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003ex86\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eCX、CPX、CCX\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e如果您拥有必要的许可证，请按照“\u003ca href=\"https://docs.hetzner.com/cloud/servers/windows-on-cloud/#example-instructions\"\u003e示例说明\u003c/a\u003e”中说明的步骤进行操作。\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e手臂64\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eCAX\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e具有 Arm64 架构的 Hetzner Cloud 服务器不支持\u003cem\u003eWindows Server\u003c/em\u003e。\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"为什么我服务器上的时间不正确\"\u003e为什么我服务器上的时间不正确？\u003c/h2\u003e\n\u003cp\u003e所有云服务器主机都使用 UTC 作为系统时间，这就是 Windows 经常出现虚拟服务器中系统时间问题的原因。\u003c/p\u003e","title":"Hetzner Cloud安装Windows系统"},{"content":"在校期间，博主发现多运营商策略路由的上网方式，在体验上明显好于单运营商，单出口的网络。经过长时间观察，博主发现，对于电信/联通/移动的目标地址会通过对应的互联网出口访问，对于非三大运营商的目标地址，则根据具体的规则及负载情况，选择某一个互联网出口。\n本文基于Openwrt系统，使用 负载均衡 和 MWAN3分流助手 两款插件实现多运营商负载均衡\n本文特色：使用SoftEtherVPN实现非中国大陆目的地址的策略路由\n最终实现策略：\n非大陆IPV4地址/GFW列表\u0026ndash;\u0026gt;SE-VPN出口\n电信地址\u0026ndash;\u0026gt;电信出口\n移动地址\u0026ndash;\u0026gt;移动出口\n默认路由\u0026ndash;\u0026gt;电信出口\n0.基本情况 0.1硬件 i5-1135G7六口软路由（六口2.5GE）\n0.2系统/软件 VMware ESXi 8.0U2\nOpenWrt R23.7.7 GDQ V2[2023] Compiled by eSir\n0.3运营商接入 电信、移动\n0.4软路由接口情况 WAN：移动物理接口，桥接，PPPOE拨号\nWAN2：电信物理接口，桥接，PPPOE拨号\n0.5额外的地址表 非中国大陆IPV4地址：\n点击此处下载\n本地址表为博主聚合每个国家/地区的ipv4地址整理所得\n1.配置负载均衡插件 在OpenWRT系统中找到 网络-负载均衡 进行配置\n1.1配置MWAN - 接口 MWAN 支持最多 252 个物理或逻辑接口。 MWAN 要求所有接口必须在 /etc/config/network 中设定唯一的网关跃点。 名称必须与 /etc/config/network 中的接口名称匹配。 名称允许包括 A-Z、a-z、0-9、_ 但是不能有空格。 接口不应该与成员、策略、规则中的任意一个设置项使用相同的名称\n在 网络-接口 中，将WAN的跃点数设为10，WAN2保持默认\n在 网络-负载均衡-接口 中，添加wan​wan2两个接口\n注意：接口名称大小写应以系统为准，可使用下列命令查看\nuci show network | grep \u0026#39;interface\u0026#39; 由上图可知，，接口名称均为小写。\n在接口配置中，设置跟踪的主机或IP地址，用于检测链路是否在线\n按上述方式配置好wan​wan2 两个接口，最终效果如下图\n1.2配置MWAN - 成员 “成员”用来设置每一个 MWAN 接口的跃点数（即接口优先级）和所占比重。 名称允许包括 A-Z、 a-、0-9、_ 但是不能有空格。 成员不应该与接口、策略、规则中的任意一个设置项使用相同的名称\n最终配置结果如下所示\n此次配置中，对 wan 和 wan2口各配置了3个成员，vpn0则仅配置了1个成员，​==相同接口的3个成员之间仅存在跃点数（即接口优先级）的区别，其它方面均无差别==​，对应三种路由策略，即：\n仅走wan口（只走移动出口）\n仅走wan2口（只走电信口）\n仅走vpn0口（只走SE-VPN出口）\n具体策略配置思路将在本文1.3节详细说明，vpn0接口的前期配置则在本文的 进阶 部分展示\n1.3配置MWAN - 策略 “策略”把成员进行分组，告诉 MWAN 如何分配“规则”中使用这一策略的流量 拥有较低跃点数的成员将会被优先使用。拥有相同跃点数的成员把流量进行负载均衡。 进行负载均衡的成员之间拥有较高比重的成员将会被分配到更多流量。 名称允许包括A-Z、a-z、0-9、_ 但是不能有空格。名称应该在 15 个字符以内 策略不应该与接口、成员、规则中的任意一个设置项使用相同的名称\n本次配置使用到的策略为 vpn0_only​wan_only​wan2_only 分别代表 仅走隧道，仅走移动，仅走电信 三种策略，具体配置情况如下\n为保证网络稳定，vpn0_only 中分配了三个成员，先后依次为 ==vpn0_m1_w1 ，wan_m2_w1 ，wan2_m3_w1== ，三个成员之间存在备用\n所表示的含义：\n1.在vpn0接口在线时，使用成员​==vpn0_m1_w1==​（vpn0接口，​==跃点为1==​），走vpn0（隧道）出口\n2.在vpn0接口离线时，使用成员​==wan_m2_w1==​（wan接口，​==跃点为2==​），走wan（移动）出口\n3.在vpn0接口离线，且wan接口也离线的情况下，使用成员​==wan2_m3_w1==​（wan2接口，​==跃点为3==​），走wan2（电信）出口\n为保证网络稳定，wan_only 中分配了两个成员，先后以此分别为 wan_m1_w1​wan2_m2_w1 ，即优先走wan出口（移动），wan离线的情况下走wan2（电信）出口\n同理，wan2_only 中分配了两个成员，不再赘述\n备用成员选择 不可达（拒绝），见下图\n上图所示的 balanced 策略，配置正确的情况下，可用于 多拨/多线带宽叠加 等场景，暂不在本文的讨论范围内。\n1.4配置MWAN - 规则 规则用于指定哪些流量将使用特定的 MWAN 策略 规则可基于 IP 地址，端口或协议 ==每条流量至上而下进行匹配== ==如果匹配中了某条规则，则其下方的规则将被忽略== 不符合任何规则的流量将使用主路由表进行路由 目的地为已知（非默认）网络的流量由主路由表处理 如果流量符合某条规则，但该规则所使用的策略中的所有 WAN 接口都离线，则该流量会被丢弃 名称可包含字符 A-Z，a-z，0-9，_ ，但不能有空格 规则不能与接口、成员或策略重名\n1.4.1配置前准备 在配置规则前，先打开 服务-MWAN3分流助手-IPSet列表 查看现有的路由表数据，如下图\n该列表所在绝对路径为 /rom/usr/lib/lua/luci/model/cbi/mwan3helper/list.lua ，可根据需要自行修改，其中，中国电信的ipsets名称为 ct，中国移动的ipsets名称为cmcc\n其中，非中国大陆ISP 和 部分PT-Tracker地址 为博主后期添加\n在 /etc/init.d/mwan3helper 文件末尾可看到如下内容\n该部分定义了 ipsets 名称与对应地址表的关系，例如ct对应的地址表为 /etc/mwan3helper/chinatelecom.txt ，该部分内容可配合地址表一起，根据实际需要进行修改，最后两行内容为博主后期添加\n地址表实际内容为一堆聚合后的ipv4地址，如下图\n1.4.2开始配置路由规则 理清ipsets与地址表对应的关系后，可以开始配置路由规则\n本文将介绍下图标号的10个规则\n①指定的源地址（内网地址/网段）使用 wan2_only 策略，电信出口在线时，优先走电信出口，具体配置页面如下\n填入源地址（支持CRDR记法），协议选择all，分配策略为 wan2_only\n②与①同理，不再赘述，指定的源地址，移动出口在线时，优先走移动出口\n③指定某个目的地址，协议选择 all，移动出口在线时，优先走移动出口\n此策略原为vpn0接口做准备，该地址为AWS首尔一台vps的地址，考虑到移动在亚太地区有丰富的跨境互联资源，故通过移动连接隧道。该策略已弃用，现在博主通过移动ipv6接入隧道，获得了更稳定的跨境互联体验\n④与③同理，不再赘述\n⑤⑥⑦为vpn0接口的策略\n其中，⑤的配置信息如下\n参考 1.4.1节 将非中国大陆地址的 IPSet 配置为 glb，此处填入 IPSet 为glb，协议选择 icmp ，分配策略为 vpn0_only，在 vpn0 接口在线时，**==非中国大陆目的地址==**的 icmp 协议优先走 vpn0 接口\n⑥将非大陆ipv4地址的22，53，80，443，8080，3389UDP端口访问请求优先转发到vpn0接口，配置如下\n考虑到境外vps一般采用流量包方式售卖，故仅将此类常见端口的流量发往隧道，以节约vps流量\n⑦同理，将此类端口的TCP流量优先转发到vpn0接口\n注意：经博主测试，如直接将协议选择为 all，则\u0026lt;strong\u0026gt;目标端口\u0026lt;/strong\u0026gt;​的配置将不起作用，即所有非大陆地址的流量均会被优先转发到 vpn0 接口​，因此博主将vpn0策略分成了icmp，tcp，udp三项进行实现\n⑧为电信地址的路由策略，优先走电信出口，具体配置信息如下\nIPset为ct，分配的策略为wan2_only\n⑨与⑧相似，为移动地址的路由策略，优先走移动出口，不再赘述\n⑩为默认路由，优先走电信出口，配置如下\n策略路由的配置阶段到此结束\n2.进阶 2.1SoftEther服务端的搭建与简单配置 参考以下文章\nSoftEther VPN Server安装配置教程 – Linux – Clemon`s Blog (cyanlemon.net)\n2.2SoftEther客户端的配置与使用 博主使用的OpenWRT系统中，已经自带全套SE-VPN服务，包含客户端与服务端，客户端配置如下\n2.2.1设置开机启动 在 系统-启动项 中，使用 Ctrl+F 搜索softethervpnclient 和 softethervpn，确保两个组件为启用状态（Enable），如下图\n下面进入OpenWRT的ssh命令行开始客户端配置\n下面是SE-VPN-Client的帮助菜单，供读者参考\nVPN Client\u0026gt;? 您可以使用下面的 66 命令: About - 显示版本信息 AccountAnonymousSet - 设定连接设置的用户认证种类为匿名认证 AccountCertGet - 获取用于连接设置的客户端证书 AccountCertSet - 设置连接设置的用户认证类型为用户证书认证 AccountCompressDisable - 禁用连接设置进行通信时的数据压缩 AccountCompressEnable - 启用连接设置进行通信时的数据压缩 AccountConnect - 使用连接设置，开始连接 VPN Server AccountCreate - 创建新的连接设置 AccountDelete - 删除连接设置 AccountDetailSet - 设置接续设置的高级通信设置 AccountDisconnect - 断开连接中的连接设置 AccountEncryptDisable - 禁用连接设置进行通信时的加密 AccountEncryptEnable - 启用连接设置进行通信的加密 AccountExport - 导出连接设置 AccountGet - 取得连接设置的设置 AccountImport - 导入连接设置 AccountList - 获取连接设置列表 AccountNicSet - 设置连接设置时使用的虚拟 LAN 卡 AccountPasswordSet - 设定连接设置的用户证类型为密码认证 AccountProxyHttp - 将连接设置的连接方法设置为通过 HTTP 代理服务器连接 AccountProxyNone - 将连接设置的连接方法直接设置为 TCP/IP 连接 AccountProxySocks - 将连接设置的连接方法设置为通过 SOCKS 代理服务器连接 AccountRename - 更改连接设置名称 AccountRetrySet - 设置连接设置的连接失败或断开时建立重新连接的次数和间隔 AccountSecureCertSet - 将连接设置的用户认证类型设置为智能卡认证 AccountServerCertDelete - 删除连接设置的服务器固有证书 AccountServerCertDisable - 禁用连接设置服务器证书验证选项 AccountServerCertEnable - 启用连接设置服务器证书验证选项 AccountServerCertGet - 获取连接设置的服务器固有证明书 AccountServerCertSet - 设置连接设置的服务器固有证明书 AccountSet - 设定连接设置连接终端 AccountStartupRemove - 解除连接设置的启动连接 AccountStartupSet - 设定连接设置的启动连接 AccountStatusGet - 获取当前连接设置的状态 AccountStatusHide - 设置成在连接到 VPN Server 时不显示连接状态和错误的画面 AccountStatusShow - 设置成在连接到 VPN Server 时显示连接状态和错误的画面 AccountUsernameSet - 设置用于连接的连接设置的用户名 CertAdd - 添加信任的证明机构的证书 CertDelete - 删除信任的证明机构的证书 CertGet - 获得新任的证明机构的证书 CertList - 获取信任的证明机构的证书列表 Check - 检测 SoftEther VPN 是否能正常运行 KeepDisable - 禁用保持互联网连接功能 KeepEnable - 启动 Internet 保持连接功能 KeepGet - 获取保持互联网连接的功能 KeepSet - 设置 Internet 保持连接功能 MakeCert - 创建新的 X.509 证书和密钥 (1024 位) MakeCert2048 - 创建新的 X.509 证书和密钥 (2048 位) NicCreate - 新的虚拟 LAN 卡的创建 NicDelete - 删除虚拟 LAN 卡 NicDisable - 禁用虚拟 LAN 卡 NicEnable - 启用虚拟 LAN 卡 NicGetSetting - 获取虚拟 LAN 卡的设置 NicList - 获取虚拟 LAN 卡列表 NicSetSetting - 更改虚拟 LAN 卡设置 NicUpgrade - 升级虚拟 LAN 卡设备驱动 PasswordGet - 获取为连接到 VPN 客户服务的密码的设定 PasswordSet - 为连接到 VPN 客户服务的密码的设定 RemoteDisable - 禁止 VPN 客户服务的远程管理 RemoteEnable - 允许 VPN 客户服务的远程管理 SecureGet - 获取使用的智能卡种类的 ID SecureList - 获取可用的智能卡种类列表 SecureSelect - 选择要使用的智能卡种类 TrafficClient - 在用户模式下，运行网络流量速度测试工具 TrafficServer - 在服务器模式下，运行网络流量速度测试工具 VersionGet - 获取 VPN 客户服务的版本信息 参考每个命令的使用，输入 \u0026#34;命令名称 ?\u0026#34; 来查看帮助。 命令成功完成。 开始配置SE-VPN-Client\nroot@OpenWrt:~# vpncmd vpncmd command - SoftEther VPN Command Line Management Utility Developer Edition SoftEther VPN Command Line Management Utility (vpncmd command) Developer Edition Version 5.01 Build 9674 (English) Compiled 2023/03/24 14:28:07 by esir at compile Copyright (c) all contributors on SoftEther VPN project in GitHub. Copyright (c) Daiyuu Nobori, SoftEther Project at University of Tsukuba, and SoftEther Corporation. All rights reserved. By using vpncmd program, the following can be achieved. 1. Management of VPN Server or VPN Bridge 2. Management of VPN Client 3. Use of VPN Tools (certificate creation and Network Traffic Speed Test Tool) Select 1, 2 or 3: 2（选择2，进入SE-VPN-Client配置） Specify the host name or IP address of the computer that the destination VPN Client is operating on. If nothing is input and Enter is pressed, connection will be made to localhost (this computer). Hostname of IP Address of Destination: （此处直接回车，连接到localhost） Connected to VPN Client \u0026#34;localhost\u0026#34;. VPN Client\u0026gt;AccountCreate AccountCreate command - Create New VPN Connection Setting Name of VPN Connection Setting: vpn-test（连接名，随便填） Destination VPN Server Host Name and Port Number: 1.2.4.8:5555（服务器IP：端口号） Destination Virtual Hub Name: VPN（Virtual Hub Name，与服务端一致，默认为VPN） Connecting User Name: test（用户名，与服务端一致） Used Virtual Network Adapter Name: vpnse0（随便填） The command completed successfully. VPN Client\u0026gt;AccountPasswordSet（设置连接的密码，与服务端配置一致） AccountPasswordSet command - Set User Authentication Type of VPN Connection Setting to Password Authentication Name of VPN Connection Setting: vpn-test（连接名，见上文设置） Please enter the password. To cancel press the Ctrl+D key. Password: ***********（密码，与服务端一致） Confirm input: ***********（确认密码，与密码一致） Specify standard or radius: standard（一般使用standard即可，与服务端配置一致） The command completed successfully. VPN Client\u0026gt;AccountConnect vpn-test（连接名，与上文一致） AccountConnect command — Start Connection to VPN Server using VPN Connection Setting The command completed successfully. 至此，VPN连接成功\n小提示：可以使用 AccountStartupSet 配置自动连接功能，每次软路由重启后均能自动连接\n2.3OpenWRT虚拟接口配置 博主使用的OpenWRT已经配置好了vpn0接口，仅需简单配置即可使用，其中，网卡协议选择DHCP，在物理设置中，将接口选择为sevpn-client创建的适配器，如下图\n点击保存，连接后，即可获取IP地址，连接成功，如下图\n接下来按照本文1.1-1.4节的配置即可\n对于想要手动创建vpn0接口的读者，下面贴一张防火墙配置图，供参考\n最后，在 服务-MWAN3分流助手 中，启动GFWList即可\n3.最终效果 3.1默认路由/电信地址： 3.2移动地址： 3.3非中国大陆地址/GFW列表： 3.4境外测速： 4.存在的问题 负载均衡与IPV6冲突 将 /lib/mwan3/mwan3.sh 当中的\nIPT6=\u0026quot;/usr/sbin/ip6tables -t mangle -w\u0026quot;\n注释掉\n","permalink":"https://blog.octlog.com/p/multi-carrier-policy-routing/","summary":"\u003cp\u003e在校期间，博主发现多运营商策略路由的上网方式，在体验上明显好于单运营商，单出口的网络。经过长时间观察，博主发现，对于电信/联通/移动的目标地址会通过对应的互联网出口访问，对于非三大运营商的目标地址，则根据具体的规则及负载情况，选择某一个互联网出口。\u003c/p\u003e","title":"基于OpenWRT的多运营商策略路由探讨"},{"content":"本文写于博主折腾Google Drive无限量空间期间，然而，GoogleDrive从2022年7月起取消无限空间，，原无限容量订阅也被限制，无法再上传文件，故AutoRclone已经失去折腾的意义，本文仅作为归档保存于此\n1.将代码复制到您的 VPS 或本地计算机 在完成所有操作之前，先安装 python3。因为我们使用python作为我们的编程语言\n​对于 Linux 系统​：安装screen和最新的Rclone。 如果在 Debian/Ubuntu 中，直接使用此命令\nsudo apt-get install screen git \u0026amp;\u0026amp; curl https://rclone.org/install.sh | sudo bash 成功安装上述所有依赖项后，执行此命令\nsudo git clone https://github.com/xyou365/AutoRclone \u0026amp;\u0026amp; cd AutoRclone \u0026amp;\u0026amp; sudo pip3 install -r requirements.txt ​对于Windows系统​：直接下载此项目，然后安装最新的Rclone。 然后在我们的项目文件夹中运行此命令（在cmd命令窗口或PowerShell窗口中键入）\n2.生成服务帐户 2.1创建GoogleAPI，获取credentials.json文件 启用 API 在使用 Google API 之前，您需要先在 Google Cloud 项目中启用这些 API。您可以在单个 Google Cloud 项目中启用一个或多个 API。\n在 Google Cloud 控制台中，启用 Google Drive API。\n配置 OAuth 权限请求页面 如果您使用新的 Google Cloud 项目完成本快速入门，请配置 OAuth 权限请求页面，并将您自己添加为测试用户。如果您为 Cloud 项目完成了此步骤，请跳到下一部分。\n(1).在 Google Cloud 控制台中，依次转到“菜单”图标 menu \u0026gt; API 和服务 \u0026gt; ​OAuth 同意屏幕​。\n(2).选择应用的用户类型，然后点击 Create\n(3).填写应用注册表单，然后点击​保存并继续​。\n(4).如果您选择外部作为用户类型，请添加测试用户：\na.在测试用户下，点击添加用户\nb.输入您的电子邮件地址和任何其他已获授权的测试用户，然后点击保存并继续\n(5).查看您的应用注册摘要。若要进行更改，请点击​修改​。如果应用注册看起来没有问题，请点击 ​Back to Dashboard​（返回信息中心）。\n为桌面应用授权凭据 如需作为最终用户进行身份验证并访问应用中的用户数据，您需要创建一个或多个 OAuth 2.0 客户端 ID。客户端 ID 用于向 Google 的 OAuth 服务器识别单个应用。如果您的应用在多个平台上运行，您必须为每个平台创建单独的客户端 ID。\n(1).在 Google Cloud 控制台中，依次转到“菜单”图标 menu \u0026gt; API 和服务 \u0026gt; ​凭据​。\n(2).依次点击创建凭据 \u0026gt; ​OAuth 客户端 ID​。\n(3).依次点击应用类型 \u0026gt; ​桌面应用​。\n(4).在名称字段中，输入凭据名称。此名称仅在 Google Cloud Console 中显示。\n(5).点击​创建​。系统随即会显示 OAuth 客户端创建的屏幕，其中会显示新的客户端 ID 和客户端密钥。\n(6).点击 ​OK​。新创建的凭据会显示在 OAuth 2.0 客户端 ID 下方。\n(7).将下载的 JSON 文件另存为 credentials.json，并将其移至工作目录。\n安装 Google 客户端库 安装 Python 版 Google 客户端库： pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib 2.2生成服务账户 快速方法（不推荐，有时会出现 bug）：\n如果您的帐户中没有任何项目，那么\n创建 1 个项目 启用所需的服务 创建 100（1 个项目，每个项目有 100 个）服务帐户 并将其凭据下载到名为accounts Note: 1 service account can copy around 750gb a day, 1 project makes 100 service accounts so thats 75tb a day, for most users this should easily suffice. 该命令看起来像将“1”替换为所需的项目数python gen_sa_accounts.py --quick-setup 1\n如果您已经有 N 个项目，并且只想在新创建的项目中创建服务帐户，\n自\n创建额外的 1 个项目（项目 N+1 到项目 N+2） 启用所需的服务 创建 100（1 个项目，包含 100 个）服务帐户 并将其凭据下载到名为accounts 运行\npython gen_sa_accounts.py --quick-setup 1 --new-only 手动方法（推荐）： 回到 SSH ，执行 python gen_sa_accounts.py --list-projects； 如果之前没有创建过项目的话返回值应该是空的，那么此时执行 python gen_sa_accounts.py --create-projects 1 来新建一个项目，之后再次 python gen_sa_accounts.py --list-projects，复制一下新建的项目名称，下一步要用到； 如果已存在项目，且要使用已有项目来生成 SA（请确保你知道自己在做什么），那么复制一下想要生成 SA 的项目名称，否则参考上一条的步骤来新建一个项目； 执行 python gen_sa_accounts.py --enable-services ProjectName 为项目开启所需要的服务，ProjectName 为上一步复制的项目名称，开启方法参考上文【快速方法】中的描述； 执行 python gen_sa_accounts.py --create-sas ProjectName 为项目生成 SA； 执行 python gen_sa_accounts.py --download-keys ProjectName 下载项目中 SA 的授权文件，稍等片刻 ~/AutoRclone/accounts/ 目录下应该出现了一大堆 .json 后缀的 SA 授权文件。 3.将服务帐号添加到 Google Group（可选，但建议长期轻松使用） 考虑到团队云端硬盘成员的官方限制（直接添加为成员的个人和群组的上限：600），我们使用 Google 网上论坛来管理我们的服务帐号。\n对于GSuite Admin 按照官方步骤打开目录 API（将生成的 json 文件保存到文件夹）。credentials 在管理控制台中为您的单位创建群组。例如，创建组后，您将拥有一个地址。sa@yourdomain.com 运行python add_to_google_group.py -g sa@yourdomain.com 有关上述标志的含义，请运行 python add_to_google_group.py -h\n对于普通用户 创建 Google Group，然后手动将服务帐号添加为成员。 限制是一次 10 个，每天 100 个，但如果您阅读上面的警告和注释，您将拥有 1 个项目，因此很容易在您的范围内。\n在此处：https://console.developers.google.com/apis/dashboard ，点击左侧的 凭据 可以看到创建好的项目及 SA ，自行想办法将 SA 的邮箱地址保存下来（快速提取 SA 的邮箱地址可以参考这篇文章：一行命令提取 SA 文件中 email 自动10行分组 – FXXKR LAB ）。\n4.将服务帐号或 Google Group添加到团队云端硬盘 *如果您不使用团队云端硬盘，只需跳过即可。*​​警告：​​不建议使用服务帐户将不在团队驱动器中的“到”文件夹，SA 最适合团队驱动器。\n如果您已创建 Google 网上论坛（​第 2 步​）来管理您的服务帐号，请将群组地址或添加到您的源团队云端硬盘 （tdsrc） 和目标团队云端硬盘 （tddst）。sa@yourdomain.com​sa@googlegroups.com\n否则，请将服务帐号直接添加到团队云端硬盘中。\n在 Python 快速入门中启用驱动器 API，如果尚未在步骤 2 中执行此操作，请将其保存到项目根路径中。credentials.json\n将服务帐号添加到源团队云端硬盘中：python add_to_team_drive.py -d SharedTeamDriveSrcID 将服务帐号添加到目标团队云端硬盘中：python add_to_team_drive.py -d SharedTeamDriveDstID 5.开始您的任务 让我们使用服务帐户复制数百 TB 的资源。​注意​：讽刺，过度滥用这个（无论你使用什么克隆脚本）可能会让你被谷歌注意到，我们建议你不要贪吃，克隆重要的东西，而不是下载整个维基百科。\n对于服务器端副本 公开共享到团队云端硬盘的文件夹 团队驱动器到团队驱动器 公开共享文件夹到公开共享文件夹（具有写入权限） 团队云端硬盘到公开共享文件夹 python rclone_sa_magic.py -s SourceID -d DestinationID -dp DestinationPathName -b 1 -e 600 有关上述标志的含义，请运行 python3 rclone_sa_magic.py -h 如果 rclone 无法读取公共共享文件夹的所有内容，则添加 --disable_list_r。 请确保 Rclone 可以读取您的源目录和目标目录。使用 rclone 大小进行检查： rclone --config rclone.conf size --disable ListR src001: rclone --config rclone.conf size --disable ListR dst001: 对于本地到谷歌云端硬盘（需要一些测试） 团队云端硬盘本地 本地到专用文件夹 私人文件夹到任何（认为服务帐户不能对私人文件夹执行任何操作） python3 rclone_sa_magic.py -sp YourLocalPath -d DestinationID -dp DestinationPathName -b 1 -e 600 rclone日志保存在log_rclone.txt ","permalink":"https://blog.octlog.com/p/auto-rclone-config/","summary":"\u003cp\u003e本文写于博主折腾Google Drive无限量空间期间，然而，GoogleDrive从2022年7月起取消无限空间，，原无限容量订阅也被限制，无法再上传文件，故AutoRclone已经失去折腾的意义，本文仅作为归档保存于此\u003c/p\u003e\n\u003ch2 id=\"1将代码复制到您的-vps-或本地计算机\"\u003e1.将代码复制到您的 VPS 或本地计算机\u003c/h2\u003e\n\u003cp\u003e\u003cem\u003e在完成所有操作之前，先安装 python3。因为我们使用python作为我们的编程语言\u003c/em\u003e\u003c/p\u003e","title":"AutoRclone配置"},{"content":"博主最近饱受网课平台的困扰，大量的网课平台存在失焦/离开页面就自动暂停课程播放的限制，与此同时，某些网课平台不允许使用倍速播放功能，连最常见的2倍速都不提供。对于用户量较大的网课平台，确实有很多脚本可以解除此类限制，但对于一些专用平台，却没有脚本实现此类功能。\n失焦播放 HTML5播放器\n本文参考并使用了 解除 网课失去焦点/离开页面 就自动暂停 的限制_网课失去焦点停止播放解放方案-CSDN博客 的方案解决失焦自动播放问题\n如果视频是video元素，可以写个定时器，每秒钟设置一下播放状态\nF12打开开发者工具，切换到console面板，输入下面代码并回车\nsetInterval(function () { var current_video = document.getElementsByTagName(\u0026#39;video\u0026#39;)[0] current_video.play() }, 1000) Flash播放器\n如果是flash视频，可以重写失去焦点函数。\nf12打开开发者工具，切换到console面板，输入下面代码并回车\nif (!-[1,] \u0026amp;\u0026amp; !window.XMLHttpRequest || navigator.userAgent.indexOf(\u0026#34;MSIE 8.0\u0026#34;) \u0026gt; 0) { document.onfocusout = function () { return true; } } else { window.onblur = function () { return true; } } 倍速播放 使用浏览器的开发者工具，通过控制台来调整视频播放速度。步骤如下：\n打开开发者工具。 在控制台中输入以下代码以设置视频播放速度（以 2 倍速为例）： document.querySelector(\u0026#39;video\u0026#39;).playbackRate = 2.0; 你可以根据需要调整 2.0 为其他倍速\n","permalink":"https://blog.octlog.com/p/multi-speed-video-playback/","summary":"\u003cp\u003e博主最近饱受网课平台的困扰，大量的网课平台存在失焦/离开页面就自动暂停课程播放的限制，与此同时，某些网课平台不允许使用倍速播放功能，连最常见的2倍速都不提供。对于用户量较大的网课平台，确实有很多脚本可以解除此类限制，但对于一些专用平台，却没有脚本实现此类功能。\u003c/p\u003e","title":"网课平台的失焦播放与倍速播放"},{"content":"在博主使用Windows 10及以上系统对小米手机进行bl解锁时，发现即使在插入手机的情况下，小米解锁工具始终显示“未连接手机”的情况，对此，博主整理了如下解决措施\n打开管理员CMD（或者管理员PowerShell，可以右击开始按钮打开），然后输入以下命令即可：\nreg add \u0026#34;HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\usbflags\\18D1D00D0100\u0026#34; /v \u0026#34;osvc\u0026#34; /t REG_BINARY /d \u0026#34;0000\u0026#34; /f reg add \u0026#34;HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\usbflags\\18D1D00D0100\u0026#34; /v \u0026#34;SkipContainerIdQuery\u0026#34; /t REG_BINARY /d \u0026#34;01000000\u0026#34; /f reg add \u0026#34;HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\usbflags\\18D1D00D0100\u0026#34; /v \u0026#34;SkipBOSDescriptorQuery\u0026#34; /t REG_BINARY /d \u0026#34;01000000\u0026#34; /f ","permalink":"https://blog.octlog.com/p/mi-win10-unlock/","summary":"\u003cp\u003e在博主使用Windows 10及以上系统对小米手机进行bl解锁时，发现即使在插入手机的情况下，小米解锁工具始终显示“未连接手机”的情况，对此，博主整理了如下解决措施\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e打开管理员CMD（或者管理员PowerShell，可以右击开始按钮打开），然后输入以下命令即可：\u003c/strong\u003e\u003c/p\u003e","title":"小米解锁在Windows 10以上系统出现“未连接手机”的问题"},{"content":"在使用Windows server系统时，博主经常遇到安装OneDrive后右击没有文件随选功能的问题，本文根据微软官方文档以及网友教程整理\n0.开始之前 文件按需需要版本Windows 10 1709 或更高版本或 Windows Server 2019，并且 OneDrive 内部版本 17.3.7064.1005 或更高版本。\n文件随选可能与某些第三方防病毒解决方案不兼容。\n尚不支持在启用 WIP 的情况下使用文件随选。\n文件按需处理来自 OneDrive 、 Microsoft 365 中的 SharePoint 和 SharePoint Server 2019 团队网站的所有个人文件和工作文件。\n1.win+R打开运行 2.输入gpedit.msc打开组策略编辑器 3.依次打开计算机配置-Windows设置-安全设置-本地策略-安全选项 将： 用户帐户控制: 以管理员批准模式运行所有管理员\n用户帐户控制: 用于内置管理员帐户的管理员批准模式\n都设置为已启用，重启计算机即可。\n","permalink":"https://blog.octlog.com/p/onedrive-files-on-demand/","summary":"\u003cp\u003e在使用Windows server系统时，博主经常遇到安装OneDrive后右击没有文件随选功能的问题，本文根据微软官方文档以及网友教程整理\u003c/p\u003e\n\u003ch2 id=\"0开始之前\"\u003e0.开始之前\u003c/h2\u003e\n\u003cp\u003e文件按需需要版本Windows 10 1709 或更高版本或 Windows Server 2019，并且 OneDrive 内部版本 17.3.7064.1005 或更高版本。\u003c/p\u003e\n\u003cp\u003e文件随选可能与某些第三方防病毒解决方案不兼容。\u003c/p\u003e","title":"OneDrive文件随选"},{"content":"qBittorrent是一个跨平台的开源、免费的BitTorrent客户端，本文介绍的是在Ubuntu系统中qBittorrent的安装过程\n安装add-apt-repository命令 sudo apt-get update \u0026amp;\u0026amp; sudo apt-get install software-properties-common -y 添加qbittorrent-nox的PPA软件源 # qBittorrent 稳定版 sudo add-apt-repository ppa:qbittorrent-team/qbittorrent-stable # qBittorrent 测试版 sudo add-apt-repository ppa:qbittorrent-team/qbittorrent-unstable 安装qbittorrent-nox sudo apt-get update \u0026amp;\u0026amp; sudo apt-get install qbittorrent-nox -y 设置开机启动 sudo apt-get install vim -y \u0026amp;\u0026amp; vim /etc/systemd/system/qbittorrent-nox.service [Unit] Description=qBittorrent-nox After=network.target [Service] User=root Type=forking RemainAfterExit=yes ExecStart=/usr/bin/qbittorrent-nox -d [Install] WantedBy=multi-user.target 相关命令 修改qbittorrent-nox.service文件后重新载入\nsudo systemctl daemon-reload 启动\nsudo systemctl start qbittorrent-nox 停止\nsudo systemctl stop qbittorrent-nox 设置开机启动\nsudo systemctl enable qbittorrent-nox 查看状态\nsudo systemctl status qbittorrent-nox 默认账号：admin 密码：adminadmin 默认登陆网址：ip:8080 根据qBittorrent官网的更新日志https://www.qbittorrent.org/news ，4.6.1.0包含一个重大更新。可以看到自4.6.1.0开始，qBittorrent将弃用adminadmin默认密码，采用随机密码，将在终端控制台输出显示。\n停止\nsudo systemctl stop qbittorrent-nox 修改密码\nvim ~/.config/qBittorrent/qBittorrent.conf 添加[Preferences]节，添加WebUIPort=**行，添加在其上方或下方。\nWebUI\\Password_PBKDF2=\u0026#34;@ByteArray(ARQ77eY1NUZaQsuDHbIMCA==:0WMRkYTUWVT9wVvdDtHAjU9b3b7uB8NR1Gur2hmQCvCDpm39Q+PsJRJPaCU51dEiz+dTzh8qbPsL8WkFljQYFQ==)\u0026#34; 启动\nsudo systemctl start qbittorrent-nox 账号：admin 密码：adminadmin\n本文参考Ubuntu安装qbittorrent-nox - 简书 (jianshu.com)，感谢原发布者\n","permalink":"https://blog.octlog.com/p/ubuntu-install-qbittorrent/","summary":"\u003cp\u003e\u003cstrong\u003eqBittorrent\u003c/strong\u003e是一个跨平台的开源、免费的BitTorrent客户端，本文介绍的是在Ubuntu系统中qBittorrent的安装过程\u003c/p\u003e\n\u003ch2 id=\"安装add-apt-repository命令\"\u003e安装add-apt-repository命令\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt-get update \u0026amp;\u0026amp; sudo apt-get install software-properties-common -y\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"添加qbittorrent-nox的ppa软件源\"\u003e添加qbittorrent-nox的PPA软件源\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e# qBittorrent 稳定版\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo add-apt-repository ppa:qbittorrent-team/qbittorrent-stable\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e# qBittorrent 测试版\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo add-apt-repository ppa:qbittorrent-team/qbittorrent-unstable\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"安装qbittorrent-nox\"\u003e安装qbittorrent-nox\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt-get update \u0026amp;\u0026amp; sudo apt-get install qbittorrent-nox -y\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"设置开机启动\"\u003e设置开机启动\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt-get install vim -y \u0026amp;\u0026amp; vim /etc/systemd/system/qbittorrent-nox.service\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e[Unit]\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eDescription=qBittorrent-nox\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eAfter=network.target\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e[Service]\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eUser=root\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eType=forking\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eRemainAfterExit=yes\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eExecStart=/usr/bin/qbittorrent-nox -d\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e[Install]\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eWantedBy=multi-user.target\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"相关命令\"\u003e相关命令\u003c/h2\u003e\n\u003cp\u003e修改qbittorrent-nox.service文件后重新载入\u003c/p\u003e","title":"Ubuntu安装qbittorrent-nox"},{"content":"博主在使用AWS 服务器的时候，发现其Linux系统无法正常显示中文，故查阅资料，整理如下\n可通过执行以下命令解决\nlocale-gen zh_CN.UTF-8 运行 locale-gen zh_CN.UTF-8 命令会在系统中生成和启用 zh_CN.UTF-8 区域设置。这意味着系统将支持使用中文（中国）的格式和UTF-8编码。这对于在系统中运行中文软件，显示中文字符，或者按照中文习惯处理日期、时间和货币等数据是必要的。\nvim /etc/default/locale 执行该命令会打开 /etc/default/locale 文件，允许用户编辑其中的内容。通常情况下，这个文件包含一些变量，这些变量定义了系统的默认语言和区域设置。\n插入以下内容\nLANG=zh_CN.UTF-8 LC_CTYPE=\u0026#34;zh_CN.UTF-8\u0026#34; LC_NUMERIC=\u0026#34;zh_CN.UTF-8\u0026#34; LC_TIME=\u0026#34;zh_CN.UTF-8\u0026#34; LC_COLLATE=\u0026#34;zh_CN.UTF-8\u0026#34; LC_MONETARY=\u0026#34;zh_CN.UTF-8\u0026#34; LC_MESSAGES=\u0026#34;zh_CN.UTF-8\u0026#34; LC_PAPER=\u0026#34;zh_CN.UTF-8\u0026#34; LC_NAME=\u0026#34;zh_CN.UTF-8\u0026#34; LC_ADDRESS=\u0026#34;zh_CN.UTF-8\u0026#34; LC_TELEPHONE=\u0026#34;zh_CN.UTF-8\u0026#34; LC_MEASUREMENT=\u0026#34;zh_CN.UTF-8\u0026#34; LC_IDENTIFICATION=\u0026#34;zh_CN.UTF-8\u0026#34; LC_ALL=zh_CN.UTF-8 这些设置定义了系统的区域设置环境变量，确保系统及其应用程序使用中文（中国）语言环境和 UTF-8 编码格式\nupdate-locale LANG=zh_CN.UTF-8 该命令会将系统默认语言环境设置为中文（中国）并使用 UTF-8 编码。这意味着系统界面、消息和应用程序将默认使用中文显示，并且采用 UTF-8 编码格式。\n","permalink":"https://blog.octlog.com/p/linux-chinese-encoding-support/","summary":"\u003cp\u003e博主在使用AWS 服务器的时候，发现其Linux系统无法正常显示中文，故查阅资料，整理如下\u003c/p\u003e\n\u003cp\u003e可通过执行以下命令解决\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003elocale-gen zh_CN.UTF-8\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e运行 \u003ccode\u003elocale-gen zh_CN.UTF-8\u003c/code\u003e 命令会在系统中生成和启用 \u003ccode\u003ezh_CN.UTF-8\u003c/code\u003e 区域设置。这意味着系统将支持使用中文（中国）的格式和UTF-8编码。这对于在系统中运行中文软件，显示中文字符，或者按照中文习惯处理日期、时间和货币等数据是必要的。\u003c/p\u003e","title":"Linux添加中文编码支持"},{"content":"Ubuntu等系统默认不支持使用root用户进行登录，需要做如下修改\nvim /etc/ssh/sshd_config # 修改以下内容 PermitRootLogin yes PasswordAuthentication yes systemctl restart ssh ","permalink":"https://blog.octlog.com/p/linux-root-login/","summary":"\u003cp\u003eUbuntu等系统默认不支持使用root用户进行登录，需要做如下修改\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003evim /etc/ssh/sshd_config\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e# 修改以下内容\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePermitRootLogin  yes\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ePasswordAuthentication yes\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esystemctl restart ssh\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e","title":"Linux允许root用户登录"},{"content":"在一个http代理成为主流的时代，博主却十分迫切需要一款二层的隧道来满足博主多线接入、策略路由、负载均衡等更专业的需求，SoftEther作为一款网卡级的VPN软件，正好满足了这些需求\nSoftEther VPN是一个由日本程序员登大游（日语：登 大遊）因就读筑波大学时的硕士论文研究主题而开发的开源、跨平台、多重协议之虚拟专用网方案，此方案让一些虚拟专用网协议像是SSL VPN、L2TP、IPsec、OpenVPN以及微软SSTP都由同一个VPN服务器提供。在2014年1月4日以GNU通用公共授权条款的方式转变为开源软件。2019年1月21日转变为Apache License 2.0授权。\n下载 SoftEther VPN Server 首先，打开http://www.softether-download.com/cn.aspx，按照你的机器配置，选择合适的SoftEther VPN Server，右键选择复制下载地址。\n通过SSH连接到服务器，使用wget下载SoftEther VPN Server安装包。\n下载完成后，使用tar命令进行解压\n安装 SoftEther VPN Server 在安装SoftEther VPN Server之前，你可能需要安装一些必要的工具（以Ubuntu为例）：\napt install make apt install gcc-multilib apt install build-essential 接下来，就可以开始安装SoftEther VPN Server：\ncd vpnserver make 安装过程中会有三次让你输入数字选择选项，输入3次1就行（输入2会直接退出的）。\n稍等片刻，就安装完成了。\n配置Systemd管理SoftEther VPN Server 新建SoftEther VPN Server管理文件：\nsudo vim /etc/systemd/system/vpnserver.service 按i进入插入模式，复制粘贴以下内容：\n[Unit] Description=SoftEther VPN Server After=network.target [Service] Type=forking ExecStart=/root/vpnserver/vpnserver start ExecStop=/root/vpnserver/vpnserver stop Restart=on-abort [Install] WantedBy=multi-user.target 按Esc，输入:wq保存并退出。\n启动SoftEther VPN Server：\nsudo systemctl start vpnserver 设置开机启动SoftEther VPN Server：\nsudo systemctl enable vpnserver 至此，SoftEther VPN Server的安装已经全部完成！\n配置 SoftEther VPN Server SoftEther VPN Server一大特点在于方便的远程管理功能。以Windows为例，首先到http://www.softether-download.com/cn.aspx 上选择SoftEther VPN Server Manager for Windows，然后下载安装，安装的时候选择仅限管理工具的一项即可。\n安装完成后打开SE-VPN Server Manager (Tools)，点击新连接，输入你的服务器ip后点击确定\n回到主界面，选择你刚刚创建的连接，点击连接。\n首次连接会提示创建管理密码，设置密码即可。\n首次成功连接服务器后，会弹出简单安装窗口，选择VPN的其他高级设置，点击关闭即可。\n接着会有一个弹出框，点击“是”就会来到IPsec/L2TP/EtherIP/L2TPv3设置界面。\n勾选启用L2TP服务功能（L2TP over IPsec），并输入你的IPsec预共享密钥：\n然后点击确定，就来到了管理器界面：\n点击管理虚拟HUB，再点击管理用户，在管理用户界面里点新建，输入用户名和密码，点击确定。\n关闭用户管理回到管理虚拟HUB的界面，点击右下边的 虚拟NAT和虚拟DHCP功能（SecureNAT）按钮，点击启用SecureNAT，在进入SecureNAT设置。\n这里管理VPN局域网的IP和DHCP设置。无需做太大改动，直接启用就行。\n","permalink":"https://blog.octlog.com/p/softether-install/","summary":"\u003cp\u003e在一个http代理成为主流的时代，博主却十分迫切需要一款二层的隧道来满足博主多线接入、策略路由、负载均衡等更专业的需求，SoftEther作为一款网卡级的VPN软件，正好满足了这些需求\u003c/p\u003e\n\u003cp\u003eSoftEther VPN是一个由日本程序员登大游（日语：登 大遊）因就读筑波大学时的硕士论文研究主题而开发的开源、跨平台、多重协议之虚拟专用网方案，此方案让一些虚拟专用网协议像是SSL VPN、L2TP、IPsec、OpenVPN以及微软SSTP都由同一个VPN服务器提供。在2014年1月4日以GNU通用公共授权条款的方式转变为开源软件。2019年1月21日转变为Apache License 2.0授权。\u003c/p\u003e","title":"SoftEther VPN Server安装配置教程 – Linux"},{"content":"本教程初版写于2021年8月，因更换博客源码，现精简归档整理\n安装过程需保证U8软件和SQL server数据库同为32位或同为64位\n0.完全卸载SQL Server 2008 x86 感谢@life.index（ls） 提供数据库删除与安装教程的整理与测试\n说明：考虑到大多数用户使用的是64位的Windows10系统，且经多次测试后发现，在64位系统上无法安装32位的SQLServer2005_BC，若安装64位的SQLServer2005_BC，则会导致用友ERP的数据库一项检测不通过，导致ERP程序无法安装。因此必须使用64位SQL Server 2008 R2+64位SQLServer2005_BC才能使ERP安装程序环境检测获得通过\n卸载操作过程如下\n0.1删除主程序 首先卸载Microsoft SQL Server 2008主程序\n注意：先删主程序\n0.2删除附加程序 在删除主程序后再删除与SQL Server相关的程序\n0.3删除卸载残留目录 手动删除SQL Server 卸载残留（即安装目录下Microsoft SQL Server整个目录）\n0.4删除注册表残留 打开注册表编辑器，删除注册表残留\n按顺序查找，若没有找到，请忽略，继续查找并删除下一条\n0.5删除用户配置文件 删除user.config文件————C:\\Users\\自己电脑的名字\\AppData\\Local\\Microsoft_Corporation\\LandingPage.exe_StrongName_ryspccglaxmt4nhllj5z3thycltsvyyx\\10.0.0.0\\user.config\n1.用友ERP及相关组件全新安装 1.1 SQL Server 2008 R2 x64软件安装 1.1.1安装前确认 确保ISO镜像文件的打开方式为 Windows资源管理器\n请保证打开方式为Windows资源管理器。对于ISO镜像文件，不推荐使用WinRAR一类软件进行解压缩，解压缩可能会破坏原本ISO文件结构，导致安装过程无法正常进行\n1.1.2开始安装 打开setup进入安装进程\n此处对于所有未选择的账户名，应全部选择 带SYSTEM的一项\n注意，此处选择混合模式，并设置强密码\n开始进入漫长的安装过程\u0026hellip;\n\u0026hellip;\n\u0026hellip;\n\u0026hellip;\n至此，SQL Server安装已经完成\n1.1.3连接测试 打开SQL Server Management Stdio\n若服务器名为“local”，则需点击\u0026lt;浏览更多\u0026gt;\n展开最下面的选项卡，选择该服务器，并点击确定\n选择数据库引擎\n选择 SQL Server身份验证，输入用户名与密码，并点击连接\n其中，\n用户名：sa\n密码：安装过程中设置的密码\n若出现上图所示界面，则表示连接成功\n1.2 SQLServer2005_BC安装 一直无脑下一步就可以了，很简单哒\n1.3打开IIS（win10为例） 搜索打开控制面板\n1.4用友ERP安装 具体过程请参考安装文档\n点击以下链接下载文档：\n下载文档\n至此，用友ERP安装全部完成\n","permalink":"https://blog.octlog.com/p/u8-install/","summary":"\u003cp\u003e本教程初版写于2021年8月，因更换博客源码，现精简归档整理\u003c/p\u003e\n\u003cp\u003e安装过程需保证U8软件和SQL server数据库同为32位或同为64位\u003c/p\u003e\n\u003ch2 id=\"0完全卸载sql-server-2008-x86\"\u003e0.完全卸载SQL Server 2008 x86\u003c/h2\u003e\n\u003cp\u003e感谢\u003ccode\u003e@life.index（ls）\u003c/code\u003e 提供数据库删除与安装教程的整理与测试\u003c/p\u003e\n\u003cp\u003e说明：考虑到大多数用户使用的是64位的Windows10系统，且经多次测试后发现，在64位系统上无法安装32位的SQLServer2005_BC，若安装64位的SQLServer2005_BC，则会导致用友ERP的数据库一项检测不通过，导致ERP程序无法安装。因此必须使用64位SQL Server 2008 R2+64位SQLServer2005_BC才能使ERP安装程序环境检测获得通过\u003c/p\u003e","title":"安装用友U8踩过的坑"}]