<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>223.IM (zh-CN)</title><description>Ideas in Motion</description><link>https://223.im/</link><language>zh-CN</language><item><title>利用 Caddy 反代 Tailscale DERP 服务</title><link>https://223.im/zh-CN/posts/caddy-tailscale-derp-reverse-proxy/</link><guid isPermaLink="true">https://223.im/zh-CN/posts/caddy-tailscale-derp-reverse-proxy/</guid><description>介绍在公网 IPv4 受限的网络环境中，如何使用 Docker、Caddy 和 Cloudflare DNS 部署 Tailscale DERP 中继服务。</description><pubDate>Thu, 24 Jul 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;需求背景&lt;/h2&gt;
&lt;p&gt;因为运营商对于 IPv4 及 公网IP 的政策收窄，现在的普通家宽所获得的 IP 都是 NAT 过后的私有 IP。人在外已经无法通过 DDNS 等方式直连到家里的 NAS 等服务了。为了能够从外部访问到家里的 NAS 等设备，需要通过 Tailscale 的 VPN 服务来实现外部访问。&lt;/p&gt;
&lt;h2&gt;前期准备&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;VPS / 云服务器&lt;/li&gt;
&lt;li&gt;域名&lt;/li&gt;
&lt;li&gt;Docker Compose 文件&lt;/li&gt;
&lt;li&gt;Caddyfile
VPS / 云服务器如果位于国内，那么相关的域名需要进行备案，不然无法访问。我这次使用的是 日本 的 国际版阿里云服务器，&lt;a href=&quot;https://www.alibabacloud.com/campaign/benefits?_p_lc=1&amp;amp;referral_code=A9239E#J_7789915720&quot;&gt;2C1G200M&lt;/a&gt; 。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;网络质量可以参考下方&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./1771345304.png&quot; alt=&quot;网络质量&quot; /&gt;&lt;/p&gt;
&lt;p&gt;整体的性能、网络测试可以参考 &lt;a href=&quot;https://nodequality.com/r/J7QuXhzzS1t66f63jOOWFC63k4O9IAtU&quot;&gt;NodeQuality&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Docker 环境安装&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;apt install curl -y &amp;amp;&amp;amp; apt install wget -y
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Docker Compose&lt;/h3&gt;
&lt;p&gt;完整 Docker Compose 文件如下：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;networks:
  caddynet:
    external: true  # 如果你已有 caddynet 网络，保留 external

services:
  caddy:
    image: markd3ng/caddy_custom
    container_name: caddy
    restart: unless-stopped
    ports:
      # - &quot;80:80&quot;     # HTTP 验证用
      - &quot;443:443&quot;   # TLS/HTTPS 用
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - ./caddy_data:/data
      - ./caddy_config:/config
    environment:
      - CLOUDFLARE_API_TOKEN=${CLOUDFLARE_API_TOKEN}  # 从 .env 文件中读取
    networks:
      - caddynet

  derper:
    image: fredliang/derper
    container_name: derper
    restart: always
    environment:
      - DERP_DOMAIN=example.com
      # - DERP_CERT_MODE=manual  # derper 自签，改用 Caddy 反代
      - DERP_ADDR=:8080             # 监听内部端口
      - DERP_STUN=true
      # - DERP_VERIFY_CLIENTS=true
      - DERP_STUN_PORT=3478
    # volumes:
      # - /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock
    ports:
      - &quot;3478:3478/udp&quot;             # 外部设备用 STUN 连接
    networks:
      - caddynet
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Docker Compose 解析&lt;/h4&gt;
&lt;p&gt;这个 docker-compose.yml 文件定义了两个服务：caddy 和 derper，它们都连接到一个名为 caddynet 的 外部 Docker 网络。&lt;/p&gt;
&lt;h5&gt;networks 配置&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;networks:
  caddynet:
    external: true
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;PS：需要手动用 &lt;code&gt;docker network create caddynet&lt;/code&gt; 创建 caddynet 的网络。&lt;/p&gt;
&lt;h5&gt;服务：Caddy&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;services:
  caddy:
    image: markd3ng/caddy_custom
    container_name: caddy
    restart: unless-stopped
    ports:
      - &quot;443:443&quot;   # 监听外部 HTTPS 流量（可选开启 80）
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - ./caddy_data:/data
      - ./caddy_config:/config
    environment:
      - CLOUDFLARE_API_TOKEN=${CLOUDFLARE_API_TOKEN}
    networks:
      - caddynet
&lt;/code&gt;&lt;/pre&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;项目&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;image&lt;/td&gt;
&lt;td&gt;使用自定义构建的 &lt;code&gt;caddy&lt;/code&gt; 镜像（可能包含额外插件）。[^1]见解释。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ports&lt;/td&gt;
&lt;td&gt;仅开放 443（HTTPS），若要自动申请证书，建议开启 80（被注释掉）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;volumes&lt;/td&gt;
&lt;td&gt;绑定本地配置：&amp;lt;br/&amp;gt;- &lt;code&gt;Caddyfile&lt;/code&gt; 是主配置文件&amp;lt;br/&amp;gt;- &lt;code&gt;caddy_data&lt;/code&gt; 存储证书等数据&amp;lt;br/&amp;gt;- &lt;code&gt;caddy_config&lt;/code&gt; 存储配置状态&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;environment&lt;/td&gt;
&lt;td&gt;使用环境变量 &lt;code&gt;CLOUDFLARE_API_TOKEN&lt;/code&gt;，供 Caddy 使用 DNS 方式申请证书（Cloudflare 提供 DNS 验证）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;networks&lt;/td&gt;
&lt;td&gt;使用共享网络 &lt;code&gt;caddynet&lt;/code&gt;，以便跟其他服务（如 derper）互通。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h5&gt;服务：Derper&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;  derper:
    image: fredliang/derper
    container_name: derper
    restart: always
    environment:
      - DERP_DOMAIN=example.com
      - DERP_ADDR=:8080
      - DERP_STUN=true
      - DERP_STUN_PORT=3478
    ports:
      - &quot;3478:3478/udp&quot;
    networks:
      - caddynet
