Sửa lỗi "Could not resolve host: github.com" — Git Không Kết Nối Được Đến Remote Repository

beginner📦 Git2026-04-27| Linux, macOS, Windows — Git 2.x, mọi shell (bash, zsh, PowerShell, CMD)

Error Message

fatal: unable to access 'https://github.com/user/repo.git/': Could not resolve host: github.com
#git#mạng#dns#proxy#https#remote

Lỗi Gặp Phải

Bạn chạy git clone, git pull, hoặc git push và Git dừng đột ngột:

fatal: unable to access 'https://github.com/user/repo.git/': Could not resolve host: github.com

Git thậm chí không kết nối được đến remote. Không có lời nhắc xác thực, không có bắt tay giao thức — kết nối thất bại ngay ở bước tra cứu DNS. Đây là vấn đề ở tầng mạng, không phải lỗi của Git.

Chẩn Đoán Trước

Đừng vội điều chỉnh cài đặt mà không có cơ sở. Hãy chạy hai bước kiểm tra này trước:

# Máy của bạn có phân giải được github.com không?
ping github.com

# Hoặc dùng dig/nslookup để kiểm tra DNS sạch hơn
dig github.com
nslookup github.com

ping trả về unknown host hoặc nslookup không có kết quả? DNS đang bị lỗi — chuyển sang Cách 1. Ping hoạt động nhưng Git vẫn thất bại? Proxy gần như chắc chắn là thủ phạm — chuyển sang Cách 2.

# Kiểm tra xem Git có được cấu hình proxy không
git config --global http.proxy
git config --global https.proxy

Cách 1 — DNS Bị Lỗi (Phổ Biến Nhất)

Máy của bạn không thể chuyển đổi github.com thành địa chỉ IP. Chuyển sang dùng DNS resolver công cộng thường giải quyết được trong chưa đầy một phút.

Linux / macOS

# Chỉnh sửa /etc/resolv.conf và thêm nameserver đang hoạt động
sudo nano /etc/resolv.conf

# Thêm một trong các dòng sau lên đầu file:
nameserver 8.8.8.8
nameserver 1.1.1.1

Trên các hệ thống dùng systemd-resolved (Ubuntu 18.04+, Fedora, v.v.), các thay đổi trong resolv.conf sẽ không tồn tại sau khi khởi động lại. Dùng resolvectl thay thế:

sudo resolvectl dns eth0 8.8.8.8 1.1.1.1

Windows

# Trong PowerShell (chạy với quyền Administrator)
Set-DnsClientServerAddress -InterfaceAlias "Ethernet" -ServerAddresses 8.8.8.8,1.1.1.1

Thích dùng giao diện đồ họa? Vào Cài đặt Mạng → Thay đổi tùy chọn bộ điều hợp → Thuộc tính IPv4 và đặt DNS server thành 8.8.8.8.

Kiểm Tra

ping github.com
# Kết quả mong đợi: 64 bytes from 20.205.243.166 (hoặc IP tương tự)

Cách 2 — Proxy của Git Sai hoặc Đã Cũ

Mới đổi mạng gần đây — VPN bật/tắt, từ văn phòng về nhà, Wi-Fi khách sạn? Git giữ nguyên cấu hình proxy vô thời hạn. Nó sẽ tiếp tục định tuyến qua một proxy không còn tồn tại cho đến khi bạn xóa thủ công.

# Xóa cài đặt proxy
git config --global --unset http.proxy
git config --global --unset https.proxy

# Xác nhận đã xóa
git config --global --list | grep proxy

Trên mạng công ty thực sự yêu cầu proxy, hãy cấu hình đúng cách:

git config --global http.proxy http://proxy.company.com:8080
git config --global https.proxy http://proxy.company.com:8080

Chỉ muốn áp dụng cho một repo mà không ảnh hưởng cấu hình toàn cục?

git config http.proxy http://proxy.company.com:8080

Cách 3 — Tường Lửa Chặn Cổng 443

Kiểm tra xem cổng 443 có thực sự truy cập được không:

# Linux/macOS
curl -v https://github.com

# Windows
Test-NetConnection -ComputerName github.com -Port 443

