GitHub đã chặn quyền truy cập cho người dùng từ Iran vào năm 2019 theo yêu cầu của OFAC — cơ quan quản lý của Mỹ kiểm soát việc tuân thủ các lệnh trừng phạt. Kể từ đó, các nhà phát triển Iran đã phải đối mặt với cùng một tình huống: các kho lưu trữ không khả dụng, push và pull không thành công, và tài khoản có thể bị đóng băng bất cứ lúc nào. Tuy nhiên, công việc không dừng lại — các nhóm vẫn tiếp tục commit, deploy và tham gia vào các dự án mã nguồn mở. Trong bài viết này, chúng ta sẽ phân tích những gì thực sự hoạt động trong năm 2024–2025, các proxy nào phù hợp cho GitHub, và cách cấu hình chúng một cách chính xác mà không làm mất tốc độ.
Tại sao GitHub chặn Iran: các lệnh trừng phạt và thực hiện kỹ thuật
Vào tháng 7 năm 2019, GitHub bắt đầu hạn chế quyền truy cập cho người dùng từ Iran, Crimea, Cuba, Syria và Triều Tiên. Lý do là các yêu cầu của OFAC (Văn phòng Kiểm soát Tài sản Nước ngoài) trong khuôn khổ luật pháp trừng phạt của Mỹ. Microsoft, công ty sở hữu GitHub từ năm 2018, có nghĩa vụ tuân thủ những hạn chế này như một công ty Mỹ.
Về mặt kỹ thuật, việc chặn quyền truy cập hoạt động trên nhiều cấp độ:
- Chặn theo địa lý theo IP: GitHub xác định quốc gia qua địa chỉ IP và chặn các yêu cầu từ dải địa chỉ Iran (các khối AS thuộc về các nhà cung cấp Iran).
- Đóng băng tài khoản: Các tài khoản đăng ký từ IP Iran hoặc có chỉ định Iran trong hồ sơ có thể bị chuyển sang chế độ chỉ đọc hoặc hoàn toàn bị đóng băng.
- Chặn các kho lưu trữ riêng tư: Các kho lưu trữ công khai một phần có thể truy cập để đọc, nhưng các kho lưu trữ riêng tư thì hoàn toàn bị đóng.
- Hạn chế GitHub Actions và Packages: Các pipeline CI/CD và kho lưu trữ gói cũng không khả dụng từ các khu vực bị chặn.
Tuy nhiên, chính GitHub đã nhiều lần tuyên bố rằng họ phản đối những hạn chế này và vận động cho sự nới lỏng từ các cơ quan quản lý. Vào năm 2019, công ty đã đạt được sự cho phép cung cấp quyền truy cập miễn phí vào các kho lưu trữ công khai cho các nhà phát triển Iran, nhưng việc gỡ bỏ hoàn toàn chặn vẫn chưa xảy ra.
⚠️ Quan trọng cần hiểu: Việc chặn này nhằm vào các tổ chức và cấu trúc chính phủ dưới lệnh trừng phạt, chứ không phải các nhà phát triển cá nhân. Hầu hết các lập trình viên Iran làm việc trong các đội ngũ quốc tế và không bị ảnh hưởng bởi các lệnh trừng phạt cá nhân — nhưng về mặt kỹ thuật, hệ thống chặn tất cả theo IP.
Đó là lý do tại sao giải pháp cho vấn đề nằm ở việc thay đổi địa chỉ IP — đây là cách duy nhất để vượt qua việc chặn địa lý về mặt kỹ thuật. Chúng ta sẽ phân tích các công cụ nào phù hợp cho điều này.
Những gì thực sự hoạt động: proxy, VPN và các phương pháp vòng qua
Các nhà phát triển Iran sử dụng một số phương pháp. Mỗi phương pháp đều có ưu điểm và nhược điểm — chúng ta sẽ phân tích chúng một cách trung thực, không có tiếp thị.
1. Proxy cư trú
Proxy cư trú sử dụng các địa chỉ IP thực tế của người dùng tại nhà từ các quốc gia khác — Đức, Hà Lan, Mỹ, Thổ Nhĩ Kỳ. Về mặt GitHub, yêu cầu này trông giống như một yêu cầu từ một người dùng bình thường từ một quốc gia được phép. Đây là lựa chọn đáng tin cậy nhất cho công việc liên tục: rủi ro bị chặn proxy rất thấp, độ ổn định cao.
Nhược điểm — tốc độ thấp hơn so với proxy từ trung tâm dữ liệu, và chi phí cao hơn. Đối với các thao tác Git (push/pull/clone), điều này thường không nghiêm trọng: các kho lưu trữ chỉ nặng vài megabyte, không phải gigabyte.
2. Proxy từ trung tâm dữ liệu
Proxy từ trung tâm dữ liệu hoạt động nhanh hơn và có chi phí thấp hơn. Phù hợp cho việc sao chép các kho lưu trữ lớn, tải xuống các artefact, làm việc với API của GitHub. Tuy nhiên, IP từ trung tâm dữ liệu dễ bị xác định là proxy — một số dải IP đã được đưa vào danh sách đen của GitHub. Chúng tôi khuyên bạn nên sử dụng proxy từ trung tâm dữ liệu từ các vị trí châu Âu (DE, NL, FR) — chúng ít bị lọc hơn.
3. VPN
VPN là công cụ phổ biến nhất trong số người dùng Iran. Hoạt động ở cấp độ toàn bộ hệ điều hành, không yêu cầu cấu hình trong từng ứng dụng riêng biệt. Nhược điểm: nhiều máy chủ VPN đã bị GitHub chặn (đặc biệt là các máy chủ miễn phí phổ biến), tốc độ không ổn định, và khi kết nối bị ngắt, lưu lượng có thể bị rò rỉ qua IP Iran.
4. Tor
Tor về mặt kỹ thuật hoạt động, nhưng GitHub tích cực chặn các nút ra của Tor. Tốc độ cực kỳ thấp — việc sao chép ngay cả một kho lưu trữ nhỏ cũng có thể mất hàng giờ. Đối với việc truy cập tạm thời vào giao diện web thì có thể sử dụng, nhưng không phù hợp cho phát triển thường xuyên.
5. Tunnels SSH qua máy chủ ở nước khác
Nếu bạn có VPS ở châu Âu hoặc Mỹ, bạn có thể thiết lập proxy SOCKS5 qua tunnel SSH. Điều này về mặt kỹ thuật là đáng tin cậy và miễn phí (nếu có máy chủ), nhưng yêu cầu kiến thức cơ bản về Linux. Thêm thông tin về cấu hình — trong phần về Git.
Kết luận về các công cụ:
Đối với công việc hàng ngày với GitHub, sự kết hợp tối ưu là: proxy cư trú hoặc từ trung tâm dữ liệu + cấu hình trong Git ở cấp độ cấu hình. Điều này mang lại sự ổn định mà không ảnh hưởng đến toàn bộ lưu lượng của hệ thống.
Các loại proxy nào phù hợp cho GitHub: bảng so sánh
Chúng ta sẽ phân tích tất cả các tùy chọn trong một bảng, để dễ dàng chọn lựa theo tình huống của bạn:
| Loại | Tốc độ | Độ tin cậy | Rủi ro bị chặn bởi GitHub | Tốt nhất cho |
|---|---|---|---|---|
| Proxy cư trú | Trung bình | Cao | Tối thiểu | Công việc hàng ngày, push/pull, giao diện web |
| Proxy từ trung tâm dữ liệu | Cao | Trung bình | Trung bình | Sao chép các kho lớn, API GitHub, CI/CD |
| Proxy di động | Trung bình | Rất cao | Rất thấp | Làm việc với tài khoản, nếu nó đã bị nghi ngờ |
| VPN (trả phí) | Trung bình | Trung bình | Trung bình | Truy cập internet chung + GitHub |
| Tunnel SSH (VPS riêng) | Cao | Cao | Thấp | Các nhà phát triển có VPS ở châu Âu/Mỹ |
| Tor | Rất thấp | Thấp | Cao | Không khuyến nghị cho công việc với Git |
Nếu tài khoản của bạn đã nhận được cảnh báo hoặc đã bị tạm thời đóng băng, hãy xem xét proxy di động — chúng sử dụng IP từ các nhà mạng di động, mà GitHub hầu như không bao giờ chặn, vì một IP di động có hàng ngàn người dùng.
Cách cấu hình proxy trong Git, terminal và IDE: hướng dẫn từng bước
Lợi thế chính của việc cấu hình proxy trong Git (chứ không phải ở cấp độ hệ thống hoặc VPN) là bạn kiểm soát lưu lượng nào đi qua proxy. Các yêu cầu cục bộ vẫn giữ nguyên, chỉ có lưu lượng từ GitHub được định tuyến qua IP bên ngoài.
Cấu hình proxy HTTPS trong Git (toàn cầu)
Mở terminal và thực hiện các lệnh sau, thay thế HOST và PORT bằng thông tin proxy của bạn:
# Đối với proxy HTTP/HTTPS: git config --global http.proxy http://HOST:PORT # Đối với proxy SOCKS5 (được khuyến nghị): git config --global http.proxy socks5://HOST:PORT # Nếu proxy có xác thực (tên người dùng + mật khẩu): git config --global http.proxy socks5://USERNAME:PASSWORD@HOST:PORT # Áp dụng chỉ cho github.com (không ảnh hưởng đến các kho khác): git config --global http.https://github.com.proxy socks5://HOST:PORT
Lệnh cuối cùng — hữu ích nhất: nó áp dụng proxy chỉ cho các yêu cầu đến github.com, không ảnh hưởng đến GitLab, Bitbucket hoặc các kho nội bộ của công ty.
Kiểm tra cấu hình
# Xem các cấu hình proxy hiện tại trong Git: git config --global --list | grep proxy # Kiểm tra kết nối với GitHub qua proxy: git ls-remote https://github.com/github/gitignore HEAD
Nếu lệnh ls-remote trả về hash commit — proxy hoạt động. Nếu có lỗi Connection refused hoặc Could not resolve host — hãy kiểm tra lại HOST và PORT.
Tắt proxy (khi không cần thiết)
# Xóa proxy toàn cầu: git config --global --unset http.proxy # Xóa proxy chỉ cho github.com: git config --global --unset http.https://github.com.proxy
Cấu hình trong VS Code
VS Code sử dụng các cài đặt proxy hệ thống cho terminal tích hợp và các tiện ích mở rộng. Nếu bạn đã cấu hình proxy trong Git qua terminal, terminal tích hợp của VS Code sẽ tự động nhận các cài đặt này. Đối với proxy HTTP trong chính trình soạn thảo (ví dụ: để cài đặt tiện ích mở rộng), hãy mở:
File → Preferences → Settings → tìm kiếm "proxy" → chỉ định địa chỉ proxy trong trường http.proxy.
Cấu hình qua tunnel SSH (nếu có VPS riêng)
Nếu bạn có VPS ở châu Âu hoặc Mỹ, bạn có thể thiết lập một proxy SOCKS5 cục bộ qua SSH bằng một lệnh:
# Tạo proxy SOCKS5 trên cổng cục bộ 1080 qua SSH: ssh -D 1080 -C -N user@your-vps-ip # Sau đó trong Git chỉ định proxy cục bộ này: git config --global http.proxy socks5://127.0.0.1:1080
Cờ -D 1080 mở proxy SOCKS5 trên cổng 1080, -C bật nén, -N yêu cầu SSH không thực hiện lệnh — chỉ giữ tunnel.
SSH vs HTTPS: cái nào hoạt động tốt hơn qua proxy cho GitHub
Đây là một trong những câu hỏi thường gặp nhất: nên sử dụng giao thức nào để làm việc với GitHub qua proxy — SSH (cổng 22 hoặc 443) hay HTTPS (cổng 443)?
HTTPS qua proxy
Kết nối HTTPS dễ dàng được proxy — các lệnh git config http.proxy mà chúng ta đã phân tích ở trên hoạt động chính xác cho HTTPS. Nhược điểm: mỗi lần push/pull, Git yêu cầu tên đăng nhập và mật khẩu (hoặc Personal Access Token). Giải pháp — lưu token trong credential store:
# Bật lưu trữ token trong keychain hệ thống: git config --global credential.helper store # Sau lần push thành công đầu tiên, token sẽ tự động được lưu
SSH qua proxy (ProxyCommand)
Kết nối SSH không thể được proxy qua http.proxy tiêu chuẩn trong Git — cần có cấu hình riêng trong ~/.ssh/config. Thêm khối sau:
Host github.com
HostName ssh.github.com
User git
Port 443
ProxyCommand nc -X 5 -x HOST:PORT %h %p
Ở đây ssh.github.com:443 — là một điểm cuối SSH đặc biệt của GitHub, hoạt động trên cổng 443 (HTTPS), giúp vượt qua các chặn ở cổng 22. nc -X 5 sử dụng proxy SOCKS5.
Bạn có thể kiểm tra kết nối SSH bằng lệnh:
ssh -T [email protected] # Phản hồi mong đợi: Hi username! You've successfully authenticated...
Khuyến nghị:
Đối với hầu hết các nhà phát triển, việc thiết lập HTTPS + SOCKS5-proxy trong cấu hình Git là dễ dàng hơn. SSH qua ProxyCommand yêu cầu cài đặt tiện ích netcat và cấu hình phức tạp hơn một chút, nhưng mang lại sự tiện lợi khi làm việc với các khóa SSH mà không cần nhập token.
Rủi ro cho tài khoản và cách giảm thiểu chúng
Việc sử dụng proxy cho GitHub không chỉ là một nhiệm vụ kỹ thuật mà còn là một vấn đề an ninh cho tài khoản. Cấu hình sai có thể thu hút sự chú ý đến tài khoản hoặc tạo ra các vấn đề mới.
Rủi ro 1: Thay đổi IP liên tục
Nếu bạn sử dụng proxy xoay vòng (IP thay đổi với mỗi yêu cầu hoặc mỗi vài phút), GitHub có thể ghi nhận hoạt động đáng ngờ: một tài khoản truy cập từ hàng chục IP khác nhau trong thời gian ngắn. Đây là tín hiệu để kiểm tra an ninh và có thể dẫn đến việc chặn.
Giải pháp: Sử dụng proxy tĩnh (sticky) với IP cố định hoặc proxy phiên với thời gian phiên dài (từ 24 giờ). Đối với GitHub, không cần thay đổi — cần sự ổn định.
Rủi ro 2: Sử dụng IP bị chặn từ trung tâm dữ liệu
Một số dải IP của các dịch vụ lưu trữ phổ biến (AWS, DigitalOcean, Vultr) đã được đưa vào danh sách đen hoặc gây chú ý cao. GitHub không chặn chúng trực tiếp, nhưng có thể yêu cầu xác thực bổ sung.
Giải pháp: Chọn các trung tâm dữ liệu ở châu Âu (DE, NL, CH) — chúng ít bị đưa vào danh sách đen hơn. Trước khi sử dụng thường xuyên, hãy kiểm tra IP qua ipinfo.io hoặc scamalytics.com.
Rủi ro 3: Dữ liệu Iran trong hồ sơ
Nếu trong hồ sơ GitHub của bạn có chỉ định Iran (trong trường Location), tài khoản có khả năng cao hơn sẽ bị hạn chế bất kể IP. Điều này không có nghĩa là bạn cần phải che giấu nguồn gốc — nhưng cần hiểu rằng đây là một yếu tố bổ sung.
Rủi ro 4: Làm việc với các kho tổ chức
Nếu tổ chức của bạn trên GitHub được đăng ký là công ty Iran hoặc có các quản trị viên Iran, các hạn chế có thể nghiêm ngặt hơn — đến mức đóng băng toàn bộ tổ chức. Trong trường hợp này, proxy giúp cho tài khoản cá nhân, nhưng không giải quyết được vấn đề ở cấp độ tổ chức.
Cần làm gì nếu tài khoản đã bị đóng băng
GitHub cung cấp quy trình chính thức để gỡ bỏ đóng băng tài khoản cho các nhà phát triển cá nhân. Hãy viết email đến [email protected] với lời giải thích về tình huống. Trong email, hãy chỉ ra:
- Rằng bạn là một nhà phát triển cá nhân, không liên quan đến các tổ chức bị trừng phạt
- Rằng hoạt động của bạn là phát triển mã nguồn mở hoặc phát triển phần mềm thương mại
- Các liên kết đến các kho lưu trữ công khai của bạn và hoạt động của bạn
Theo kinh nghiệm của cộng đồng, GitHub khôi phục quyền truy cập cho hầu hết các nhà phát triển cá nhân trong vòng 1–4 tuần.
Danh sách kiểm tra: kiểm tra nhanh cấu hình proxy cho GitHub
Sử dụng danh sách kiểm tra này để đảm bảo rằng mọi thứ được cấu hình đúng trước khi bắt đầu làm việc:
✅ Trước khi cấu hình
- Nhận thông tin proxy: HOST, PORT, loại (HTTP/SOCKS5), tên đăng nhập/mật khẩu
- Kiểm tra IP proxy trên
ipinfo.io— quốc gia không được là Iran - Đảm bảo rằng IP không nằm trong danh sách đen: kiểm tra trên
scamalytics.com - Chọn IP tĩnh (không xoay vòng) cho công việc liên tục
✅ Cấu hình Git
- Đã thực hiện lệnh
git config --global http.proxy - Proxy đã được áp dụng chỉ cho github.com (không toàn cầu) — nếu cần cấu hình điểm
- Cấu hình credential.helper để lưu trữ token (đối với HTTPS)
- Đối với SSH: đã thêm khối vào
~/.ssh/configvới ProxyCommand
✅ Kiểm tra hoạt động
- Lệnh
git ls-remote https://github.com/github/gitignore HEADtrả về hash - Lệnh
ssh -T [email protected]trả về lời chào (đối với SSH) - Push vào kho thử nghiệm đã thành công
- Không có lỗi
403 ForbiddenhoặcRepository access blocked
✅ An ninh tài khoản
- Sử dụng IP tĩnh (không xoay vòng)
- Bật xác thực hai yếu tố cho tài khoản GitHub
- Personal Access Token được cấu hình với quyền tối thiểu cần thiết (chỉ repo)
- Token có thời hạn (không vô thời hạn)
Kết luận
Các hạn chế trừng phạt của GitHub là một thực tế khó chịu cho các nhà phát triển Iran, nhưng không phải là ngõ cụt. Giải pháp kỹ thuật tồn tại và hoạt động: proxy với IP nước ngoài kết hợp với cấu hình Git chính xác cho phép thực hiện phát triển đầy đủ — push các commit, sao chép các kho lưu trữ, làm việc với GitHub Actions và tham gia vào các dự án mã nguồn mở.
Các điểm chính từ bài viết:
- Đối với công việc hàng ngày hãy chọn proxy cư trú hoặc từ trung tâm dữ liệu tĩnh từ châu Âu — IP ổn định không xoay vòng.
- Cấu hình proxy trong cấu hình Git, không phải ở cấp độ hệ thống — điều này mang lại kiểm soát chính xác mà không ảnh hưởng đến toàn bộ lưu lượng.
- Nếu tài khoản đã bị nghi ngờ — hãy sử dụng IP di động, chúng hầu như không bao giờ bị chặn.
- Nếu tài khoản bị đóng băng — hãy viết email đến [email protected], GitHub khôi phục quyền truy cập cho các nhà phát triển cá nhân.
- Sử dụng SSH qua cổng 443 (ssh.github.com) — điều này vượt qua hầu hết các chặn ở cấp độ nhà cung cấp.
Nếu bạn đang tìm kiếm một giải pháp đáng tin cậy cho công việc liên tục với GitHub, chúng tôi khuyên bạn nên xem xét proxy cư trú — chúng sử dụng các IP thực tế của người dùng tại nhà từ các quốc gia được phép, thu hút sự chú ý tối thiểu từ các hệ thống bảo vệ và cung cấp kết nối ổn định cho các thao tác Git. Đối với các nhiệm vụ có tải cao (sao chép các kho lớn, pipeline CI/CD), một lựa chọn tốt sẽ là proxy từ trung tâm dữ liệu — chúng nhanh hơn và tiết kiệm hơn khi làm việc với khối lượng dữ liệu lớn.
```