Vibe Tutorial
域名解析原理与网络接入

12.1 国内访问问题

Tip

作为中国开发者,我们在连接世界互联网时,面临着特殊的网络环境。这不仅影响你查资料,更直接影响你的代码依赖安装和生产环境部署。


1. 为什么要学这个?

你在 GitHub 上发现了一个完美的库,想 npm install,结果卡在进度条不动。 你部署在 Vercel 上的博客,朋友发微信说“打不开”。 你想 push 代码到 GitHub,报错 Connection timed out

你以为是自己代码写得烂,其实是网线被人拔了。


2. 核心概念:看不见的墙

2.1 GFW (Great Firewall)

互联网不是一张平铺的大网,而是有国界的。它像海关一样,检查每一个进出的数据包。

  • DNS 污染:当你问“Google 在哪?”时,它故意给你一个错误的地址。
  • SNI 阻断:当你试图建立 HTTPS 连接时,它通过握手信息识别出你要访问的目标,直接切断连接。

2.2 影响范围

  1. 开发阶段:GitHub, NPM, Docker Hub 速度极慢或无法访问。
  2. 部署阶段:Vercel, Google Cloud, AWS (部分服务) 在国内访问不稳定。

3. 解决方案 (HOW)

3.1 开发环境:代理 (Proxy)

你需要一把梯子(VPN/Clash),并配置终端走代理。注意:VPN 软件通常只代理浏览器,不代理终端。

# 临时设置终端代理 (PowerShell)
$env:http_proxy="http://127.0.0.1:7890"
$env:https_proxy="http://127.0.0.1:7890"

# 验证
curl -I https://www.google.com

3.2 依赖环境:镜像源 (Mirror)

国内大厂(阿里/腾讯/华为)把国外的仓库完整克隆了一份回来。这叫“换源”。

# NPM 换源 (推荐 npmmirror)
npm config set registry https://registry.npmmirror.com

# 验证
npm config get registry

3.3 网络访问链路图

graph TD
    User["国内开发者"] -->|"Step 1: 请求 GitHub"| GFW{GFW 检查}
    
    GFW --"阻断"--> Dead["连接超时 (Timeout)"]
    GFW --"放行"--> Slow["极慢的国际链路"]
    
    User -->|"Step 2: 走代理 (Proxy)"| Tunnel["加密通道"]
    Tunnel -->|"Step 3: 绕过检查"| Target["GitHub 服务器"]
    
    style Dead fill:#ffcdd2,stroke:#c62828
    style Tunnel fill:#c8e6c9,stroke:#2e7d32

4. 避坑指南

❌ 不要这样做 ✅ 应该这样做 为什么
以为开了 VPN 就行 配置 env 变量 终端默认不走系统代理,必须通过 http_proxy 环境变量显式告诉它走哪个端口。
使用 cnpm 换源 (Registry) cnpm 命令虽然快,但容易造成“幽灵依赖”和路径问题。直接修改 npm 的 registry 是最稳妥的。
私搭乱建 合规使用 在公司内网,尽量使用公司提供的正规 VPN 或代理,不要通过个人手段在内网穿透,否则可能违规。

5. 真实案例

Story

2024年,消失的 Docker 镜像

2024年6月,国内几大 Docker Registry 镜像源突然集体下线。无数依赖 docker pull node:18 的 CI/CD 流水线瞬间瘫痪,报错 Error response from daemon。开发者们哀鸿遍野,因为他们习惯了依赖国内镜像。

Vibe 心法:网络环境是客观存在的物理规律。不要把鸡蛋放在一个篮子里。学会配置 HTTP Proxy 和自建 Registry,是确保你的开发节奏不被跨境链路波动打乱的生存技能。


6. 本章小结

  1. 物理规律:认清现实,不要试图用代码解决网络问题。
  2. 换源:这是最合规、最快的解决方式 (NPM/Python/Docker)。
  3. 代理:终端不会自动走代理,必须手动配置环境变量。