PowerPoint修改默认字体需要修改模板,以下是Windows 11和office 365的版本,理论上对office 2016及以后都有效。

  1. 新建一个空白演示文稿。
  2. 单击工具栏上的"视图",然后单击"幻灯片母版"。
  3. 找到"字体",在下拉选项框中选择"自定义字体"。
  4. 修改中文和西文字体,保存,然后关闭母版视图。
  5. 关闭母版视图,不然新建的PPT是母版样式。
  6. 单击"文件">"另存为",将文件名改为"blank",保存类型改为"PowerPoint模板"。注意:文件名一定是"blank"和保存类型一定是"PowerPoint模板"。
  7. 再打开"资源管理器",查看→显示→勾选隐藏的项目“。(别关闭第6步的窗口)
  8. 看回第6步的"另存为"的界面,手动更改保存的路径:C:\Users\<用户名>\AppData\Roaming\Microsoft\Templates ,然后单击保存完成默认字体的设置。

随意打开一个新的演示文稿,会看到默认字体已变为微软雅黑。

在开始菜单中会多一个名为"Default Theme"的ppt模板,以后新建ppt就单击这个就可以。

参考:
https://zhuanlan.zhihu.com/p/556010400

前言

家中有一台运行在内网的服务器(没有公网 IP),上面运行着一些服务(Home Assistant等),想要从外网访问,但又不希望所有人都能访问,于是选择使用 Cloudflare Zero Trust 实现内网穿透。注:如果有独立IP的服务器,也可以直接使用easytier实现内网穿透,更方便但限制于中转服务器的网速。

本文将详细介绍如何在 Debian 13 Linux 服务器上配置 Cloudflare Zero Trust,实现:

  • 内网服务暴露到公网
  • 通过身份验证控制访问权限
  • 无需公网 IP 或路由器端口转发

什么是 Cloudflare Zero Trust?

Cloudflare Zero Trust 是 Cloudflare 提供的零信任网络访问解决方案,包括:

  • Cloudflare Tunnel:安全地将内网服务暴露到互联网
  • Access:身份验证和访问控制策略
  • Gateway:网络安全和流量过滤

对于个人用户,最常用的是 Tunnel + Access 组合,可以实现安全的远程访问。

环境要求

  • 一台 Linux 服务器(本文以 Debian 13 为例)
  • 服务器上运行的服务(本文以 8188 端口为例)
  • 一个域名(需要使用 Cloudflare DNS)
  • Cloudflare 账号(免费)

第一部分:安装和配置

1. 安装 cloudflared

在你的 Debian 服务器上安装 cloudflared 客户端:

# 下载最新版本的 cloudflared
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb

# 安装
sudo dpkg -i cloudflared-linux-amd64.deb

# 验证安装
cloudflared --version

2. 登录 Cloudflare 账户

cloudflared tunnel login

执行后会出现以下情况之一:

  • 有桌面环境:自动打开浏览器进行授权
  • 无桌面环境:显示一个 URL,需要在其他设备上打开这个 URL 完成授权

授权成功后,会在 ~/.cloudflared/ 目录下生成证书文件。

3. 创建 Tunnel

# 创建一个 tunnel(名称可以自定义)
cloudflared tunnel create my-app-tunnel

执行成功后,会返回类似以下信息:

Tunnel credentials written to /home/xxx/.cloudflared/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.json # 这里的xxx是用户名
Created tunnel my-app-tunnel with id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

重要:记录返回的 Tunnel ID,后续配置需要用到。

4. 配置 Tunnel

创建配置文件 /etc/cloudflared/config.yml

sudo mkdir -p /etc/cloudflared
sudo nano /etc/cloudflared/config.yml

添加以下内容:

tunnel: <你的Tunnel-ID>
credentials-file: /home/xxx/.cloudflared/<你的Tunnel-ID>.json

ingress:
  - hostname: your-app.yourdomain.com
    service: http://localhost:8188
  - service: http_status:404

