返回博客

来自伊朗的GitHub代理:制裁下开发者如何保持代码访问

由于美国制裁,GitHub 阻止了来自伊朗的访问,但开发者找到了解决方案。我们分析了哪些代理真正有效,以及如何在 Git、VS Code 和终端中进行设置。

📅2026年8月19日
```html

GitHub在2019年根据OFAC的要求封锁了来自伊朗用户的访问——OFAC是监管制裁执行的美国机构。从那时起,伊朗开发者面临着同样的局面:仓库无法访问,推送和拉取请求失败,账户可能随时被冻结。尽管如此,工作并没有停止——团队继续提交代码、部署和参与开源项目。在本文中,我们将探讨在2024-2025年哪些方法真正有效,哪些代理适合GitHub,以及如何正确设置而不影响速度。

为什么GitHub封锁伊朗:制裁和技术实现

在2019年7月,GitHub开始限制来自伊朗、克里米亚、古巴、叙利亚和北朝鲜用户的访问。原因是OFAC(外国资产控制办公室)根据美国制裁法律的要求。自2018年起拥有GitHub的微软作为美国公司,必须遵守这些限制。

从技术上讲,封锁是通过多个层面实现的:

  • 基于IP的地理封锁: GitHub通过IP地址确定国家,并封锁来自伊朗地址范围的请求(属于伊朗提供商的AS块)。
  • 账户冻结: 从伊朗IP注册的账户或在个人资料中指定伊朗的账户可能会被转为只读模式或完全冻结。
  • 私有仓库的封锁: 公共仓库部分可读,但私有仓库完全关闭。
  • GitHub Actions和Packages的限制: CI/CD管道和包注册表也无法从被封锁的地区访问。

尽管如此,GitHub多次表示反对这些限制,并在监管机构中游说放宽限制。2019年,该公司获得了为伊朗开发者提供公共仓库免费访问的许可,但完全解除封锁仍未实现。

⚠️ 重要理解: 封锁是针对受制裁的组织和政府机构,而不是针对个人开发者。大多数伊朗程序员在国际团队中工作,个人并不受制裁——但从技术上讲,系统是通过IP封锁所有人。

因此,解决问题的关键在于更换IP地址——这是技术上绕过地理封锁的唯一方法。我们来看看哪些工具适合这个目的。

什么有效:代理、VPN和绕过方案

伊朗开发者使用几种方法。每种方法都有优缺点——我们将诚实地分析它们,而不进行营销。

1. 住宅代理

住宅代理使用来自其他国家(如德国、荷兰、美国、土耳其)的真实家庭用户IP地址。从GitHub的角度来看,这样的请求看起来像是来自被允许国家的普通用户。这是最可靠的长期工作选项:代理被封锁的风险最低,稳定性高。

缺点是速度低于数据中心代理,成本更高。对于Git操作(推送/拉取/克隆)来说,这通常不是关键:仓库的大小是以兆字节而非千兆字节计算的。

2. 数据中心代理

数据中心代理速度更快且成本更低。适合克隆大型仓库、下载工件、使用GitHub API。然而,数据中心的IP更容易被识别为代理——某些范围已经被GitHub列入黑名单。我们建议使用来自欧洲地区(DE、NL、FR)的数据中心代理——它们更少受到过滤。

3. VPN

VPN是伊朗用户中最流行的工具。它在整个操作系统级别工作,无需在每个应用程序中单独设置。缺点是:许多VPN服务器已经被GitHub封锁(尤其是流行的免费VPN),速度不稳定,并且在连接中断时,流量可能通过伊朗IP泄露。

4. Tor

Tor在技术上是可行的,但GitHub积极封锁Tor的出口节点。速度极低——克隆即使是小型仓库也可能需要几个小时。对于偶尔访问Web界面是合适的,但对于定期开发则不适合。

5. 通过其他国家的服务器建立SSH隧道

如果您在欧洲或美国有VPS,可以通过SSH隧道建立SOCKS5代理。这在技术上是可靠的且免费(如果有服务器),但需要基本的Linux知识。有关设置的更多信息,请参见Git部分。

工具总结:

对于日常使用GitHub,最佳组合是:住宅或数据中心代理 + 在Git配置级别的设置。这提供了稳定性,而不影响整个系统的流量。

哪些类型的代理适合GitHub:比较表

我们将在一个表中分析所有选项,以便您轻松选择适合您的情况:

类型 速度 可靠性 GitHub封锁风险 最佳适用场景
住宅代理 中等 最低 日常工作,推送/拉取,Web界面
数据中心代理 中等 中等 克隆大型仓库,GitHub API,CI/CD
移动代理 中等 非常高 非常低 处理账户,如果已经受到怀疑
VPN(付费) 中等 中等 中等 一般互联网访问 + GitHub
SSH隧道(自己的VPS) 在欧洲/美国有VPS的开发者
Tor 非常低 不推荐用于Git工作

如果您的账户已经收到警告或暂时被冻结,建议考虑使用移动代理——它们使用的是移动运营商的IP,GitHub几乎从不封锁,因为一个移动IP背后有成千上万的用户。

如何在Git、终端和IDE中设置代理:逐步指南

在Git中设置代理的主要优势(而不是在系统级别或VPN中)是您可以控制通过代理发送的流量。本地请求保持直接,只有GitHub流量通过外部IP路由。

在Git中设置HTTPS代理(全局)

打开终端并执行以下命令,将HOSTPORT替换为您的代理信息:

# 对于HTTP/HTTPS代理:
git config --global http.proxy http://HOST:PORT

# 对于SOCKS5代理(推荐):
git config --global http.proxy socks5://HOST:PORT

# 如果代理需要身份验证(用户名 + 密码):
git config --global http.proxy socks5://USERNAME:PASSWORD@HOST:PORT

# 仅适用于github.com(不影响其他仓库):
git config --global http.https://github.com.proxy socks5://HOST:PORT

最后一条命令是最有用的:它仅将代理应用于对github.com的请求,而不影响GitLab、Bitbucket或公司的内部仓库。

检查设置

# 查看Git中的当前代理设置:
git config --global --list | grep proxy

# 测试通过代理连接到GitHub:
git ls-remote https://github.com/github/gitignore HEAD

如果命令ls-remote返回提交哈希——代理工作正常。如果出现错误Connection refusedCould not resolve host——请检查HOST和PORT的正确性。

禁用代理(不需要时)

# 删除全局代理:
git config --global --unset http.proxy

# 仅删除github.com的代理:
git config --global --unset http.https://github.com.proxy

在VS Code中设置

VS Code使用系统的代理设置用于内置终端和扩展。如果您通过终端在Git中设置了代理,VS Code的内置终端将自动获取这些设置。对于在编辑器中使用HTTP代理(例如,安装扩展),请打开:

文件 → 首选项 → 设置 → 搜索“proxy” → 在http.proxy字段中指定代理地址。

通过SSH隧道设置(如果有自己的VPS)

如果您在欧洲或美国有VPS,可以通过SSH一条命令建立本地SOCKS5代理:

# 通过SSH在本地端口1080上创建SOCKS5代理:
ssh -D 1080 -C -N user@your-vps-ip

# 然后在Git中指定这个本地代理:
git config --global http.proxy socks5://127.0.0.1:1080

标志-D 1080在端口1080上打开SOCKS5代理,-C启用压缩,-N指示SSH不执行命令——仅保持隧道。

SSH与HTTPS:通过代理哪个更好适用于GitHub

这是最常见的问题之一:在通过代理使用GitHub时,应该使用哪个协议——SSH(端口22或443)还是HTTPS(端口443)?

通过代理的HTTPS

HTTPS连接容易进行代理——我们上面讨论的命令git config http.proxy正是针对HTTPS的。缺点是:每次推送/拉取时,Git会请求登录名和密码(或个人访问令牌)。解决方案是将令牌保存在凭据存储中:

# 启用在系统钥匙串中存储令牌:
git config --global credential.helper store

# 第一次成功推送后,令牌将自动保存

通过代理的SSH(ProxyCommand)

SSH连接无法通过标准的http.proxy在Git中进行代理——需要在~/.ssh/config中进行单独设置。添加以下块:

Host github.com
    HostName ssh.github.com
    User git
    Port 443
    ProxyCommand nc -X 5 -x HOST:PORT %h %p

这里ssh.github.com:443是GitHub的特殊SSH端点,工作在443端口(HTTPS),这有助于绕过22端口的封锁。nc -X 5使用SOCKS5代理。

可以通过以下命令检查SSH连接:

ssh -T [email protected]
# 预期的响应:Hi username! You've successfully authenticated...

建议:

对于大多数开发者来说,设置HTTPS + SOCKS5代理在Git配置中更简单。通过ProxyCommand的SSH需要安装netcat工具,并且配置稍微复杂,但可以方便地使用SSH密钥而无需输入令牌。

账户风险及如何最小化

使用代理访问GitHub不仅是技术问题,也是账户安全的问题。不当设置可能会引起对账户的关注或产生新的问题。

风险1:频繁更换IP

如果您使用轮换代理(IP每次请求或每几分钟更换),GitHub可能会记录可疑活动:一个账户在短时间内从数十个不同的IP登录。这是安全检查和潜在封锁的触发因素。

解决方案: 使用静态(sticky)代理,固定IP或会话代理,具有较长的会话时间(至少24小时)。对于GitHub,不需要轮换——需要稳定性。

风险2:使用被封锁的数据中心IP

一些流行托管服务(AWS、DigitalOcean、Vultr)的IP范围已经被列入黑名单或引起了额外关注。GitHub不会直接封锁它们,但可能会要求额外的验证。

解决方案: 选择欧洲的数据中心(DE、NL、CH)——它们更少被列入黑名单。在长期使用之前,通过ipinfo.ioscamalytics.com检查IP。

风险3:个人资料中包含伊朗数据

如果您的GitHub个人资料中指定了伊朗(在位置字段中),账户更有可能受到限制,无论IP如何。这并不意味着需要隐藏来源——但要理解这是一个额外因素。

风险4:处理组织仓库

如果您的组织在GitHub上注册为伊朗公司或有伊朗管理员,限制可能会更严格——甚至冻结整个组织。在这种情况下,代理对个人账户有帮助,但无法解决组织级别的问题。

如果账户已经被冻结该怎么办

GitHub为个人开发者提供了官方的账户解冻流程。请写信至[email protected],解释情况。在邮件中说明:

  • 您是个体开发者,与受制裁的组织无关
  • 您的活动是开源或商业软件开发
  • 链接到您的公共仓库和活动

根据社区经验,GitHub在1-4周内恢复大多数个体开发者的访问权限。

检查清单:快速检查GitHub的代理设置

使用此检查清单确保在开始工作之前一切设置正确:

✅ 在设置之前

  • 获取代理信息:HOST、PORT、类型(HTTP/SOCKS5)、用户名/密码
  • ipinfo.io上检查代理IP——国家不能是伊朗
  • 确保IP不在黑名单中:在scamalytics.com上检查
  • 选择静态IP(不轮换)以便长期使用

✅ Git设置

  • 执行了命令git config --global http.proxy
  • 代理仅适用于github.com(不是全局)——如果需要点对点设置
  • 已设置credential.helper以存储令牌(用于HTTPS)
  • 对于SSH:在~/.ssh/config中添加了ProxyCommand块

✅ 工作检查

  • 命令git ls-remote https://github.com/github/gitignore HEAD返回哈希
  • 命令ssh -T [email protected]返回问候(对于SSH)
  • 推送到测试仓库成功
  • 没有错误403 ForbiddenRepository access blocked

✅ 账户安全

  • 使用静态IP(不轮换)
  • 在GitHub账户上启用双因素身份验证
  • 个人访问令牌设置为最低必要权限(仅repo)
  • 令牌有有效期(不是永久的)

结论

GitHub的制裁限制是伊朗开发者面临的一个不愉快现实,但并非死胡同。技术解决方案是存在的并且有效:使用国外IP的代理结合正确的Git设置可以进行全面的开发——推送提交、克隆仓库、使用GitHub Actions并参与开源项目。

本文的关键结论:

  • 对于日常工作,选择静态的住宅或数据中心代理来自欧洲——稳定的IP没有轮换。
  • 在Git配置中设置代理,而不是在系统级别——这提供了点对点的控制,而不影响整个流量。
  • 如果账户已经受到怀疑——使用移动IP,它们几乎从不被封锁。
  • 如果账户被冻结——请写信至[email protected],GitHub会为个体开发者恢复访问。
  • 使用通过443端口的SSH(ssh.github.com)——这可以绕过大多数提供商级别的封锁。

如果您在寻找可靠的解决方案以便持续使用GitHub,建议考虑住宅代理——它们使用来自被允许国家的真实家庭用户IP,最小化吸引保护系统的注意,并为Git操作提供稳定的连接。对于高负载任务(克隆大型仓库、CI/CD管道),数据中心代理是一个不错的替代方案——在处理大量数据时更快且更经济。

```