&lt;/code&gt;&lt;/pre&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;项目&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;image&lt;/td&gt;
&lt;td&gt;使用 &lt;code&gt;fredliang/derper&lt;/code&gt; 镜像，运行 Tailscale 的中继服务器。 如果需要启用 &lt;code&gt;Client verification&lt;/code&gt;，见[^2]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DERP_DOMAIN&lt;/td&gt;
&lt;td&gt;设置公开使用的域名（需与 Caddy 配置反向代理对应）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DERP_ADDR=:8080&lt;/td&gt;
&lt;td&gt;监听容器内部的 8080 端口（不直接对外开放，走反向代理）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DERP_STUN=true&lt;/td&gt;
&lt;td&gt;启用 STUN（用于打洞）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DERP_STUN_PORT=3478&lt;/td&gt;
&lt;td&gt;STUN 使用的端口，映射到主机 3478/udp&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ports&lt;/td&gt;
&lt;td&gt;仅暴露 3478/udp，用于 STUN 功能，8080 没有暴露（仅被 Caddy 内部反代）。&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;networks&lt;/td&gt;
&lt;td&gt;与 &lt;code&gt;caddy&lt;/code&gt; 共享 &lt;code&gt;caddynet&lt;/code&gt; 网络，Caddy 可以通过容器名访问 derper 服务。&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h5&gt;访问流程&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;graph TD
    subgraph &quot;Internet&quot;
        A[Client]
        D[Cloudflare API]
        E[Let&apos;s Encrypt]
    end

    subgraph &quot;Your Server / Docker&quot;
        subgraph &quot;caddynet Network&quot;
            direction LR
            B(Caddy - Reverse Proxy)
            C(Derper - DERP Server)
            B -- Reverse Proxy to :8080 --&amp;gt; C
        end
    end

    A -- DERP over HTTPS (derper.saru.im:443) --&amp;gt; B
    A -- STUN Request (UDP:3478) --&amp;gt; C
    C -- STUN Response --&amp;gt; A

    B -- Step 1: Request TLS Certificate --&amp;gt; E
    E -- Step 2: Issue DNS-01 Challenge --&amp;gt; B
    B -- Step 3: Update TXT Record --&amp;gt; D
    D -- Step 4: Confirm TXT Record --&amp;gt; E
    E -- Step 5: Issue TLS Certificate --&amp;gt; B
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Caddyfile&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;derper.example.com {
  reverse_proxy derper:8080
  tls {
    dns cloudflare {env.CLOUDFLARE_API_TOKEN}
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;解析&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;derper.example.com
这是一个 站点块（site block），表示这个配置应用于请求域名为 derper.saru.im 的 HTTPS 请求。&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;所有访问 https://derper.saru.im 的流量都会被这个配置处理。&lt;/li&gt;
&lt;li&gt;默认监听端口为 443（HTTPS），Caddy 会自动监听。&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;reverse_proxy derper:8080
反向代理指令。&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;意思是：将访问 https://derper.saru.im 的流量，转发给名为 derper 的容器的 8080 端口。&lt;/li&gt;
&lt;li&gt;derper 是 Docker Compose 中的服务名，Caddy 和 derper 都在 caddynet 网络中，因此可以通过容器名直接解析。
相当于&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;[Client] ---&amp;gt; Caddy (443) ---&amp;gt; http://derper:8080 (容器间通信)
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;tls { ... }
这一块配置 HTTPS/TLS 的证书获取方式。&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;tls {
  dns cloudflare {env.CLOUDFLARE_API_TOKEN}
}
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;启用自动申请证书（Let’s Encrypt）。&lt;/li&gt;
&lt;li&gt;使用 Cloudflare DNS 方式验证域名所有权，适用于：
&lt;ul&gt;
&lt;li&gt;无公网 80 端口&lt;/li&gt;
&lt;li&gt;或在内网中运行服务时&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;{env.CLOUDFLARE_API_TOKEN} 表示从环境变量中读取 Cloudflare 的 API Token。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;PS：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;确保 Cloudflare 上有一个 A 记录 derper.saru.im 指向你 Caddy 所在服务器的公网 IP；&lt;/li&gt;
&lt;li&gt;环境变量 CLOUDFLARE_API_TOKEN 应至少包含 Cloudflare 的 Zone.DNS 权限。API 的申请请自行查阅教程；&lt;/li&gt;
&lt;li&gt;如果你用了 .env 文件，确保 docker-compose.yml 和 .env 在同一目录下；&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;.env&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;CLOUDFLARE_API_TOKEN=type_your_own_api_here
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;整体目录结构如下&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;derper-caddy/
├── Caddyfile               # Caddy 的配置文件
├── docker-compose.yml      # Docker Compose 编排
├── .env                    # 存储 Cloudflare API Token
├── caddy_data/             # Caddy 自动生成的证书等数据（映射目录）
├── caddy_config/           # Caddy 的配置状态数据
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;[^1]:Caddy 的容器镜像是编译了第三方的插件，如果有需要编译自己的 Caddy，可以自己去编译。可以参考 &lt;a href=&quot;Dockerfile&quot;&gt;^caddy_custom&lt;/a&gt;
https://github.com/caddy-dns/cloudflare
https://github.com/caddyserver/forwardproxy&lt;/p&gt;
&lt;p&gt;[^2]: Client verification&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;安装 Tailscale 的 Linux 客户端，教程自行查找；&lt;/li&gt;
&lt;li&gt;Docker Compose 文件中的 &lt;code&gt;# DERP_VERIFY_CLIENTS=true&lt;/code&gt; 去掉 &lt;code&gt;#&lt;/code&gt; 启用。&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;FROM caddy:builder AS builder

RUN xcaddy build \
    --with github.com/caddy-dns/cloudflare \
    --with github.com/caddyserver/forwardproxy

FROM caddy:latest

COPY --from=builder /usr/bin/caddy /usr/bin/caddy
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;运行&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Caddyfile&lt;/code&gt;,&lt;code&gt;Docker Compose File&lt;/code&gt;,&lt;code&gt;.ENV&lt;/code&gt; 都准备好后在终端执行。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker compose up -d
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;验证&lt;/h3&gt;
&lt;p&gt;浏览器打开 &lt;code&gt;https://derper.example.com&lt;/code&gt; 显示 &lt;code&gt;DERP&lt;/code&gt; 字样证明成功。&lt;/p&gt;
&lt;h2&gt;Tailscale 组网&lt;/h2&gt;
&lt;p&gt;这部分可以参考 &lt;a href=&quot;https://www.haha.ai/derper&quot;&gt;多多先生&lt;/a&gt; 的文章。&lt;/p&gt;
</content:encoded></item><item><title>利用 Air780E 低成本制作短信转发器</title><link>https://223.im/zh-CN/posts/air780e-sms-forwarder/</link><guid isPermaLink="true">https://223.im/zh-CN/posts/air780e-sms-forwarder/</guid><description>记录基于 Air780E 4G 模组、LuatOS 和飞书 Webhook 构建短信转发器的硬件选型、配置和固件烧录流程。</description><pubDate>Fri, 13 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;需求背景&lt;/h2&gt;
&lt;p&gt;作为一个经历过 web 2.0 浪潮以及经历国内网站、App 对于隐私无尽窃取的洗礼的老狗，深知在网络上行走有多个手机号作为隐私屏蔽的第一步是多么的重要（虽然实名，但是还是有点儿作用的。）
但是，虽然手机号副号成本低，但是手机的成本不低。不可能为了收个短信专门买一台机器的。因此就有了本次的需求驱动力。&lt;/p&gt;
&lt;h2&gt;需求评估及分析&lt;/h2&gt;
&lt;h3&gt;模组特性比对&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;模组型号&lt;/th&gt;
&lt;th&gt;AT指令&lt;/th&gt;
&lt;th&gt;LuatOS二次开发&lt;/th&gt;
&lt;th&gt;USB上网 RNDIS/PPP&lt;/th&gt;
&lt;th&gt;VoLTE 通话语音&lt;/th&gt;
&lt;th&gt;GNSS 定位&lt;/th&gt;
&lt;th&gt;适用区域&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Air780EQ&lt;/td&gt;
&lt;td&gt;支持&lt;/td&gt;
&lt;td&gt;支持&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;中国&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Air780EP&lt;/td&gt;
&lt;td&gt;支持&lt;/td&gt;
&lt;td&gt;支持&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;中国&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Air780EPS&lt;/td&gt;
&lt;td&gt;支持&lt;/td&gt;
&lt;td&gt;支持&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;中国&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Air780E&lt;/td&gt;
&lt;td&gt;支持&lt;/td&gt;
&lt;td&gt;支持&lt;/td&gt;
&lt;td&gt;支持&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;中国&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Air780EX&lt;/td&gt;
&lt;td&gt;支持&lt;/td&gt;
&lt;td&gt;支持&lt;/td&gt;
&lt;td&gt;支持&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;中国&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Air780EG&lt;/td&gt;
&lt;td&gt;支持&lt;/td&gt;
&lt;td&gt;支持&lt;/td&gt;
&lt;td&gt;支持&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;支持&lt;/td&gt;
&lt;td&gt;中国&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Air780EEN&lt;/td&gt;
&lt;td&gt;支持&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;支持&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;北美&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Air780EEU&lt;/td&gt;
&lt;td&gt;支持&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;支持&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;欧亚&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Air780EEJ&lt;/td&gt;
&lt;td&gt;支持&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;支持&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;日本&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;特性支持比对，引用自官网，有所修剪。完整对比见 https://official.openluat.com/detail?id=5&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;需求分析及评估&lt;/h3&gt;
&lt;h4&gt;分析&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;用途：主要用于接收限制手机卡的短信并把相应短信信息转发到可选、指定的途径中；&lt;/li&gt;
&lt;li&gt;运营商：支持中国电信、中国联通、中国移动、中国广电；&lt;/li&gt;
&lt;li&gt;预算：越低越好，原合宙的开发板大幅度涨价，已经不具有性价比了。需要一块能够低成本替代的；&lt;/li&gt;
&lt;li&gt;成熟度：主要指的是能够低难度上手，快速适用；&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;评估&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;目前，合宙自己做的 Air780E 核心板一开始推广的时候只要非常便宜的几十块就可以了，但是现在 淘宝 上已经涨价到了 99 元。这个价位就不如十几块钱的 410 USB Dongle 划算了。而除了合宙自己的核心板外，淘宝上还有 doiot 和 小蓝鲸物联科技 两个店铺有相应的核心板出售。&lt;/li&gt;
&lt;li&gt;Air780E 支持 4G Cat.1 网络、支持短信收发以及支持 RNDIS（可以做成 USB Dongle），对于个人而言已经完全足够使用了。小小的缺点就是缺乏对 WIFI 的支持，这样做短信转发的时候就需要手机卡本身有一定的上网流量，不然无法上网。不过这个问题可以通过与 ESP32 的核心板链接并借用 ESP32 的 WIFI 能力实现短信的转发。&lt;/li&gt;
&lt;li&gt;Air780E 支持的网络是联通和移动，如果手机卡本身是电信的话，建议购买的是 Air780EPV。&lt;/li&gt;
&lt;li&gt;综上，我最终购买的就是 doiot 的 USB 接口的 Air780E&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;新手上路&lt;/h3&gt;
&lt;h4&gt;实现效果目标&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;本需需要实现的是：当 Air780E 接到短信之后，通过互联网把短信转到指定的通道上，实现短信的转发。本次我选择的是 飞书 的 WebHook，收到短信后就转发到我的飞书机器人上，从而实现短信转发的效果。&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;准备转发渠道&lt;/h4&gt;
&lt;p&gt;正如上面所说的，采用的是 飞书 的 WebHook 做短信转发，所以本次介绍方式也是 飞书 的 WebHook 申请。申请步骤及方案见&lt;a href=&quot;https://open.feishu.cn/document/client-docs/bot-v3/add-custom-bot&quot;&gt;官方文章&lt;/a&gt;。&lt;/p&gt;
&lt;h4&gt;代码准备&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;本次项目采用的是 0wQ 的 &lt;a href=&quot;https://github.com/0wQ/air780e-forwarder&quot;&gt;air780e-forwarder&lt;/a&gt;,直接点击 &lt;code&gt;Download ZIP&lt;/code&gt; 把代码打包下来就好了。&lt;/li&gt;
&lt;li&gt;打开 &lt;code&gt;/script/config.lua&lt;/code&gt; 的文件，找到 &lt;code&gt;第4行&lt;/code&gt; 的 &lt;code&gt;NOTIFY_TYPE&lt;/code&gt; 修改成你选择的通知类型。我的是飞书，所以修改成 &lt;code&gt;NOTIFY_TYPE = &quot;feisu&quot;,&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;找到 &lt;code&gt;第33行&lt;/code&gt; 的 &lt;code&gt;FEISHU_WEBHOOK = &quot;&quot;,&lt;/code&gt;，把上面步骤申请的 KEY 填入到里面并保存文件。&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;工具准备&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;打开 &lt;a href=&quot;https://pan.air32.cn/s/DJTr?path=%2FLuaTools%E5%8E%86%E5%8F%B2%E7%89%88%E6%9C%AC&quot;&gt;合宙云盘&lt;/a&gt;，找到最新时间版本工具并下载。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;双击打开程序，点击&lt;code&gt;项目管理测试&lt;/code&gt;。&lt;img src=&quot;./1771745676.png&quot; alt=&quot;Step-00&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;点击 &lt;code&gt;创建项目&lt;/code&gt; 并输入自定项目名称。&lt;img src=&quot;./1771745704.png&quot; alt=&quot;Step-01&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;选择 下载好的固件（位于core目录），后缀是 .soc 的文件，Air780E 对应的就是结尾 EC618.soc 的文件，如图。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./1771745730.png&quot; alt=&quot;Step-02&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;添加修改好的脚本文件（位于script目录），点击&lt;code&gt;增加脚本或资源文件&lt;/code&gt;，把 &lt;code&gt;script&lt;/code&gt; 目录下的文件全部添加进去。添加完后点击 &lt;code&gt;下载底层和脚本&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./1771745763.png&quot; alt=&quot;Step-03&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;这时候，插入 Air780E 到电脑 USB（提示「发现下载端口」），这时候固件和脚本会自动刷入，直到提示下载完成。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;这时，烧录操作全部完成，可以开机使用了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./1771745784.png&quot; alt=&quot;Step-04&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
</content:encoded></item><item><title>使用 Cloudflare Workers 和 KV 存储做图片反向代理</title><link>https://223.im/zh-CN/posts/cloudflare-workers-kv-image-reverse-proxy/</link><guid isPermaLink="true">https://223.im/zh-CN/posts/cloudflare-workers-kv-image-reverse-proxy/</guid><description>分析使用 Cloudflare Workers 与 KV 构建图片反向代理和缓存层的实现方式，并保留相关服务条款风险提示。</description><pubDate>Tue, 25 Jun 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;:::caution
Cloudflare 已经更新相关 ToS，本文介绍的内容会违反 ToS 限制。有可能导致封号，请勿参考。
:::&lt;/p&gt;
&lt;h2&gt;需求背景&lt;/h2&gt;
&lt;p&gt;在国内，有很多互联网的服务用起来并不爽，很多时候会遇到网站打开了，图片死活加载不出来或者加载到一半就不加载了。比如 Gravatar 的图像服务，又比如 Fanza 的图片。在终端不用 Proxy 的前提下，解决这个问题，需要做一个反向代理来实现。&lt;/p&gt;
&lt;h2&gt;为什么用 Cloudflare&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;我的域名在 Cloudflare&lt;/li&gt;
&lt;li&gt;Cloudflare Workers 有免费额度&lt;/li&gt;
&lt;li&gt;Cloudflare KV 有免费额度&lt;/li&gt;
&lt;li&gt;Cloudflare 全球都有服务器，比一般自己搭建的牛逼多了&lt;/li&gt;
&lt;li&gt;我不想自己开 nginx 实现&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;综上，这就是为什么使用 Cloudflare 的 Workers 和 KV 服务来实现了。&lt;/p&gt;
&lt;h2&gt;流程逻辑&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;graph TD
    A([浏览器请求]) --&amp;gt; B[插件匹配清单]
    B --&amp;gt; C{是否匹配规则?}
    
    C -- yes --&amp;gt; D[插件替换请求路径为 Cloudflare 绑定域名]
    D --&amp;gt; E[Cloudflare Workers 反代并缓存]
    
    C -- no --&amp;gt; F[不操作]
    
    E --&amp;gt; G([返回信息])
    F --&amp;gt; G
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;具体步骤&lt;/h2&gt;
&lt;h3&gt;准备动作&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;准备一个能够正常访问的域名；&lt;/li&gt;
&lt;li&gt;能够正常访问 Cloudflare 的网络条件&lt;/li&gt;
&lt;li&gt;Cloudflare 账号&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jiacai2050/gooreplacer&quot;&gt;gooreplacer 插件&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;开启 KV&lt;/h3&gt;
&lt;p&gt;操作步骤以英文界面为准，因为 Cloudflare 的中文翻译太垃圾了。&lt;/p&gt;
&lt;h3&gt;创建 namespaces&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;点击 &quot;Workers &amp;amp; Pages&quot;&lt;/li&gt;
&lt;li&gt;点击 &quot;KV&quot;&lt;/li&gt;
&lt;li&gt;点击 &quot;Create a namespaces&quot;
&lt;img src=&quot;./1771749616.webp&quot; alt=&quot;KV_0001&quot; /&gt;&lt;/li&gt;
&lt;li&gt;在 &quot;Namespace Name&quot; 输入 &quot;RVCACHE&quot; （RVCACHE 可自己改成想要的名字）&lt;/li&gt;
&lt;li&gt;点击 &quot;Add&quot;
&lt;img src=&quot;./1771749660.webp&quot; alt=&quot;KV_0002&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;创建 Workers&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;点击 &quot;Workers &amp;amp; Pages&quot;&lt;/li&gt;
&lt;li&gt;点击 &quot;Overview&quot;&lt;/li&gt;
&lt;li&gt;点击 &quot;Create&quot;
&lt;img src=&quot;./1771749762.webp&quot; alt=&quot;WK_0001&quot; /&gt;&lt;/li&gt;
&lt;li&gt;点击 &quot;Create Worker&quot;
&lt;img src=&quot;./1771749938.webp&quot; alt=&quot;WK_0002&quot; /&gt;&lt;/li&gt;
&lt;li&gt;&quot;Name your project&quot; 输入你的项目名字&lt;/li&gt;
&lt;li&gt;点击 &quot;SAVE&quot;&lt;/li&gt;
&lt;li&gt;点击 &quot;Finish&quot;
&lt;img src=&quot;./1771749976.webp&quot; alt=&quot;WK_0003&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Workers 绑定 KV&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;点击创建的 Workers&lt;/li&gt;
&lt;li&gt;点击 &quot;Setting&quot;&lt;/li&gt;
&lt;li&gt;点击 &quot;Variables&quot;&lt;/li&gt;
&lt;li&gt;找到 &quot;KV Namespace Bindings&quot;&lt;/li&gt;
&lt;li&gt;点击 &quot;Add binding&quot;
&lt;img src=&quot;./1771750023.webp&quot; alt=&quot;BD_0001&quot; /&gt;&lt;/li&gt;
&lt;li&gt;&quot;Variable name&quot; 输入 &quot;RVCACHE&quot;&lt;/li&gt;
&lt;li&gt;&quot;KV Namespace&quot; 点击 &quot;select&quot; 选择刚才创建的 &quot;RVCACHE&quot;&lt;/li&gt;
&lt;li&gt;点击 &quot;Deploy&quot;
&lt;img src=&quot;./1771750058.webp&quot; alt=&quot;BD_0002&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;编写代码&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;点击 &quot;Edit Code&quot;
&lt;img src=&quot;./1771750108.webp&quot; alt=&quot;ED_0001&quot; /&gt;&lt;/li&gt;
&lt;li&gt;粘贴以下代码&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;// 定义路径映射
const PATH_MAP = {
  &quot;/gravatar&quot;: &quot;https://secure.gravatar.com&quot;,
};

async function handleRequest(request) {
  const url = new URL(request.url);
  const pathParts = url.pathname.split(&apos;/&apos;);
  const route = `/${pathParts[1]}`;
  
  const originBase = PATH_MAP[route];
  
  if (!originBase) {
    // 如果请求的路径不在映射表中，返回 404
    return new Response(&apos;Route not mapped&apos;, { status: 404 });
  }

  // 构建 cacheKey 和 originUrl
  const cacheKey = `${route}${url.pathname.replace(route, &apos;&apos;)}`;
  const originUrl = `${originBase}${url.pathname.replace(route, &apos;&apos;)}`;

  // 从 KV 中检查缓存
  const cache = await REVERSE_CACHE.get(cacheKey, { type: &apos;arrayBuffer&apos; });
  
  if (cache) {
    // 返回缓存的响应
    return new Response(cache, {
      headers: {
        &apos;Content-Type&apos;: &apos;application/octet-stream&apos;,
        &apos;X-Worker-Cache&apos;: &apos;HIT&apos;
      }
    });
  }

  // 如果缓存中没有，则从 origin 获取
  const response = await fetch(originUrl);

  if (response.ok) {
    const contentType = response.headers.get(&apos;Content-Type&apos;);

    // 检查是否为常见图片类型
    if (contentType &amp;amp;&amp;amp; (contentType.includes(&apos;image/jpeg&apos;) || contentType.includes(&apos;image/png&apos;) || contentType.includes(&apos;image/gif&apos;))) {
      const responseData = await response.arrayBuffer();
      // 缓存响应
      await REVERSE_CACHE.put(cacheKey, responseData, { expirationTtl: 86400 }); // 缓存一天

      return new Response(responseData, {
        headers: {
          &apos;Content-Type&apos;: contentType,
          &apos;X-Worker-Cache&apos;: &apos;MISS&apos;
        }
      });
    } else {
      // 不是常见图片类型，不缓存，直接返回
      return response;
    }
  } else {
    return new Response(&apos;Not found&apos;, { status: 404 });
  }
}

addEventListener(&apos;fetch&apos;, event =&amp;gt; {
  event.respondWith(handleRequest(event.request));
});
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;点击 &quot;Deploy&quot;
&lt;img src=&quot;./1771750146.webp&quot; alt=&quot;ED_0002&quot; /&gt;&lt;/li&gt;
&lt;li&gt;点击 &quot;Save and deploy&quot;
&lt;img src=&quot;./1771750230.webp&quot; alt=&quot;ED_0003&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Workers 绑定域名&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;点击 &quot;Setting&quot;&lt;/li&gt;
&lt;li&gt;点击 &quot;Triggers&quot;&lt;/li&gt;
&lt;li&gt;&quot;Custom Domains&quot; 点击 &quot;Add Custom Domain&quot;&lt;/li&gt;
&lt;li&gt;&quot;Domain&quot; 输入自己的域名&lt;/li&gt;
&lt;li&gt;点击 &quot;Add Custom Domain&quot;
&lt;img src=&quot;./1771750310.webp&quot; alt=&quot;AD_0001&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;浏览器插件配置&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;点击&quot;新增&quot;
&lt;img src=&quot;./1771750385.webp&quot; alt=&quot;GO_0001&quot; /&gt;&lt;/li&gt;
&lt;li&gt;&quot;匹配模式&quot; 输入需要被反代的域名，以 Gravatar 为例就是 &quot;https://secure.gravatar.com&quot;&lt;/li&gt;
&lt;li&gt;&quot;匹配类型&quot; 保持不变，选择通配符&lt;/li&gt;
&lt;li&gt;&quot;目标地址&quot; 输入 Cloudflare Workers 的域名，如 www.example.com，结合 &lt;code&gt;PATH_MAP&lt;/code&gt; 中定义的目录，构造后的地址就是 &quot;https://www.example.com/gravatar/&quot;&lt;/li&gt;
&lt;li&gt;点击 &quot;提交&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;其他备注&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;多路径支持，参照写法多加一行即可；&lt;/li&gt;
&lt;li&gt;上述代码是使用 OpenAI 的 ChatGPT 写的。&lt;/li&gt;
&lt;/ol&gt;
</content:encoded></item><item><title>使用 NAT VPS 搭建代理</title><link>https://223.im/zh-CN/posts/nat-vps-proxy-setup/</link><guid isPermaLink="true">https://223.im/zh-CN/posts/nat-vps-proxy-setup/</guid><description>记录 NAT VPS 的网络限制、适用场景和基于 x-ui、Shadowsocks 及中转服务的代理节点搭建过程。</description><pubDate>Wed, 17 Jan 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;:::caution
NATSeek 已经跑路，请自行寻找新的 NAT VPS。
:::&lt;/p&gt;
&lt;h2&gt;什么是 NAT VPS&lt;/h2&gt;
&lt;p&gt;较之传统的 VPS，NAT VPS 最大的特点就是 NAT 了。传统的 VPS 提供了一个能够被访问到的 IPv4 / IPv6 地址、与之规格相应的内存、CPU 和 磁盘资源。NAT VPS 往往的价格都是比一般的 VPS 的价格更为便宜的。主要是因为几个原因：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;传统的 VPS 一般的资源使用量不会特别高，对于运营的公司来说，硬件资源是有富裕的。这也是 NAT VPS 一般都比较便宜的原因之一；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;传统的 VPS 用途很广泛。可以做 Web 应用、C/S 架构应用、远程下载、跳板等等一切的应用；NAT VPS 因为配置、共用一个 IPv4 地址等原因，一般是不能做需要特定 IP 的应用的；&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;NAT VPS 一般都是被用来做翻墙用的落地机器的，用途具有非常大的特异性；&lt;/p&gt;
&lt;p&gt;下面是 ChatGPT 整理的一些优劣性分析，看看就好了。其中 NAT VPS 的有点都是站在运用者角度的，和一般使用者没关系。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;NAT VPS&lt;/th&gt;
&lt;th&gt;传统VPS&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;优点 (Pros)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;- 成本效益&lt;/td&gt;
&lt;td&gt;- 独立性&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;- 网络安全性&lt;/td&gt;
&lt;td&gt;- 灵活性&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;- 资源利用率高&lt;/td&gt;
&lt;td&gt;- 性能稳定性&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;- IP地址节约&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;缺点 (Cons)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;- 限制性&lt;/td&gt;
&lt;td&gt;- 成本较高&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;- 配置复杂性&lt;/td&gt;
&lt;td&gt;- 安全风险&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;NAT VPS 的挑选&lt;/h3&gt;
&lt;p&gt;主要的挑选原则就是几个&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;价格，价格越便宜越好，找到一个价格是哪怕它突然跑路了你也能承受的；&lt;/li&gt;
&lt;li&gt;线路，按需。很多 NAT VPS 都是以 香港、台湾、日本、美国等地方的线路为主。但是实际上便宜的 NAT VPS 很多时候线路都不是直连，弯弯绕绕，出口线路也是很糟糕的，可以去 NodeSeek 论坛找找相关的评测；&lt;/li&gt;
&lt;li&gt;风评，无他，尽可能的避免跑路。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;利用 NAT VPS 搭建代理&lt;/h2&gt;
&lt;p&gt;本次我购买的 NAT VPS 是 &lt;a href=&quot;https://natseek.com/&quot;&gt;NATSeek&lt;/a&gt; 的 日本 VPS，LXC 虚拟化技术，支持的操作系统就俩：Debian 和 Alpine。有一说一，重装是真的难用。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://natseek.com/&quot;&gt;NATSeek&lt;/a&gt; 的 Uptime 可以看这里 &lt;a href=&quot;https://uptime.natseek.com/&quot;&gt;NATSeek Uptime&lt;/a&gt;，日本机器 Uptime 还行。&lt;/p&gt;
&lt;h3&gt;搭建代理&lt;/h3&gt;
&lt;p&gt;结合到实际的情况，我是需要用到中转服务的，所以本次采用的代理协议是 shaowsocks 和 vmess。所以我用的脚本就是 &lt;a href=&quot;https://github.com/FranzKafkaYu/x-ui&quot;&gt;x-ui&lt;/a&gt; 的搭建脚本。搭建过程就参考文档的 usage 就好了。&lt;/p&gt;
&lt;h3&gt;计算端口&lt;/h3&gt;
&lt;p&gt;因为 NAT VPS 共用几个 IPv4 的地址作为流量入口的地址，而且限制了一般的 443 / 80 端口，所以如果打算通过 443 / 80 访问的话是行不通的。需要利用商家提供的端口范围访问。&lt;/p&gt;
&lt;p&gt;因为我用的是 NATSeek 的机器，它们提供了端口计算工具。如果你也是用的 NATSeek 的话，那可以打开 &lt;a href=&quot;https://natseek.com/PortForward.html&quot;&gt;NATSeek Port Calculator&lt;/a&gt;，在 &lt;code&gt;Public IP&lt;/code&gt; 处填写后台给出的 IP，&lt;code&gt;Private IP&lt;/code&gt;处填写你机器的私网 IP，点击&lt;code&gt;Calculate&lt;/code&gt; 就能计算出你的端口可用范围了。&lt;/p&gt;
&lt;p&gt;x-ui 通过后台命令修改 web 的访问端口为你的可用端口即可。&lt;/p&gt;
&lt;h3&gt;配置协议&lt;/h3&gt;
&lt;p&gt;打开 x-ui 的面板，点击&lt;code&gt;入站列表&lt;/code&gt; 点击 &lt;code&gt;添加入站&lt;/code&gt; 协议选择 &lt;code&gt;shadowsocks&lt;/code&gt; 端口填写你的可用端口之一就好了。&lt;/p&gt;
&lt;h3&gt;配置中转&lt;/h3&gt;
&lt;p&gt;就在我写这文章的时候，我的 NAT VPS 的共用 IP 已经被封了，直连肯定不行的了。所以需要配置中转服务，而且中转服务还能加速整体的使用效果。&lt;/p&gt;
&lt;p&gt;我用的是 &lt;a href=&quot;https://nnr.moe?aff=6689&quot;&gt;NNR&lt;/a&gt; 的中转服务，提供以下线路：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;沪日 IEPL，日本 BGP 出口、支持 IPv6 转发；&lt;/li&gt;
&lt;li&gt;深港 IEPL，HKBGP 出口、支持 UDP；&lt;/li&gt;
&lt;li&gt;广港 IEPL，支持 UDP、支持 IPv6；&lt;/li&gt;
&lt;li&gt;上海 - 日本，上海 CN2 - 日本 BGP、支持 IPv6、支持 UDP；&lt;/li&gt;
&lt;li&gt;上海 - 香港，上海 CN2 - 香港 BGP、支持 IPv6、支持 UDP；&lt;/li&gt;
&lt;li&gt;广州移动 - 香港，支持 IPv6；&lt;/li&gt;
&lt;li&gt;安徽联通 - 日本软银，支持 UDP、支持 IPv6；&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;充值&lt;/h4&gt;
&lt;p&gt;因为我的机器是日本的机器，所以我用的是 上海 - 日本 的线路。先去 &lt;code&gt;商店&lt;/code&gt; 查看附和你需求的套餐，然后去 &lt;code&gt;用户中心&lt;/code&gt; 最下方的 &lt;code&gt;我的钱包&lt;/code&gt; 充值你选的套餐的金额。&lt;/p&gt;
&lt;h4&gt;配置转发&lt;/h4&gt;
&lt;p&gt;点击 &lt;code&gt;转发列表&lt;/code&gt; 再点击 &lt;code&gt;添加&lt;/code&gt; ，节点里面选择你需要的线路，协议根据需求自己选择，&lt;code&gt;源端口&lt;/code&gt; 留空就好了。&lt;code&gt;目标服务器&lt;/code&gt;写你需要转发的 IP，&lt;code&gt;目标端口&lt;/code&gt; 填写你的需要转发的端口。再点击 &lt;code&gt;确认添加&lt;/code&gt; 即可。
&lt;img src=&quot;./1771751796.webp&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;结语&lt;/h2&gt;
&lt;p&gt;在实际的使用过程中，把原本的 shadowsocks 链接信息的 服务器 IP 和 端口 替换成 NNR 中转的信息即可。&lt;/p&gt;
</content:encoded></item><item><title>使用无忧行托管号码</title><link>https://223.im/zh-CN/posts/jegotrip-number-hosting/</link><guid isPermaLink="true">https://223.im/zh-CN/posts/jegotrip-number-hosting/</guid><description>记录如何使用中国移动无忧行 App 的号码托管能力，在无需随身携带实体 SIM 卡的情况下接听电话和接收短信。</description><pubDate>Tue, 02 Jan 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;2024 年，随着各大运营商不断地竞争以及对于永不停止的 “用户增长” 的 KPI 考核要求。 客户上导致了很多人当下拥有不少于三张的手机卡。目前的手机基本都是双卡双卡，多出来的那张卡往往就成了鸡肋而又不想为了这一张手机卡购置或者携带多一台手机出门，但是同时想收到对应手机卡的信息、电话。那么本次介绍的方案就是能解决这种需求；&lt;/p&gt;
&lt;h3&gt;无忧行介绍&lt;/h3&gt;
&lt;p&gt;无忧行是中国移动国际公司面向出境游用户所提供的出境游一站式服务平台；当前具有低价流量、免费电话、旅游产品、优质门票、精品攻略、在线翻译、实时汇率、谷歌导航、达人问答等功能和服务；未来无忧行将秉承中国移动集团一贯的优质服务理念，将国内最好的通信服务无缝扩展到境外，将服务的品类由通信扩展到生活服务的全品类，让用户出境无忧，体验舒心，放心！&lt;/p&gt;
&lt;h3&gt;号码托管介绍&lt;/h3&gt;
&lt;p&gt;无忧行的号码托管能够实现以下功能：&lt;code&gt;把移动手机号从物理 SIM 卡解放，能够通过 无忧行 App 接听电话、接受短信。&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;开启教程&lt;/h2&gt;
&lt;h3&gt;App 下载&lt;/h3&gt;
&lt;p&gt;iOS 下载链接：&lt;a href=&quot;https://apps.apple.com/cn/app/%E6%97%A0%E5%BF%A7%E8%A1%8C-%E6%B5%81%E9%87%8F%E6%9C%BA%E7%A5%A8%E9%85%92%E5%BA%97%E7%81%AB%E8%BD%A6%E7%A5%A8%E9%A2%84%E8%AE%A2/id1037589370&quot;&gt;App Store&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Android 下载链接：&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.cmi.jegotrip&amp;amp;hl=zh&quot;&gt;Google Play&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;账号注册&lt;/h3&gt;
&lt;p&gt;无忧行 App 本身支持 电信、联通、移动 的号码，但是 号码托管 本身只能支持 移动。注册部分略过，无脑注册即可。&lt;/p&gt;
&lt;h3&gt;开启 号码托管&lt;/h3&gt;
&lt;p&gt;点击下方的 &lt;code&gt;电话\信息&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./1771752465.webp&quot; alt=&quot;0001&quot; /&gt;&lt;/p&gt;
&lt;p&gt;点击上方的 &lt;code&gt;号码托管&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./1771752526.webp&quot; alt=&quot;0002&quot; /&gt;&lt;/p&gt;
&lt;p&gt;号卡设置根据自己的情况选择 &lt;code&gt;境外&lt;/code&gt; 或者 &lt;code&gt;境内&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./1771752561.webp&quot; alt=&quot;0003&quot; /&gt;&lt;/p&gt;
&lt;p&gt;移除/拔出手机卡或者选择飞行模式，然后开启 WIFI。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./1771752601.webp&quot; alt=&quot;0004&quot; /&gt;&lt;/p&gt;
&lt;p&gt;打开 &lt;code&gt;托管号码&lt;/code&gt; 的按钮即可&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./1771752640.webp&quot; alt=&quot;0005&quot; /&gt;&lt;/p&gt;
&lt;p&gt;成功&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./1771752670.webp&quot; alt=&quot;0006&quot; /&gt;&lt;/p&gt;
</content:encoded></item><item><title>Hexo Fluid 主题添加 Umami 统计</title><link>https://223.im/zh-CN/posts/hexo-fluid-umami-analytics/</link><guid isPermaLink="true">https://223.im/zh-CN/posts/hexo-fluid-umami-analytics/</guid><description>记录 Hexo Fluid 主题通过 Inject 机制接入 Umami 统计，并通过 CDN 分发脚本资源以改善加载表现的实现方式。</description><pubDate>Thu, 28 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;前言&lt;/h2&gt;
&lt;p&gt;本文主要讲如何将 Umami 应用于 Hexo 主题 Fluid 中，主要是利用主题自带的 注入 功能来添加 Umami [^1]。因为我的 Umami 是部署在 Vercel 上的，但是因为 Vercel 到国内访问太慢了，所以把 Umami 的 js 资源套了 CDN。&lt;/p&gt;
&lt;h2&gt;Umami 部分&lt;/h2&gt;
&lt;h3&gt;统计代码&lt;/h3&gt;
&lt;p&gt;首先要保证你的 Umami 已经成功部署，并且已经在 Umami 添加了网站的统计，获取到了网站的 Tracking Code。&lt;/p&gt;
&lt;p&gt;统计代码内容如下：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;script async src=&quot;https://example.com/script.js&quot; data-website-id=&quot;example-4def-45f8-8d42-example&quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;套 CDN&lt;/h3&gt;
&lt;p&gt;只要把 &lt;code&gt;https://example.com/script.js&lt;/code&gt; 中的 &lt;code&gt;script.js&lt;/code&gt; 放到 CDN 中即可，并且记录对应的链接。&lt;/p&gt;
&lt;h2&gt;Hexo 部分&lt;/h2&gt;
&lt;h3&gt;新增注入文件&lt;/h3&gt;
&lt;p&gt;新建 js，命名随意，我的命名是 &lt;code&gt;_injects_fluid_analytics_umami.js&lt;/code&gt; 存放路径是 &lt;code&gt;blogROOT/scripts/randomNAME.js&lt;/code&gt; 目录结构如下：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;.
├── README.md
├── _config.fluid.yml
├── _config.yml
├── db.json
├── node_modules
├── package-lock.json
├── package.json
├── scaffolds
├── scripts
│   └── _injects_fluid_analytics_umami.js
├── source
├── themes
│   └── fluid
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后文件的内容如下：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;hexo.extend.filter.register(&apos;theme_inject&apos;, function(injects) {
  injects.header.file(&apos;analytics&apos;, &apos;source/_inject/header.ejs&apos;, { key: &apos;value&apos; }, -1);
});
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;懒得解释文件了，具体的是内容解析可以参考脚注[^1] 的链接。文件内容直接参考的就是 &lt;a href=&quot;https://www.zywvvd.com/about/&quot;&gt;CangLan&lt;/a&gt; 的 &lt;a href=&quot;https://www.zywvvd.com/notes/hexo/theme/fluid/fluid-add-umami/fluid-add-umami/&quot;&gt;Fluid -23- 添加 Umami 统计&lt;/a&gt; 。&lt;/p&gt;
&lt;p&gt;实现效果是把位于 &lt;code&gt;blogROOT/source/_inject/header.ejs&lt;/code&gt; 的 ejs 文件注入到 header 中并被加载。&lt;/p&gt;
&lt;h3&gt;配置 js 文件&lt;/h3&gt;
&lt;p&gt;在 &lt;code&gt;blogROOT/source/_inject/&lt;/code&gt; 中新建一个名为 &lt;code&gt;header.ejs&lt;/code&gt; 的文件，文件内容如下：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;script async defer src=&quot;link-to-js-source&quot; data-website-id=&quot;example-4def-45f8-8d42-example&quot; data-host-url=&quot;https://example.com/&quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;其实仔细看这段 &lt;code&gt;html&lt;/code&gt; 代码的内容，和上面的 Umami 原本提供的内容没有太多的区别，核心区别是两个：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;指定了 js 的 CDN 链接；&lt;/li&gt;
&lt;li&gt;增加了 &lt;code&gt;data-host-url&lt;/code&gt; 部分，这个就是 Umami 所对应的链接；&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这部分是参考了 &lt;a href=&quot;https://roywang.dev/&quot;&gt;ROYWANG&lt;/a&gt; 的 &lt;a href=&quot;https://roy.wang/umami-js-quicken/&quot;&gt;使用 CDN 加速 Umami 静态资源&lt;/a&gt;，部分。&lt;/p&gt;
&lt;p&gt;至此，Fluid 就完成了 Umami 的添加，同时也加速了资源文件的加载速度。&lt;/p&gt;
&lt;p&gt;[^1]: &lt;a href=&quot;https://hexo.fluid-dev.com/docs/advance/#fluid-%E6%B3%A8%E5%85%A5%E4%BB%A3%E7%A0%81&quot;&gt;Fluid 注入代码&lt;/a&gt;&lt;/p&gt;
</content:encoded></item><item><title>LG Qua tab PZ 优化指南</title><link>https://223.im/zh-CN/posts/lg-qua-tab-pz-optimization-guide/</link><guid isPermaLink="true">https://223.im/zh-CN/posts/lg-qua-tab-pz-optimization-guide/</guid><description>整理 LG Qua tab PZ 平板的系统升级、ADB 应用冻结、APN 配置和恢复操作，作为旧款 Android 设备维护记录。</description><pubDate>Sat, 22 Sep 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;前段时间，非著名洋垃圾倾销商 &lt;a href=&quot;https://shop432620965.taobao.com/&quot;&gt;OK数码2016&lt;/a&gt; 在淘宝上上架了最新的洋垃圾 &lt;a href=&quot;https://item.taobao.com/item.htm?id=574857700011&quot;&gt;LG Qua tab PZ&lt;/a&gt;，本着对数码产品的满腔热忱（折腾），我再几经挣扎之后还是斥巨资买了一台回来。成色点评没有意义，接下来说说怎么优化吧。毕竟 2G RAM 还是小了。设备参数如下：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;部件&lt;/th&gt;
&lt;th&gt;型号&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;处理器&lt;/td&gt;
&lt;td&gt;Qualcomm Snapdragon 617 MSM8952&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;屏幕&lt;/td&gt;
&lt;td&gt;10.1&quot;  1920 × 1200 px&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;内存&lt;/td&gt;
&lt;td&gt;2G&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;存储&lt;/td&gt;
&lt;td&gt;16G&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;网络&lt;/td&gt;
&lt;td&gt;中国电信、中国联通、中国移动 2.4G &amp;amp; 5G WLAN&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;电池&lt;/td&gt;
&lt;td&gt;7000 mAh&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;上手感觉&lt;/h2&gt;
&lt;p&gt;先说结论：值。
作为洋垃圾而言，LG Qua tab PZ 完全符合它的洋垃圾身份，2G RAM 带来的使用卡顿是各位洋垃圾买家必须承受的痛。在一轮优化之后，这个平板算是能胜任轻度使用（视频、微博、论坛、小说、漫画）的程度。特别一提的是，它的一键变色的功能很是便利。
LG Qua tab PZ 屏幕素质很棒，黑白色模式在看漫画的时候简直一流。得益于 10.1&quot; 的屏幕，漫画内容的展现是非常清晰的。支持 三网4G 和 双频WLAN 是它为数不多的优点了。可惜支持的频段不多，在野外、乡村等地方可能不能上网。&lt;/p&gt;
&lt;h2&gt;升级系统&lt;/h2&gt;
&lt;p&gt;设备在到手之后需要进行系统升级，否则很多视频软件会出现播放视频黑屏只有声音的情况。升级步骤如下：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;平板链接 Wi-Fi；&lt;/li&gt;
&lt;li&gt;点击 “设置”；&lt;/li&gt;
&lt;li&gt;点击 “关于平板电脑”；&lt;/li&gt;
&lt;li&gt;点击 “应用程序更新”。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;系统会在网络链接之后自动查找更新，无脑点击下一步就好了。完成整个的升级流程需要更新几次，重启几次，等就是了。&lt;/p&gt;
&lt;h2&gt;系统优化&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;以下内容有可能导致机器变砖不能使用，后果自负！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;前期准备&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;安装 &lt;a href=&quot;http://tool.lime.gdms.lge.com/dn/downloader.dev?fileKey=UW00120120425&quot;&gt;LG 驱动&lt;/a&gt;；&lt;/li&gt;
&lt;li&gt;ADB环境，推荐使用 &lt;a href=&quot;https://www.atmb.top/&quot;&gt;秋之盒&lt;/a&gt;，方便安装 空调狗、黑域 之类的软件，而且即用即弃，不会污染系统环境；&lt;/li&gt;
&lt;li&gt;空调狗&lt;a href=&quot;https://www.coolapk.com/apk/me.yourbay.airfrozen&quot;&gt;安装包&lt;/a&gt;（本文以 空调狗 为例，其他同类软件请自行安装。）；&lt;/li&gt;
&lt;li&gt;开启开发者模式（方法见 &lt;a href=&quot;/zh-CN/posts/lg-qua-tab-pz-optimization-guide/#%E5%BC%80%E5%90%AF%E5%BC%80%E5%8F%91%E8%80%85%E6%A8%A1%E5%BC%8F&quot;&gt;开启开发者模式&lt;/a&gt;）；&lt;/li&gt;
&lt;li&gt;设定 USB 模式 以支持 ADB （方法见 &lt;a href=&quot;/zh-CN/posts/lg-qua-tab-pz-optimization-guide/#%E8%AE%BE%E5%AE%9A-USB-%E6%A8%A1%E5%BC%8F&quot;&gt;设定 USB 模式&lt;/a&gt;）；&lt;/li&gt;
&lt;li&gt;系统包的列表（方法见 &lt;a href=&quot;/zh-CN/posts/lg-qua-tab-pz-optimization-guide/#%E5%AF%BC%E5%87%BA%E5%8C%85%E5%88%97%E8%A1%A8%E5%8F%8A%E5%BD%BB%E5%BA%95%E7%A6%81%E7%94%A8%E7%9B%B8%E5%85%B3-APP&quot;&gt;导出包列表及彻底禁用相关 APP&lt;/a&gt;）；&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;优化系统&lt;/h3&gt;
&lt;h4&gt;开启开发者模式&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;打开 “设置”；&lt;/li&gt;
&lt;li&gt;点击左下方 “关于平板电脑” ；&lt;/li&gt;
&lt;li&gt;点击右中部 “软件信息” ；&lt;/li&gt;
&lt;li&gt;点击 “内部版本号” 多次，直至系统提醒已开启开发者模式；&lt;/li&gt;
&lt;li&gt;完。&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;玄学优化&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;点击 “设置”；&lt;/li&gt;
&lt;li&gt;点击左下方 “开发人员选项”；&lt;/li&gt;
&lt;li&gt;找到 “窗口动画缩放”、“转换动画缩放”、“动画持续时间比例” 这三项，均设置为 “0.5倍”；‘&lt;/li&gt;
&lt;li&gt;完。&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;设定 USB 模式&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;打开 “设置”；&lt;/li&gt;
&lt;li&gt;选择左下方 “开发人员选项”；&lt;/li&gt;
&lt;li&gt;弹出对话框点击 “不再显示” 和 “确定”；&lt;/li&gt;
&lt;li&gt;在右方 “正在调试” 部分下找到 “USB 调试” 并开启；&lt;/li&gt;
&lt;li&gt;往下拖动，在 “网络” 部分下找到 “选择 USB 配置”，点击并选择 “充电专用”；&lt;/li&gt;
&lt;li&gt;完。&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;导出包列表及彻底禁用相关 APP&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;注意，在进行以下操作前，请确保  LG Qua tab PZ 没有安装 空调狗、冰箱 之类的冻结软件，不然删除不了软件。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5&gt;导出包列表&lt;/h5&gt;
&lt;ol&gt;
&lt;li&gt;在确保驱动安装正确的情况下用 USB 数据线连接 LG Qua tab PZ 以及电脑；&lt;/li&gt;
&lt;li&gt;在弹出的对话框 “是否允许 USB 调试？” 选择 “是”；&lt;/li&gt;
&lt;li&gt;打开 秋之盒，选择右方的 “ABD命令行”；&lt;/li&gt;
&lt;li&gt;在弹出的 “提示” 选择右下方的 “CMD”；&lt;/li&gt;
&lt;li&gt;在弹出的命令行输入以下命令导出软件包列表，改命令默认导出到 D 盘的 &lt;code&gt;soft-list.txt&lt;/code&gt; 中，有需要就自行更改；&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;adb shell pm list packages &amp;gt; D:\soft-list.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;打开导出的 &lt;code&gt;soft-list.txt&lt;/code&gt; 文件，键盘同时按下 &lt;code&gt;CTRL&lt;/code&gt; 和 &lt;code&gt;H&lt;/code&gt; 键，在弹出的 替换” 窗口中的 “查找内容” 填入 &lt;code&gt;package:&lt;/code&gt; “替换为” 留空，点击 “全部替换”；&lt;/li&gt;
&lt;li&gt;现在文档内的内容就是已经安装的软件的列表，每行一个；&lt;/li&gt;
&lt;li&gt;完。&lt;/li&gt;
&lt;/ol&gt;
&lt;h5&gt;彻底禁用相关 APP&lt;/h5&gt;
&lt;p&gt;假设你已经梳理好了 &lt;code&gt;soft-list.txt&lt;/code&gt; 里面的各个 APP 干什么的，那么按照下面步骤做就好了，在删除具体 APP 步骤中，把我提供的 APP 列表替换成你自己的列表就好了。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在 ADB 命令行下输入命令&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;adb shell
pm uninstall --user 0 jp.netstar.familysmile
pm uninstall --user 0 com.google.android.talk
pm uninstall --user 0 com.lge.videoplayer
pm uninstall --user 0 com.lge.sizechangable.weather.platform
pm uninstall --user 0 com.kddi.android.klop
pm uninstall --user 0 com.kddi.android.checker_android
pm uninstall --user 0 com.lge.sizechangable.musicwidget.widget
pm uninstall --user 0 com.lge.music
pm uninstall --user 0 com.facebook.appmanager
pm uninstall --user 0 com.facebook.katana
pm uninstall --user 0 com.facebook.system
pm uninstall --user 0 com.lge.cloudhub
pm uninstall --user 0 com.real.RealPlayerCloud
pm uninstall --user 0 com.google.android.apps.cloudprint
pm uninstall --user 0 com.google.android.apps.docs
pm uninstall --user 0 com.google.android.apps.maps
pm uninstall --user 0 com.kddi.disasterapp
pm uninstall --user 0 com.kddi.android.auoneidsetting
pm uninstall --user 0 com.kddi.android.kddigallery
pm uninstall --user 0 com.kddi.market
pm uninstall --user 0 com.kddi.auoneshopping
pm uninstall --user 0 com.kddi.pass.launcher
pm uninstall --user 0 com.kddi.android.lismobookstore
pm uninstall --user 0 com.kddi.android.mamoru
pm uninstall --user 0 com.kddi.android.cmail
pm uninstall --user 0 com.kddi.android.email
pm uninstall --user 0 com.kddi.android.UtaPass
pm uninstall --user 0 com.kddi.android.imp
pm uninstall --user 0 com.lge.lgmapui
pm uninstall --user 0 com.kddi.datacharge
pm uninstall --user 0 com.google.android.gm
pm uninstall --user 0 com.kddi.android.emailprov
pm uninstall --user 0 jp.co.ise.lgt32.instructionmanual
pm uninstall --user 0 com.kddi.android.mieruka
pm uninstall --user 0 com.kddi.android.repairreceipt
pm uninstall --user 0 com.lge.voicerecorder
pm uninstall --user 0 com.google.android.apps.magazines
pm uninstall --user 0 com.google.android.apps.photos
pm uninstall --user 0 com.kddi.android.au_setting_menu
pm uninstall --user 0 web.wm.auone.jp
pm uninstall --user 0 com.uievolution.gguide.android
pm uninstall --user 0 com.kddi.android.smartpass
pm uninstall --user 0 jp.auone.wallet
pm uninstall --user 0 com.kddi.android.au_wifi_connect2
pm uninstall --user 0 com.kddi.ux.station
pm uninstall --user 0 com.kddi.cs.app001
pm uninstall --user 0 com.lge.eula
pm uninstall --user 0 com.google.android.syncadapters.calendar
pm uninstall --user 0 com.google.android.syncadapters.contacts
pm uninstall --user 0 com.google.android.tts
pm uninstall --user 0 com.google.android.googlequicksearchbox
pm uninstall --user 0 com.google.android.videos
pm uninstall --user 0 com.google.android.music
pm uninstall --user 0 com.lge.eulaprovider
pm uninstall --user 0 com.kddi.ar.satch.satchviewer
pm uninstall --user 0 com.lge.snappage
pm uninstall --user 0 com.lge.videotool
pm uninstall --user 0 jp.co.optim.oru
pm uninstall --user 0 com.kddi.android.ausharelink
pm uninstall --user 0 com.lge.oneseg
pm uninstall --user 0 com.lookout
pm uninstall --user 0 com.lge.icecontacts
pm uninstall --user 0 com.android.contacts
pm uninstall --user 0 com.android.providers.contacts
pm uninstall --user 0 com.lge.smartsharepush
pm uninstall --user 0 com.lge.smartshare.provider
pm uninstall --user 0 com.lge.smartshare
pm uninstall --user 0 com.kddi.android.easysettingwizard
pm uninstall --user 0 com.android.gallery3d
pm uninstall --user 0 com.kddi.android.aumanagementsystem
pm uninstall --user 0 com.kddi.android.packageinstaller
pm uninstall --user 0 jp.co.omronsoft.iwnnime.ml
pm uninstall --user 0 com.kddi.android.auhomelauncher
pm uninstall --user 0 com.lge.launcher2.theme.optimus
pm uninstall --user 0 com.lge.launcher3
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;每行一次，以免出问题，当然你另存为 .bat 文件直接执行也没问题的；&lt;/li&gt;
&lt;li&gt;最后三行需要注意！只有在安装了别的 luancher 后才能删除，不然的话，就崩了！！！；&lt;/li&gt;
&lt;li&gt;重启，完。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;其他&lt;/h2&gt;
&lt;h3&gt;设置移动网络&lt;/h3&gt;
&lt;p&gt;LG Qua tab PZ 支持移动数据网络，但是需要手动设置相应 APN 后才能正常上网，以下为设置步骤。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;插入手机卡；&lt;/li&gt;
&lt;li&gt;长按电源键，选择 “重启手机”；&lt;/li&gt;
&lt;li&gt;在 “是否重启平板电脑” 界面选择 “重启”；&lt;/li&gt;
&lt;li&gt;重启完成后，点击 “设置”；&lt;/li&gt;
&lt;li&gt;选择左方 “移动数据”；&lt;/li&gt;
&lt;li&gt;选择右上方的 “三个点按钮”；&lt;/li&gt;
&lt;li&gt;选择 “移动网络”；&lt;/li&gt;
&lt;li&gt;选择 “接入点名称”；&lt;/li&gt;
&lt;li&gt;选择右上方的 “三个点按钮”；&lt;/li&gt;
&lt;li&gt;选择 “添加 APN”；&lt;/li&gt;
&lt;li&gt;根据运营商填入以下信息，为空就不用填；&lt;/li&gt;
&lt;/ol&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;名称&lt;/th&gt;
&lt;th&gt;中国电信 (China Telecom)&lt;/th&gt;
&lt;th&gt;中国联通 (China Unicom)&lt;/th&gt;
&lt;th&gt;中国移动 (China Mobile)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;APN&lt;/td&gt;
&lt;td&gt;ctnet&lt;/td&gt;
&lt;td&gt;3gnet&lt;/td&gt;
&lt;td&gt;cmnet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;用户名&lt;/td&gt;
&lt;td&gt;ctnet@mycdma.cn&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;密码&lt;/td&gt;
&lt;td&gt;vnet.mobi&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MCC&lt;/td&gt;
&lt;td&gt;460&lt;/td&gt;
&lt;td&gt;460&lt;/td&gt;
&lt;td&gt;460&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MNC&lt;/td&gt;
&lt;td&gt;03&lt;/td&gt;
&lt;td&gt;01&lt;/td&gt;
&lt;td&gt;07&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;APN 类型&lt;/td&gt;
&lt;td&gt;default,hipri,internet,supl&lt;/td&gt;
&lt;td&gt;default,supl&lt;/td&gt;
&lt;td&gt;default,supl&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ol&gt;
&lt;li&gt;选择右上方的 “三个点按钮”；&lt;/li&gt;
&lt;li&gt;选择 “保存”；&lt;/li&gt;
&lt;li&gt;完。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;重置机器&lt;/h3&gt;
&lt;p&gt;由于 LG Qua tab PZ 自带了 Google 服务，假设你在上面登录了 Google 账号，在重置机器前就要先删除 Google 账号，避免重置后卡在激活界面&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;删除已链接的 Wi-Fi，移除手机卡；&lt;/li&gt;
&lt;li&gt;点击 “设置”；&lt;/li&gt;
&lt;li&gt;选择左方的 “备份与重置”；&lt;/li&gt;
&lt;li&gt;选择右方 “重设出场数据”；&lt;/li&gt;
&lt;li&gt;选择右下方 “ 重置平板电脑”；&lt;/li&gt;
&lt;li&gt;选择右下方 “全部删除”；&lt;/li&gt;
&lt;li&gt;在弹出对话框中选择 “重置”；&lt;/li&gt;
&lt;li&gt;完。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;硬格机器&lt;/h3&gt;
&lt;p&gt;假如机器因为删出错软件或者过度优化导致开机不能的话，可以通过一下方式恢复出厂系统。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;机器关机，确保 LED 灯不亮；&lt;/li&gt;
&lt;li&gt;按住 开机键 和 音量键下；&lt;/li&gt;
&lt;li&gt;待 开机 Logo 出现后，松开开机键，再按下，然后保持住（速度稍慢些，音量键下保持按住）；&lt;/li&gt;
&lt;li&gt;进入 Factory Data Reset 界面，然后选择 Yes，Yes。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;激活机器&lt;/h3&gt;
&lt;p&gt;机器在重置完成后会进入设置与激活界面，按照如下步骤操作&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;点击屏幕中的 “日本语”；&lt;/li&gt;
&lt;li&gt;在弹出界面选择 “中文”；&lt;/li&gt;
&lt;li&gt;点击下一步；&lt;/li&gt;
&lt;li&gt;在 “插入 SIM 卡” 界面选择右下方的 “跳过”；&lt;/li&gt;
&lt;li&gt;在 “设置互联网连接” 界面选择右下方的 “下一步”；&lt;/li&gt;
&lt;li&gt;在弹出的对话框 “无互联网” 中选择 “仍然跳过”；&lt;/li&gt;
&lt;li&gt;在 “Google 服务” 中根据自身需求自行选择，选择完毕点击右下方 “下一步”；&lt;/li&gt;
&lt;li&gt;在 “时间和日期” 修改成正确的时间然后点击右下方 “下一步”；&lt;/li&gt;
&lt;li&gt;在 “姓名” 处输入暱称后点击右下方 “下一步”；&lt;/li&gt;
&lt;li&gt;在 “保护您的平板电脑” 界面点击 “以后再说”；&lt;/li&gt;
&lt;li&gt;在弹出的对话框点击 “仍然跳过”；&lt;/li&gt;
&lt;li&gt;在 “法律文件” 界面，把 “EULA（最终用户许可协议）” 和 “软件更新” 的两个 “我同意” 勾上，再点击右下方的 “完成”；&lt;/li&gt;
&lt;li&gt;在 “Welcome to au” 界面点击 “Cancel”；&lt;/li&gt;
&lt;li&gt;在 “a Basic Home Use confirmation” 界面点击 “OK”；&lt;/li&gt;
&lt;li&gt;在 “Welcome” 处点击 “OK”，“Home setting” 处点击 “OK”；&lt;/li&gt;
&lt;li&gt;完。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;充电&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;机器本身支持快充，但是要触发快充需要支持 QC 的充电头。&lt;/li&gt;
&lt;li&gt;最高效的充电方法是先把机器关闭电源然后再充电。&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item></channel></rss>