配置说明

  • tunnel:填写步骤 3 中获得的 Tunnel ID
  • credentials-file:凭证文件路径(使用步骤 3 中显示的路径)
  • hostname:你想使用的域名(需要提前在 Cloudflare 添加域名)
  • service:本地服务地址(本文是 http://localhost:8188
  • 最后一行 service: http_status:404 是必需的,用于处理未匹配的请求

5. 配置 DNS

cloudflared tunnel route dns <你的Tunnel-ID> your-app.yourdomain.com

这个命令会自动在 Cloudflare DNS 中创建一条 CNAME 记录,指向你的 Tunnel。

你也可以手动在 Cloudflare 控制台添加:

  • 类型:CNAME
  • 名称:your-app
  • 内容:<Tunnel-ID>.cfargotunnel.com
  • 代理状态:已代理(橙色云朵)

6. 设置为系统服务

将 cloudflared 设置为开机自启动的系统服务:

# 安装服务
sudo cloudflared service install

# 启动服务
sudo systemctl start cloudflared

# 设置开机自启
sudo systemctl enable cloudflared

# 查看服务状态
sudo systemctl status cloudflared

如果一切正常,状态应该显示 active (running)

7. 测试 Tunnel 连接

此时,你应该可以通过域名访问你的服务:

https://your-app.yourdomain.com

注意:由于还没有配置访问策略,此时任何人都可以访问。接下来我们将配置身份验证。

第二部分:配置访问控制

1. 访问 Cloudflare Zero Trust 控制台

打开浏览器,访问:https://one.dash.cloudflare.com/

首次使用需要设置团队名称(Team name),这个名称会成为你的 Zero Trust 域名的一部分。

2. 创建应用程序

  1. 在左侧菜单中,进入 AccessApplications
  2. 点击 Add an application
  3. 选择 Self-hosted(自托管应用)

3. 配置应用信息

在应用配置页面填写以下信息:

Basic information(基本信息)

  • Application name:应用名称(如 comfyui
  • Session Duration:会话持续时间(如 24 hours
  • Application domain

    • Subdomain: your-app
    • Domain: yourdomain.com

4. 创建访问策略

在同一页面向下滚动到 Policies 部分:

创建策略的常用方式

方式 1:基于邮箱地址(推荐用于个人)

  • Policy name:策略名称(如 allow-specific-users
  • Action:选择 Allow
  • Configure rules

    • Include

      • 选择 Emails
      • 输入允许访问的邮箱地址(可以添加多个)
      • 例如:user1@example.com, user2@example.com

方式 2:基于邮箱域名(适合团队)

  • Include

    • 选择 Email domains
    • 输入允许的邮箱域名
    • 例如:@yourcompany.com(允许所有该域名下的邮箱)

方式 3:基于 IP 地址

  • Include

    • 选择 IP ranges
    • 输入允许的 IP 地址或 IP 段
    • 例如:192.168.1.100203.0.113.0/24

方式 4:组合多个条件

你可以添加多个 Include 规则,用户满足任一条件即可访问。也可以添加 Exclude 规则来排除特定用户。

5. 配置登录方式

在应用配置页面,点击 Login methods 标签:

  • One-time PIN:通过邮件发送验证码(默认启用,如果没有启用需要在编辑状态下手动启用
  • GoogleGitHub 等:OAuth 登录方式
  • SAMLOIDC:企业级单点登录

对于个人用户,推荐使用 One-time PIN(邮件验证码)或 Google 登录。

6. 保存配置

点击 Save application 完成配置。

第三部分:测试访问

1. 访问你的应用

打开浏览器,访问:https://your-app.yourdomain.com

2. 登录流程

系统会重定向到 Cloudflare Access 登录页面:

  1. 输入你在策略中配置的邮箱地址
  2. 点击 Send me a code
  3. 查收邮件中的验证码(6 位数字)
  4. 输入验证码
  5. 验证成功后,会重定向回你的应用

3. 会话管理

登录成功后,在设置的会话时间内(如 24 小时)无需重复登录。会话过期后需要重新验证。

第四部分:故障排查

问题 1:收不到验证邮件

可能原因和解决方法

1.1 邮件被拦截

  • 检查垃圾邮件文件夹(最常见)
  • 检查推广邮件或其他分类文件夹
  • 在邮箱中搜索发件人:noreply@cloudflareaccess.com@cloudflare.com

1.2 策略未关联到应用

这是最常见的问题。确认方法:

  1. 进入 AccessApplications
  2. 点击你的应用
  3. 查看 Overview 页面
  4. 确认 Used by applications 字段不是 --

如果策略未关联:

  1. 编辑应用
  2. 进入 Policies 标签
  3. 确认你创建的策略已添加到应用中

1.3 One-time PIN 未启用

  1. 访问 SettingsAuthentication
  2. 查看 Login methods
  3. 确认 One-time PIN 已启用(绿色)
  4. 如果未启用,点击 Add new 添加

1.4 Outlook/Hotmail 邮箱特殊问题

Outlook/Hotmail 有时会严格拦截 Cloudflare 邮件:

  • 尝试使用 Gmail 等其他邮箱测试
  • 检查 Outlook 的 "其他"文件夹
  • noreply@cloudflareaccess.com 添加到白名单

1.5 测试策略配置

使用 Policy Tester 功能:

  1. 在应用的 Policies 标签页
  2. 点击 Test policies
  3. 输入测试邮箱
  4. 查看是否匹配策略

问题 2:Tunnel 连接失败

2.1 检查服务状态

# 查看服务状态
sudo systemctl status cloudflared

# 查看实时日志
sudo journalctl -u cloudflared -f

# 查看最近 50 条日志
sudo journalctl -u cloudflared -n 50

2.2 常见错误和解决方法

错误:failed to connect to the edge

  • 检查服务器网络连接
  • 确认防火墙未阻止 cloudflared 出站连接
  • 尝试重启服务:sudo systemctl restart cloudflared

错误:config validation error

  • 检查 /etc/cloudflared/config.yml 格式
  • 确认 Tunnel ID 正确
  • 确认凭证文件路径存在

错误:connection refused

  • 确认本地服务(如 8188 端口)正在运行
  • 测试本地访问:curl http://localhost:8188

2.3 重新配置 Tunnel

如果问题持续,可以删除并重新创建:

# 停止服务
sudo systemctl stop cloudflared

# 删除 tunnel
cloudflared tunnel delete my-app-tunnel

# 重新创建(从步骤 3 开始)
cloudflared tunnel create my-app-tunnel

问题 3:DNS 解析失败

3.1 检查 DNS 记录

# Linux/macOS
nslookup your-app.yourdomain.com

# 或使用 dig
dig your-app.yourdomain.com

应该返回类似 xxxx.cfargotunnel.com 的 CNAME 记录。

3.2 DNS 传播延迟

DNS 更改可能需要几分钟到几小时才能全球生效。可以:

3.3 手动添加 DNS 记录

如果 cloudflared tunnel route dns 命令失败,可以手动添加:

  1. 登录 Cloudflare 控制台
  2. 选择你的域名
  3. 进入 DNSRecords
  4. 点击 Add record

    • Type: CNAME
    • Name: your-app
    • Target: <Tunnel-ID>.cfargotunnel.com
    • Proxy status: Proxied(橙色云朵)

问题 4:策略配置问题

4.1 查看访问日志

  1. 进入 LogsAccess
  2. 查看最近的认证尝试
  3. 检查是否有错误信息

4.2 使用 IP 白名单临时测试

如果邮件验证一直有问题,可以临时改用 IP 白名单:

  1. 访问 https://ip.sbhttps://ifconfig.me 查看你的公网 IP
  2. 编辑应用策略
  3. 修改 Include 规则:

    • 删除 Emails 规则(或保留)
    • 添加 IP ranges
    • 输入你的公网 IP

4.3 添加其他登录方式

如果 One-time PIN 持续有问题,可以添加其他登录方式:

  1. 在应用的 Login methods
  2. 点击 Add new
  3. 选择 GoogleGitHub 等 OAuth 提供商
  4. 按提示完成配置

问题 5:服务访问慢或不稳定

5.1 检查本地服务性能

# 测试本地访问速度
curl -w "@-" -o /dev/null -s http://localhost:8188 <<'EOF'
time_namelookup: %{time_namelookup}\n
time_connect: %{time_connect}\n
time_total: %{time_total}\n
EOF

5.2 优化 Tunnel 配置

/etc/cloudflared/config.yml 中添加:

tunnel: <你的Tunnel-ID>
credentials-file: /root/.cloudflared/<你的Tunnel-ID>.json

# 添加以下优化配置
protocol: quic
no-autoupdate: true

ingress:
  - hostname: your-app.yourdomain.com
    service: http://localhost:8188
    originRequest:
      noTLSVerify: true
      connectTimeout: 30s
      keepAliveTimeout: 90s
  - service: http_status:404

修改后重启服务:

sudo systemctl restart cloudflared

第五部分:安全建议

1. 限制本地访问

既然已经通过 Cloudflare Zero Trust 控制访问,建议将本地服务改为只监听 127.0.0.1,避免本地网络直接访问绕过认证。

例如,如果你的服务支持配置监听地址:

# 从
0.0.0.0:8188

# 改为
127.0.0.1:8188

2. 使用强会话策略

根据安全需求调整会话时长:

  • 高安全:1 小时或更短
  • 日常使用:24 小时
  • 低敏感服务:1 周

3. 启用审计日志

在 Zero Trust 控制台,你可以查看所有访问记录:

  • 谁在什么时间访问了应用
  • 使用了哪种认证方式
  • 访问是否成功

4. 定期更新 cloudflared

# 更新到最新版本
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared-linux-amd64.deb
sudo systemctl restart cloudflared

5. 使用不同策略管理不同应用

如果你有多个内网服务,可以为每个服务创建独立的应用和策略:

ingress:
  - hostname: app1.yourdomain.com
    service: http://localhost:8188
  - hostname: app2.yourdomain.com
    service: http://localhost:3000
  - hostname: app3.yourdomain.com
    service: http://localhost:8080
  - service: http_status:404

然后在 Zero Trust 控制台为每个域名创建单独的应用,设置不同的访问策略。

第六部分:高级配置

1. 使用 Cloudflare Access 组

如果需要管理多个用户,可以创建组:

  1. 进入 SettingsAccountUsers
  2. 创建用户组(如 developers, admins
  3. 在策略中使用组而不是单独的邮箱

2. 配置 WARP 客户端

对于需要频繁访问的用户,可以使用 WARP 客户端实现更好的体验:

  1. 下载 Cloudflare WARP 客户端
  2. 使用 Zero Trust 模式连接
  3. 无需每次打开浏览器都登录

3. 使用 Service Auth

对于 API 或自动化访问,可以使用 Service Token:

  1. 进入 AccessService Auth
  2. 创建 Service Token
  3. 在请求头中使用 Token 访问

4. 配置设备信任

可以要求设备安装 WARP 客户端并满足特定条件才能访问:

  1. 进入 SettingsDevices
  2. 配置设备策略(如要求操作系统更新、防火墙开启等)
  3. 在应用策略中添加设备信任要求

常见使用场景

场景 1:个人 ComfyUI 服务器

# /etc/cloudflared/config.yml
tunnel: abc123...
credentials-file: /root/.cloudflared/abc123...json

ingress:
  - hostname: comfyui.example.com
    service: http://localhost:8188
  - service: http_status:404

访问策略:只允许你自己的邮箱

场景 2:团队内部工具

# /etc/cloudflared/config.yml
tunnel: abc123...
credentials-file: /root/.cloudflared/abc123...json

ingress:
  - hostname: tools.company.com
    service: http://localhost:8080
  - service: http_status:404

访问策略:允许 @company.com 域名下的所有邮箱

场景 3:多个服务

# /etc/cloudflared/config.yml
tunnel: abc123...
credentials-file: /root/.cloudflared/abc123...json

ingress:
  - hostname: jupyter.example.com
    service: http://localhost:8888
  - hostname: grafana.example.com
    service: http://localhost:3000
  - hostname: portainer.example.com
    service: https://localhost:9443
    originRequest:
      noTLSVerify: true
  - service: http_status:404

为每个服务在 Zero Trust 控制台创建独立应用和策略。

总结

通过 Cloudflare Zero Trust,我们可以:

无需公网 IP:内网服务器也能对外提供服务
安全访问控制:通过邮箱、IP、设备等多种方式控制访问
免费使用:个人用户可以免费使用(有一定的使用限制)
易于管理:图形化界面,配置简单
高可用性:依托 Cloudflare 全球网络

希望本文能帮助你成功配置 Cloudflare Zero Trust,安全地远程访问你的内网服务!

参考资源

更新日志

  • 2026-01-28:初始版本发布

此前写过切换到了RIME/雾凇拼音输入法,但是出于种种原因,雾凇拼音中包含的敏感词/NSFW词语总是会在各种场合下出现,不适合工作中长期使用。所以使用Golang写了一个简洁易用的NSFW词屏蔽软件。

IceMinus/冰减https://github.com/uselibrary/iceminus 一个用于屏蔽Rime/雾凇拼音(iDvel/rime-ice) 字典中敏感词(NSFW)的命令行工具。

以下是简要的使用说明,更多详细内容可以前往GitHub查看。

使用说明

安装

推荐在release页面下载预编译的二进制文件。

或自行编译,例如:

git clone https://github.com/uselibrary/iceminus.git
cd iceminus
# 编译Windows版本
env GOOS=windows GOARCH=amd64 go build -o bin/iceminus_windows_amd64.exe .

使用说明

下载后运行iceminus,指定要处理的目录,以Windows为例:

./iceminus.exe --path C:\Users\USERNAME\AppData\Roaming\Rime\cn_dicts # USERNAME替换为你的用户名

程序将扫描该目录下的所有YAML文件,查找包含敏感词的行,并在行首添加注释符号 # 以屏蔽这些条目。

随后,请执行Rime的重新部署以应用更改。

时间买入2026年,OpenWrt也例行大版本更新,从OpenWrt 24.10更新至OpenWrt 25.12,当前(2026-01-23)已经发布了两个RC版本。

主要改动

  1. 软件包管理器从 opkg 切换到 apk
    这是本次更新中最具变革性的。opkg因为功能陈旧、性能难以适应现代化软件体系,且维护人员有限,已经制约了OpenWrt的发展。因此,OpenWrt社区决定采用源自Alpine Linux的现代化轻量级包管理器apk(Alpine Package Keeper)。虽然在24.10版本周期内就已在主开发分支的快照(nightly)版本中开始测试,但出于系统性限制和兼容性考虑,直到现在才正式将其作为默认的包管理器。
  2. 交互式系统升级(Attended Sysupgrade)功能集成到默认的 LuCI 安装中
    现在可以直接通过Web界面将设备从24.10升级到25.12,并自动保留配置,直接简化升级流程,对于部分不方便的设备不再需要各种半手动操作了。
  3. Shell 命令历史记录存储在内存中,直到下次重启
    OpenWrt可以有类似现代化Linux桌面系统的终端体验了。
  4. 集成视频流(Video Feed)功能
    OpenWrt 25.12默认集成了基于Qt5的视频流应用,这为路由器在家庭监控、视频网关等新应用场景上打开了大门。
  5. Wi-Fi 脚本已转换为 ucode 格式
    这项底层改动旨在提高Wi-Fi配置的效率和一致性。

组件与软件更新

  • Linux kernel 更新到了 6.12
  • 工具链也对应更新:

    • musl libc 1.2.5
    • glibc 2.41
    • gcc 14.3.0
    • binutils 2.44
  • 核心包例行更新:

    • hostapd 2025年8月版本
    • dnsmasq 2.91
    • dropbear 2025.89
    • busybox 1.37.0

经常在GoRust之间切换,很喜欢RustCargo带来的优秀项目初始化和构建体验:

cargo new <appName> # 一键创建标准项目
cargo build # 统一构建流程

但回到Go时,虽然go mod很好,但项目初始化、结构规范、构建优化这些事,总是要手动操作。
于是,通过将Cargo的部分理念带到Go生态中。通过倒反天罡,写了gocar:简化Go项目“创建-构建”流程的命令行工具。它不替代go命令,而是作为补充,提供更一致、更便捷的起点。

项目已开源:https://github.com/uselibrary/gocar

以下是当前的示例,欢迎PR/issue:

快速开始

# 创建新项目(简洁模式)
gocar new myapp

# 进入项目目录
cd myapp

# 构建项目
gocar build

# 运行项目
gocar run

# 清理构建产物
gocar clean

命令

gocar new <name> [--mode simple|project]

创建新的 Go 项目。

参数:

  • <name> - 项目名称,同时作为目录名和输出的可执行文件名
  • --mode - 项目模式,可选 simple(默认)或 project

项目名规则:

  • 必须以字母开头
  • 只能包含字母、数字、下划线 _ 或连字符 -
  • 不能使用保留名称:testmaininitinternalvendor

示例:

# 创建简洁模式项目(默认)
gocar new myapp

# 创建项目模式项目
gocar new myserver --mode project

gocar build [--release]

构建当前项目。

参数:

  • --release 可选,使用之后即以CGO=0模式构建并优化体积

构建行为:

模式命令等价
Debug(默认)go build -o bin/<appName> ./main.go
ReleaseCGO_ENABLED=0 go build -ldflags="-s -w" -trimpath -o bin/<appName> ./main.go
项目模式下入口为 ./cmd/server/main.go

示例:

# Debug 构建
gocar build

# Release 构建(CGO=0模式构建并优化体积)
gocar build --release

gocar run [args...]

直接运行当前项目(使用 go run)。

示例:

# 运行项目
gocar run

# 传递参数给应用
gocar run --port 8080

gocar clean

清理 bin/ 目录中的构建产物。

示例:

gocar clean
# Cleaned build artifacts for 'myapp'

gocar help

显示帮助信息。

gocar version

显示版本信息。


项目模式

简洁模式(Simple)

适用于小型项目、脚本、CLI 工具等。

myapp/
├── go.mod
├── main.go
├── README.md
├── bin/
├── .gitignore
└── .git/

main.go 模板:

package main

import (
    "fmt"
    "time"
)

func main() {
    fmt.Println("Hello, gocar! A golang package manager.")
    fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
}

项目模式(Project)

适用于大型项目、Web 服务、微服务等,遵循 Go 标准项目布局。

myapp/
├── cmd/
│   └── server/
│       └── main.go      # 应用入口
├── internal/            # 私有代码(不可被外部导入)
├── pkg/                 # 公共库代码
├── test/                # 集成测试
├── bin/                 # 构建输出
├── go.mod
├── README.md
├── .gitignore
└── .git/

cmd/server/main.go 模板:

package main

import (
    "fmt"
    "time"
)

func main() {
    fmt.Println("Hello, gocar! A golang package manager.")
    fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
}

目录说明:

  • cmd/ - 应用程序入口
  • internal/ - 私有代码,仅本模块内部使用(Go 编译器强制)
  • pkg/ - 可被外部项目导入的公共库
  • test/ - 集成测试、端到端测试

特性

  • 自动 Git 初始化 - 创建项目时自动执行 git init -b main 并生成 .gitignore,需要已经安装git
  • 项目名验证 - 确保项目名符合 Go 规范
  • Release 优化 - 使用 -ldflags="-s -w" -trimpath 减小二进制体积
  • 跨平台支持 - AMD64及aarch64的Windows、Linux 和 macOS
  • 清理命令 - 一键清理构建产物