Cấu hình IPv6 cho VPS: địa chỉ tĩnh, firewall và dual-stack

Nhà cung cấp cấp cho bạn một địa chỉ IPv6, bạn khai báo vào file cấu hình mạng, tưởng chừng xong. Nhưng service không lên, ping không ra, hoặc IPv6 hoạt động mà IPv4 chết. Đó là vì IPv6 có cách vận hành riêng: firewall tách biệt hoàn toàn với IPv4, router advertisement thay cho DHCP, và máy có thể có nhiều địa chỉ cùng lúc theo cơ chế SLAAC. Bài này hướng dẫn cấu hình IPv6 tĩnh cho VPS Linux (Ubuntu 24.04 LTS dùng Netplan, AlmaLinux 9 dùng NetworkManager), mở firewall đúng cách cho giao thức mới, và vận hành dual-stack để cả IPv4 lẫn IPv6 chạy song song ổn định.
Tóm tắt nhanh
- Kiểm tra VPS có IPv6 hay không bằng lệnh
ip -6 addr show; nếu không có, liên hệ nhà cung cấp yêu cầu cấp. - Trên Ubuntu 24.04, cấu hình IPv6 tĩnh trong file Netplan
/etc/netplan/với khốiaccept-ra: falsekhi bạn tự đặt địa chỉ. - Firewall cần cấu hình riêng cho IPv6: UFW mặc định chặn, vì vậy phải mở port 80/443 cho cả hai giao thức, hoặc dùng
ip6tables. - Dual-stack nghĩa là bật cả IPv4 và IPv6 trên cùng một giao diện; kiểm tra bằng
sysctl net.ipv6.conf.all.disable_ipv6phải trả về 0.
Yêu cầu trước khi bắt đầu
- Một VPS chạy Ubuntu 24.04 LTS hoặc AlmaLinux 9, quyền root hoặc user sudo.
- Nhà cung cấp cấp IPv6: kiểm tra xem gói VPS của bạn có bao gồm IPv6 hay không. Một số gói VPS giá rẻ chỉ cấp IPv4, bạn cần yêu cầu thêm.
- Địa chỉ IPv6 tĩnh, prefix length (thường là /64 hoặc /128), và gateway IPv6 do nhà cung cấp cung cấp (thường có dạng
fe80::1hoặc một địa chỉ toàn cầu). - Kiến thức cơ bản về SSH và sửa file cấu hình bằng
nanohoặcvim.
Vì sao cần cấu hình IPv6 cho VPS của bạn?
Số lượng thiết bị kết nối Internet tiếp tục tăng, và các nhà mạng lớn tại Việt Nam đã triển khai IPv6 cho khách hàng băng rộng và di động từ nhiều năm nay. Khi VPS của bạn chỉ có IPv4, người dùng truy cập từ mạng IPv6 thuần (IPv6-only) sẽ phải đi qua cơ chế dịch NAT64, làm tăng độ trễ và có thể gặp lỗi kết nối. Bật IPv6 giúp VPS của bạn sẵn sàng cho lưu lượng truy cập trực tiếp từ người dùng IPv6.
Ngoài ra, một số dịch vụ và API hiện đại yêu cầu hoặc ưu tiên kết nối IPv6. Chuẩn bị sẵn hạ tầng dual-stack giúp bạn không phải đau đầu khi cần triển khai sau này. Việc cấu hình không quá phức tạp, nhưng nếu làm sai sẽ khiến mất kết nối mạng, thậm chí không SSH vào được để sửa lại.
Bước 1 - Kiểm tra trạng thái IPv6 hiện tại
Trước khi cấu hình, kiểm tra xem kernel có bật IPv6 hay không và giao diện mạng có nhận được địa chỉ IPv6 nào chưa:
ip -6 addr show
sysctl net.ipv6.conf.all.disable_ipv6
Lệnh ip -6 addr show liệt kê tất cả địa chỉ IPv6 trên các giao diện. Nếu output trống hoặc chỉ thấy lo, VPS của bạn chưa có IPv6. Lệnh sysctl kiểm tra xem IPv6 có bị tắt ở cấp kernel không. Giá trị trả về 0 nghĩa là IPv6 được bật.
Kiểm tra xem giao diện có nhận được router advertisement (RA) từ gateway không:
ip -6 route show
Output có dạng default via fe80::1 dev eth0 cho thấy VPS đã nhận default route qua SLAAC. Nếu không có dòng default, bạn phải khai báo gateway bằng tay.
Lưu ý: nếu lệnh sysctl trả về 1, IPv6 đã bị tắt trong kernel. Bạn cần bật lại bằng cách sửa file /etc/sysctl.conf hoặc file trong /etc/sysctl.d/, sau đó chạy sysctl -p.
Bước 2 - Cấu hình IPv6 tĩnh trên Ubuntu 24.04 với Netplan
Ubuntu 24.04 dùng Netplan để quản lý cấu hình mạng. File cấu hình nằm trong thư mục /etc/netplan/, thường có tên 50-cloud-init.yaml hoặc 01-netcfg.yaml. Mở file bằng trình soạn thảo:
sudo nano /etc/netplan/50-cloud-init.yaml
Tìm giao diện mạng chính (thường là eth0 hoặc ens3) và thêm khối ipv6. Nếu bạn đã có địa chỉ IPv4 tĩnh, file sẽ có dạng như sau:
network:
version: 2
ethernets:
eth0:
dhcp4: true
dhcp6: false
accept-ra: false
addresses:
- 2a01:4f8:xxxx:yyyy::2/64
routes:
- to: default
via: fe80::1
nameservers:
addresses:
- 2001:4860:4860::8888
- 2001:4860:4860::8844
- 8.8.8.8
Giải thích từng dòng:
dhcp4: truegiữ nguyên nếu bạn dùng DHCP cho IPv4, hoặc thay bằngdhcp4: falsenếu IPv4 tĩnh.dhcp6: falsetắt DHCPv6 vì bạn đặt địa chỉ tĩnh.accept-ra: falsengăn kernel tự động nhận địa chỉ từ router advertisement, tránh xung đột với địa chỉ tĩnh bạn khai báo.addresseslà địa chỉ IPv6 và prefix length do nhà cung cấp cấp.routeskhai báo default gateway. Trên hầu hết VPS, gateway IPv6 là địa chỉ link-localfe80::1.nameserversđặt DNS cho IPv6. DNS của Google là lựa chọn phổ biến, hoặc bạn có thể dùng DNS của nhà cung cấp.
Áp dụng cấu hình bằng lệnh:
sudo netplan apply
Kiểm tra kết quả:
ip -6 addr show eth0
ping6 -c 4 2001:4860:4860::8888
Địa chỉ IPv6 phải xuất hiện trên giao diện, và lệnh ping tới Google DNS phải trả về 0% packet loss. Nếu ping không được, kiểm tra lại gateway và liên hệ nhà cung cấp để xác nhận địa chỉ chính xác.
Bước 3 - Cấu hình IPv6 tĩnh trên AlmaLinux 9 với nmcli
AlmaLinux 9 dùng NetworkManager. Cách nhanh nhất là dùng lệnh nmcli. Trước tiên, xem tên kết nối đang hoạt động:
nmcli con show
Giả sử tên kết nối là eth0, cấu hình IPv6 tĩnh như sau:
sudo nmcli con mod eth0 ipv6.method manual \
ipv6.addresses "2a01:4f8:xxxx:yyyy::2/64" \
ipv6.gateway "fe80::1" \
ipv6.dns "2001:4860:4860::8888,2001:4860:4860::8844" \
ipv6.ignore-auto-dns yes
Kích hoạt lại kết nối:
sudo nmcli con up eth0
Giải thích: ipv6.method manual chuyển từ SLAAC sang địa chỉ tĩnh. ipv6.ignore-auto-dns yes bỏ qua DNS tự động nhận từ router, dùng DNS bạn khai báo.
Kiểm tra bằng lệnh:
ip -6 addr show eth0
ip -6 route show
ping6 -c 4 2001:4860:4860::8888
Nếu NetworkManager không quản lý giao diện (trường hợp dùng network-scripts cũ), bạn phải sửa file trong /etc/NetworkManager/system-connections/ hoặc dùng nmcli như trên. Hiện tại AlmaLinux 9 không còn hỗ trợ network-scripts thuần, nên ưu tiên dùng NetworkManager.
Bước 4 - Cấu hình firewall cho IPv6
Đây là bước dễ gây mất kết nối nhất. Firewall trên Linux xử lý IPv4 và IPv6 tách biệt. Trên Ubuntu, ufw quản lý cả hai giao thức nếu bạn cấu hình đúng. Kiểm tra trạng thái:
sudo ufw status verbose
Nếu output có dòng Status: active, UFW đang chặn cả IPv6. Bạn phải mở các port cần thiết cho IPv6, tương tự như IPv4:
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
Lệnh trên áp dụng cho cả IPv4 và IPv6 vì UFW tạo rule cho cả hai bảng iptables và ip6tables. Kiểm tra rules IPv6 cụ thể:
sudo ip6tables -L -n -v | head -20
Nếu bạn dùng firewalld trên AlmaLinux, mở port cho IPv6 cũng tương tự:
sudo firewall-cmd --permanent --add-service={http,https,ssh}
sudo firewall-cmd --reload
Firewalld áp dụng rule cho cả IPv4 và IPv6 trong cùng zone, nên không cần làm riêng. Kiểm tra bằng lệnh:
sudo firewall-cmd --list-all
Cảnh báo: nếu bạn tự cấu hình iptables hoặc nftables bằng tay, hãy nhớ rằng rule IPv4 không áp dụng cho IPv6. Một bảng rule IPv4 chỉ chặn IPv4, còn IPv6 đi qua nếu không có rule nào trong bảng ip6tables hoặc nftables family ipv6. Điều này nghĩa là dịch vụ của bạn có thể bị lộ qua IPv6 dù đã khóa chặt IPv4.
Bước 5 - Kiểm tra dual-stack và xử lý sự cố thường gặp
Sau khi cấu hình xong, xác nhận VPS chạy dual-stack đúng nghĩa, cả hai giao thức hoạt động song song:
ip -4 addr show eth0
ip -6 addr show eth0
curl -6 -I https://google.com
curl -4 -I https://google.com
Lệnh curl -6 ép dùng IPv6, curl -4 ép dùng IPv4. Cả hai phải trả về mã HTTP bình thường của website.
Một số lỗi thường gặp khi cấu hình IPv6:
- Lỗi "RTNETLINK answers: File exists": xảy ra khi kernel đã tự nhận địa chỉ qua SLAAC trước khi bạn đặt tĩnh. Giải pháp: tắt
accept-ratrong Netplan, hoặc tắt SLAAC bằng lệnhsudo sysctl -w net.ipv6.conf.eth0.accept_ra=0. Trên AlmaLinux, dùngnmcli con mod eth0 ipv6.addr-gen-mode stable-privacyđể tránh xung đột. - Ping6 ra ngoài được nhưng không vào được: firewall chặn inbound IPv6. Kiểm tra bằng
sudo ip6tables -L -ntrên Ubuntu hoặcsudo firewall-cmd --list-alltrên AlmaLinux. Mở port cần thiết. - Mất kết nối SSH sau khi áp dụng cấu hình: bạn đặt sai gateway hoặc sai địa chỉ. Kết nối lại bằng IPv4 qua console của nhà cung cấp (thường có sẵn từ control panel), sửa lại file cấu hình, rồi áp dụng lại. Với Netplan, luôn có file backup ở
/etc/netplan/, khôi phục bằng cách revert file cũ. - IPv6 hoạt động trên VPS nhưng website không truy cập được qua IPv6: DNS chưa có record AAAA. Bạn phải thêm record AAAA trỏ tới địa chỉ IPv6 của VPS tại nhà cung cấp tên miền. Kiểm tra bằng
dig AAAA example.com.
Khi gặp lỗi, bước đầu tiên luôn là kiểm tra log hệ thống:
journalctl -u systemd-networkd -n 50
dmesg | grep -i ipv6 | tail -20
Output của journalctl cho biết NetworkManager hoặc systemd-networkd gặp lỗi gì khi áp dụng cấu hình. dmesg hiển thị các thông báo từ kernel liên quan tới IPv6, giúp phát hiện xung đột địa chỉ hoặc lỗi giao diện.
Câu hỏi thường gặp
Nhà cung cấp không cấp IPv6, tôi có tự tạo được không?
Không. Địa chỉ IPv6 toàn cầu phải do nhà cung cấp hạ tầng cấp. Bạn có thể dùng tunnel như Hurricane Electric hoặc giao thức 6to4, nhưng cách này không ổn định và bị nhiều nhà mạng chặn. Nếu cần IPv6, hãy chọn gói VPS Linux có hỗ trợ IPv6 hoặc liên hệ bộ phận kỹ thuật của nhà cung cấp.
Khi cấu hình IPv6 tĩnh, tôi có cần tắt SLAAC không?
Nếu bạn đặt địa chỉ tĩnh và không tắt SLAAC, kernel có thể tự nhận thêm một địa chỉ nữa từ router advertisement, dẫn tới hai địa chỉ trên cùng một giao diện. Điều này không gây lỗi nghiêm trọng, nhưng có thể khiến kết nối ra ngoài dùng sai địa chỉ. Cách chuẩn là tắt accept-ra khi dùng địa chỉ tĩnh.
Tôi nên dùng /64 hay /128 cho prefix length của VPS?
Tùy thuộc nhà cung cấp. Hầu hết VPS được cấp một địa chỉ /128 hoặc một block /64. Nếu chỉ có một địa chỉ, dùng /128. Nếu cấp cả block /64, bạn có thể dùng cho nhiều container hoặc VM. Hãy hỏi nhà cung cấp để biết chính xác prefix được cấp.
Website có cần record AAAA để hoạt động qua IPv6 không?
Có. Nếu VPS đã có IPv6 nhưng tên miền chỉ trỏ record A (IPv4), người dùng truy cập qua IPv6 sẽ không tìm thấy website. Thêm record AAAA trỏ tới địa chỉ IPv6 của VPS tại nhà cung cấp DNS. Bạn cũng có thể cấu hình máy chủ riêng hoặc VPS làm DNS server để quản lý record này.
Bật IPv6 có ảnh hưởng tới hiệu năng VPS không?
Ảnh hưởng không đáng kể. Kernel xử lý IPv6 cùng cơ chế với IPv4, tài nguyên tiêu tốn thêm rất nhỏ. Trong hầu hết trường hợp, bạn không nhận thấy sự khác biệt. Lợi ích từ việc có thêm đường kết nối trực tiếp cho người dùng IPv6 lớn hơn nhiều so với chi phí tài nguyên.
Bài viết liên quan
- Cấu hình iptables cơ bản cho VPS Ubuntu 24.04
- Hướng dẫn cấu hình UFW firewall cơ bản trên Ubuntu VPS
- Cấu hình Nginx reverse proxy và SSL Let's Encrypt cho n8n
- Cách cấu hình DNS record A, CNAME, MX, TXT cho tên miền