Kết nối bị timeout? Tường lửa hoặc thiết bị bảo mật đang chặn lưu lượng HTTPS. Có ba cách xử lý:

  • Yêu cầu quản trị mạng cho phép github.com trên cổng 443
  • Kết nối sang mạng khác (điểm phát sóng di động rất hữu ích để kiểm tra nhanh)
  • Chuyển sang SSH — xem Cách 5

Cách 4 — Dòng Sai Trong /etc/hosts

Một dòng sai trong /etc/hosts có thể ghi đè DNS hoàn toàn, trỏ github.com về 0.0.0.0 hoặc một IP nội bộ cũ. Dễ kiểm tra:

grep -i github /etc/hosts

Xóa bất kỳ dòng nào chuyển hướng github.com về địa chỉ cục bộ hoặc không hợp lệ. File này có thể bị chỉnh sửa bởi GitHub Desktop và một số VPN client — hãy xem xét kỹ trước khi xóa bất cứ thứ gì.

Cách 5 — Chuyển Sang SSH Thay Vì HTTPS

HTTPS liên tục bị proxy hoặc tường lửa chặn? SSH thường né được vấn đề này hoàn toàn. Cổng 22 và cổng 443 được lọc độc lập — một cổng bị chặn không có nghĩa là cổng kia cũng vậy.

# Đổi URL remote từ HTTPS sang SSH
git remote set-url origin git@github.com:user/repo.git

# Kiểm tra
git remote -v

Bạn cần có SSH key được liên kết với tài khoản GitHub. Tạo một key nếu chưa có:

ssh-keygen -t ed25519 -C "your@email.com"
cat ~/.ssh/id_ed25519.pub  # Sao chép nội dung này vào GitHub → Settings → SSH Keys

# Kiểm tra kết nối
ssh -T git@github.com
# Kết quả mong đợi: Hi username! You've successfully authenticated...

Cách 6 — VPN Làm Hỏng DNS Công Cộng

VPN công ty là thủ phạm thường gặp. Nhiều VPN được cấu hình để chỉ định tuyến lưu lượng nội bộ qua tunnel trong khi để phân giải DNS công cộng bị hỏng với các site bên ngoài như github.com.

Kiểm tra nhanh: ngắt kết nối VPN và thử lại Git. Hoạt động ngay? Cấu hình VPN là vấn đề. Một số lựa chọn:

  • Hỏi bộ phận IT xem split-tunnel đã được cấu hình đúng cho github.com chưa
  • Thêm dòng tĩnh vào /etc/hosts với IP hiện tại của GitHub — lấy bằng lệnh dig github.com từ một máy đang hoạt động
  • Chuyển sang SSH (Cách 5), đôi khi định tuyến khác qua VPN tunnel

Xác Nhận Đã Sửa Được

# Kiểm tra remote nhẹ — không cần clone
git ls-remote https://github.com/user/repo.git

# Hoặc clone một repo public nhỏ để kiểm tra thực tế
git clone https://github.com/github/gitignore.git /tmp/test-clone

# Dọn dẹp sau khi xong
rm -rf /tmp/test-clone

git ls-remote in ra các refs nghĩa là kết nối đang hoạt động hoàn toàn.

Mẹo Thêm

Đang gỡ lỗi trong môi trường có subnetting phức tạp hoặc VPN? Sẽ rất hữu ích khi biết các dải IP nào đang được sử dụng. Tôi dùng Subnet Calculator trên ToolCraft để kiểm tra các dải CIDR và xác minh xem các khối IP của GitHub (140.82.112.0/20 và các khối khác) có nằm trong subnet bị hạn chế không. Chạy hoàn toàn trên trình duyệt, không gửi dữ liệu đi đâu cả.

Một cách khắc phục lâu dài đáng thực hiện: đặt DNS thành 8.8.8.8 hoặc 1.1.1.1 ở cấp độ router thay vì từng máy riêng lẻ. Mọi thiết bị trong mạng đều được hưởng lợi, và bạn sẽ không phải xử lý lại vấn đề này sau mỗi lần cài lại hệ điều hành hay thiết lập máy dev mới.

Related Error Notes