Bypass CG-NAT cho HomeLab

Hướng dẫn chi tiết dùng WireGuard và VPS Linux

Bypass CG-NAT cho HomeLab
Photo by Hugues de BUYER-MIMEURE / Unsplash

Giới thiệu:

CG-NAT (Carrier-grade NAT) là "nỗi đau" của không ít anh em Homelab đến thời điểm hiện tại khi muốn truy cập server từ xa. Thay vì thuê IP tĩnh chúng ta sẽ tự xây một "đường hầm" bằng WireGuard nối từ Home Server lên một con VPS có IP Public (như Oracle Cloud, DigitalOcean...). Các hướng dẫn theo cách này hiện tại có rất nhiều trên các diễn đàn nước ngoài hay một số anh em ở Việt Nam cũng có chia sẻ. Nay mình chia sẻ lại steps-by-steps cho anh em mới tìm hiểu như mình thực hiện.

Mô hình kết nối:

  • Server (VPS): Đóng vai trò làm "trạm trung chuyển" hứng traffic có IP Public.
  • Client (Home Server): Nằm sau lớp CG-NAT, chủ động kết nối lên VPS.

Sơ đồ hoạt động (The Architecture).

  • Home Server (Private IP) <—> Tunnel (Wireguard) <—> VPS Linux (Public IP) <—> Internet.

Bước 1: Cài đặt WireGuard trên cả VPS và Home Server.

Cả hai máy (Ubuntu/Debian) đều cần cài đặt WireGuard.

sudo apt update && sudo apt install wireguard -y

Lệnh cài đặt wireguard.

Bước 2: Tạo Key (Chìa khóa bảo mật).

WireGuard dùng cơ chế Public/Private Key. Chạy lệnh sau trên cả hai máy:

# Tạo cặp key và phân quyền
umask 077
wg genkey | tee privatekey | wg pubkey > publickey

Lưu ý: Giữ lại nội dung file privatekeypublickey của từng máy để cấu hình ở bước sau.


Bước 3: Cấu hình VPS (Server - Trạm trung chuyển).

Tạo file cấu hình tại /etc/wireguard/wg0.conf:

sudo nano /etc/wireguard/wg0.conf

Dùng nano để sửa file wg0.conf trên VPS

Dán nội dung sau vào:

[Interface]
PrivateKey = <Private_Key_Của_VPS>
Address = 10.8.0.1/24
ListenPort = 51820

# Cấu hình IP Forwarding (Cho phép trung chuyển gói tin)
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A 
# Card eth0 là card mạng thường có dạng eth0,enp0s.. gõ (ip a) để xem.
POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
PublicKey = <Public_Key_Của_Home_Server>
AllowedIPs = 10.8.0.2/32

CHÚ Ý : Nhớ mở port 51820/UDP trên Rules của VPS để WireGuard thấy được nhau.

Bước 4: Cấu hình Home Server (Client - Home Server).

Tạo file cấu hình tương tự tại /etc/wireguard/wg0.conf:

sudo nano /etc/wireguard/wg0.conf

Dùng nano để sửa file wg0.conf trên Home

Dán nội dung sau:

[Interface]
PrivateKey = <Private_Key_Của_Home_Server>
Address = 10.8.0.2/24
DNS = 1.1.1.1
MTU = 1280

[Peer]
PublicKey = <Public_Key_Của_VPS>
Endpoint = <IP_PUBLIC_CỦA_VPS>:51820
AllowedIPs = 10.8.0.0/24
PersistentKeepalive = 25

Dòng PersistentKeepalive = 25 là "linh hồn" để đục thủng CG-NAT, giúp kết nối luôn duy trì.

Khi cấu hình WireGuard để bypass CG-NAT, đừng bao giờ quên thông số MTU. Việc hạ MTU (Maximum Transmission Unit) xuống 1280 giúp gói tin không bị xé nhỏ khi đi qua các router của nhà mạng (ISP). Bạn có thể tăng hoặc hạ tuỳ theo đường truyền phổ biến là : 1280, 1380,1480.

Bước 5: Kích hoạt đường hầm.

Chạy lệnh này trên cả hai máy, ưu tiên chạy trên VPS trước:

# Kích hoạt interface wg0
sudo wg-quick up wg0

# Cho phép tự khởi động cùng hệ thống
sudo systemctl enable wg-quick@wg0

Bước 6: Kiểm tra và Hưởng thụ.

Đây là bước quan trọng nhất để biết mình đã "bơi" đúng hướng chưa:

  • Kiểm tra trạng thái:sudo wg show. Nếu thấy có dòng latest handshake kèm theo dung lượng dữ liệu trao đổi là đã thông.
  • Ping thử: Từ Home Server, gõ ping 10.0.0.1. Nếu phản hồi mượt mà thì chúc mừng, bạn đã thoát khỏi CG-NAT.
  • Giám sát thực tế: Có thể dùng btop. Mở btop, nhìn vào phần Network, bạn sẽ thấy traffic của interface wg0 đang nhảy múa.

Lời kết.

Việc bypass CG-NAT không chỉ là để mở port, mà là để chúng ta giành lại quyền kiểm soát thiết bị của chính mình. Với WireGuard, HomeLab của bạn bây giờ đã có mặt trên bản đồ Internet thế giới.