IPv6 ngày càng xuất hiện phổ biến trên VPS và giúp server có khả năng kết nối trực tiếp trong không gian địa chỉ mới, nhưng cấu hình sai route hoặc firewall có thể khiến bạn mất SSH hoặc vô tình public dịch vụ qua IPv6 dù IPv4 đã được khóa. Bài viết này hướng dẫn kiểm tra IPv6 hiện tại, cấu hình dual-stack bằng Netplan, dùng `netplan try` để giảm rủi ro lockout, thêm DNS AAAA, kiểm tra Nginx/UFW và xác minh kết nối đầu cuối.
Nhiều VPS hiện được cấp cả IPv4 và IPv6. Việc bật IPv6 có thể giúp website và dịch vụ hỗ trợ dual-stack, nhưng cũng tạo thêm một bề mặt mạng mà bạn cần quản lý đúng.
Sai lầm phổ biến là chỉ kiểm tra firewall IPv4 rồi cho rằng server đã an toàn. Nếu service đang listen trên :: và firewall IPv6 không được kiểm soát, dịch vụ vẫn có thể truy cập từ Internet qua IPv6.
Bài viết này hướng dẫn một quy trình an toàn:
- kiểm tra VPS đã có IPv6 hay chưa;
- xác nhận prefix và gateway từ nhà cung cấp;
- cấu hình Netplan dual-stack;
- dùng
netplan tryđể tránh tự khóa SSH; - kiểm tra route, DNS và firewall;
- thêm DNS AAAA cho website;
- kiểm tra ứng dụng có thật sự listen IPv6 hay không.
Quan trọng: thông số IPv6, prefix và gateway ở mỗi nhà cung cấp có thể khác nhau. Không copy nguyên địa chỉ ví dụ trong bài. Hãy dùng đúng thông tin được cấp cho VPS của bạn.
IPv6 khác IPv4 ở điểm nào trong vận hành VPS?
IPv6 dùng không gian địa chỉ 128-bit thay vì 32-bit như IPv4 và thường được viết dạng:
2001:db8:1234:5678::10
Trên VPS, điều bạn cần quan tâm nhất không phải lý thuyết địa chỉ mà là:
- địa chỉ IPv6 của interface;
- prefix, ví dụ
/64; - default route/gateway;
- DNS resolver;
- firewall IPv6;
- service bind IPv6;
- DNS AAAA record.
Dual-stack nghĩa là server có thể dùng cả IPv4 và IPv6 cùng lúc.
Kiểm tra VPS đã có IPv6 chưa
Xem địa chỉ:
ip -6 addr show
Xem route IPv6:
ip -6 route
Hoặc xem cả trạng thái Netplan:
sudo netplan status --all
Nếu interface đã có địa chỉ scope global, VPS có thể đã nhận IPv6 tự động.
Test outbound IPv6:
ping -6 -c 4 2606:4700:4700::1111
Hoặc:
curl -6 https://ifconfig.co
Nếu không có route IPv6, curl -6 sẽ thất bại dù interface có link-local address fe80::/10.
Phân biệt global IPv6 và link-local
Bạn thường sẽ thấy địa chỉ dạng:
fe80::...
Đó là IPv6 link-local, chỉ dùng trong local link và không phải địa chỉ public để trỏ DNS website.
Địa chỉ global thường nằm ngoài fe80::/10 và do nhà cung cấp cấp/routing cho VPS.
Đừng lấy địa chỉ link-local để tạo AAAA record.
Xem interface name chính xác
Chạy:
ip link
Tên interface có thể là:
eth0;ens3;ens18;enp1s0.
Dùng đúng tên đang tồn tại trong Netplan.
Xem cấu hình hiện tại:
sudo netplan get
Và file:
ls -la /etc/netplan/
Không tạo file mới chồng chéo nếu cloud-init hoặc nhà cung cấp đã quản lý file hiện tại mà bạn chưa hiểu thứ tự merge.
Sao lưu trước khi chỉnh mạng
Ví dụ:
sudo cp -a /etc/netplan /root/netplan-backup
Giữ phiên SSH hiện tại đang mở.
Nếu nhà cung cấp có console/KVM/VNC/rescue mode, hãy xác nhận bạn có thể dùng trước khi chỉnh network production.
Ví dụ dual-stack IPv4 + IPv6 tĩnh
Giả sử nhà cung cấp cấp:
IPv4: 192.0.2.10/24
IPv4 gateway: 192.0.2.1
IPv6: 2001:db8:100::10/64
IPv6 gateway: 2001:db8:100::1
Đây là địa chỉ tài liệu minh họa, không dùng thật.
Một cấu hình Netplan có thể là:
network:
version: 2
renderer: networkd
ethernets:
ens3:
dhcp4: false
dhcp6: false
addresses:
- 192.0.2.10/24
- 2001:db8:100::10/64
routes:
- to: default
via: 192.0.2.1
- to: default
via: 2001:db8:100::1
nameservers:
addresses:
- 1.1.1.1
- 2606:4700:4700::1111
Netplan hỗ trợ cả IPv4 và IPv6 trong addresses, routes và nameservers.
Tài liệu Netplan hiện khuyến nghị dùng routes cho default gateway thay vì các key gateway4/gateway6 cũ đã được đánh dấu deprecated.
Nếu gateway IPv6 nằm ngoài prefix thì sao?
Một số nhà cung cấp dùng gateway kiểu link-local hoặc gateway không nằm trực tiếp trong prefix của địa chỉ VPS.
Khi đó có thể cần:
routes:
- to: default
via: 2001:db8::1
on-link: true
Nhưng chỉ dùng on-link: true khi tài liệu của nhà cung cấp yêu cầu.
Cấu hình sai gateway là một trong những nguyên nhân phổ biến nhất khiến IPv6 không route được.
DHCPv6 và SLAAC
Không phải VPS nào cũng dùng IPv6 static.
Một số môi trường có thể dùng:
dhcp6: true
hoặc Router Advertisement/SLAAC.
Netplan có các tùy chọn như accept-ra, ipv6-address-generation và các setting liên quan.
Nếu nhà cung cấp nói IPv6 được cấp tự động, đừng tự chuyển sang static chỉ vì muốn “cố định” địa chỉ mà chưa hiểu cơ chế cấp phát.
Validate YAML trước
Chạy:
sudo netplan generate
Nếu YAML sai indent hoặc key không hợp lệ, Netplan sẽ báo lỗi.
Nhưng generate chỉ kiểm tra/render config; nó không chứng minh gateway thật sự reachable.
Dùng netplan try thay vì apply ngay
Trên VPS remote, đây là bước rất quan trọng:
sudo netplan try
Netplan sẽ áp cấu hình tạm thời và chờ xác nhận. Nếu bạn không xác nhận trong timeout, nó cố rollback cấu hình cũ.
Tài liệu Netplan mô tả netplan try đặc biệt hữu ích trên remote system để giảm nguy cơ administrator bị lockout vì network config sai.
Mặc định timeout thường là 120 giây; có thể thay đổi:
sudo netplan try --timeout 180
Sau khi chạy, mở một terminal khác và thử SSH lại trước khi xác nhận.
Netplan Docs cũng lưu ý vẫn nên kiểm tra thực tế cấu hình đã rollback đúng nếu
trytimeout/cancel. Vì vậy console dự phòng vẫn rất quan trọng.
Kiểm tra route sau khi áp dụng
ip -4 route
ip -6 route
Bạn nên có default route cho cả hai family nếu đang chạy dual-stack.
Test:
ping -4 -c 3 1.1.1.1
ping -6 -c 3 2606:4700:4700::1111
Sau đó test DNS:
getent ahosts cloudflare.com
Và HTTPS:
curl -4 https://example.com
curl -6 https://example.com
Kiểm tra service đang listen IPv6 không
Chạy:
sudo ss -tulnp
Bạn có thể thấy:
0.0.0.0:80
[::]:80
[::]:80 nghĩa service đang listen IPv6 trên port 80.
Không nên mặc định rằng cấu hình IPv4 firewall sẽ tự bảo vệ mọi listener IPv6.
UFW và IPv6
Ubuntu Server Docs cho biết UFW có thể quản lý firewall host cho cả IPv4 và IPv6.
Kiểm tra:
sudo ufw status verbose
Nếu UFW đang dùng, xem file:
sudo grep '^IPV6=' /etc/default/ufw
Trong cấu hình thông thường bạn muốn:
IPV6=yes
Sau đó rule UFW như:
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
có thể được áp cho cả IPv4/IPv6 khi UFW IPv6 được bật đúng.
Không thay đổi firewall qua SSH mà chưa giữ phiên hiện tại và có console dự phòng.
Nếu bạn cần nền tảng firewall cơ bản, xem thêm bài Cài UFW Firewall trên VPS Ubuntu.
SSH qua IPv6
Nếu sshd listen trên IPv6 và firewall cho phép, bạn có thể SSH trực tiếp:
ssh admin@2001:db8:100::10
Trong một số tool/URL, IPv6 literal cần đặt trong dấu ngoặc vuông, ví dụ:
https://[2001:db8:100::10]/
Đừng public SSH qua IPv6 nếu policy của bạn chỉ muốn quản trị qua VPN/private network.
Nginx và IPv6
Một server block có thể listen:
listen 80;
listen [::]:80;
Với HTTPS:
listen 443 ssl;
listen [::]:443 ssl;
Kiểm tra syntax:
sudo nginx -t
Reload:
sudo systemctl reload nginx
Sau đó:
curl -6 -I https://your-domain.example
Nếu AAAA record chưa tạo, có thể test bằng /etc/hosts trên máy client hoặc dùng IPv6 literal khi phù hợp.
Tạo DNS AAAA record
IPv4 dùng record A.
IPv6 dùng record AAAA.
Ví dụ:
A example.com 192.0.2.10
AAAA example.com 2001:db8:100::10
Khi có cả hai, client hỗ trợ dual-stack có thể chọn IPv4 hoặc IPv6 theo thuật toán của hệ điều hành/network.
Chỉ tạo AAAA khi website thực sự hoạt động qua IPv6.
Nếu AAAA trỏ vào IPv6 lỗi, một số người dùng có IPv6 tốt sẽ gặp lỗi dù IPv4 website vẫn bình thường.
Kiểm tra DNS AAAA
dig AAAA example.com +short
Sau đó:
curl -6 -I https://example.com
Bạn cũng nên test từ một mạng Internet khác có IPv6, không chỉ từ chính VPS.
TLS có khác khi dùng IPv6 không?
Không về nguyên tắc certificate domain.
TLS certificate xác thực hostname, không phụ thuộc bạn kết nối hostname đó qua IPv4 hay IPv6.
Điều cần đảm bảo là:
- AAAA record đúng;
- port 443 mở trên IPv6;
- Nginx/Apache listen IPv6;
- certificate hợp lệ cho domain.
IPv6 và Docker
Docker networking IPv6 là một chủ đề riêng. Việc host có IPv6 không có nghĩa mọi container tự động nhận public IPv6.
Bạn cần cấu hình Docker daemon/network theo kiến trúc mong muốn.
Đừng bật IPv6 cho Docker production chỉ bằng cách copy một đoạn JSON nếu chưa hiểu route, prefix allocation và firewall forwarding.
IPv6 và fail2ban
Các phiên bản Fail2Ban hiện đại có hỗ trợ IPv6 trong nhiều jail/backend phù hợp, nhưng bạn nên kiểm tra phiên bản và firewall action đang dùng.
Nếu SSH public cả IPv4 và IPv6, log brute force có thể đến từ cả hai family.
Xem thêm Cài Fail2Ban trên VPS Ubuntu.
Có nên tắt IPv6 nếu không dùng?
Không nên tắt chỉ vì “IPv6 phức tạp”.
Nếu nhà cung cấp và workload hỗ trợ, dual-stack giúp bạn chuẩn bị cho hệ sinh thái mạng hiện đại hơn.
Tuy nhiên, nếu bạn chưa có nhu cầu và IPv6 đang gây rủi ro vận hành, có thể chưa public service qua IPv6 cho tới khi:
- firewall hoàn chỉnh;
- monitoring hỗ trợ;
- DNS/test được thực hiện;
- team hiểu quy trình xử lý sự cố.
Điều quan trọng là quyết định có chủ đích, không bỏ quên IPv6 đang tồn tại.
Xử lý lỗi: có địa chỉ IPv6 nhưng không ping ra Internet
Kiểm tra:
ip -6 addr
ip -6 route
Xem có default route không.
Sau đó:
ping -6 IPv6_GATEWAY
Nếu gateway không reachable, kiểm tra:
- prefix;
- gateway;
on-linkrequirement;- provider routing;
- firewall local.
Xử lý lỗi: server ra IPv6 được nhưng Internet không vào được
Kiểm tra:
sudo ss -tulnp
sudo ufw status verbose
Có thể service chỉ bind IPv4 hoặc firewall chặn inbound IPv6.
Test từ máy ngoài:
curl -6 -I https://example.com
Xử lý lỗi: thêm AAAA xong website lúc được lúc không
Đây là pattern điển hình khi IPv4 hoạt động nhưng IPv6 lỗi.
Kiểm tra riêng:
curl -4 -I https://example.com
curl -6 -I https://example.com
Nếu -4 thành công và -6 thất bại, sửa IPv6 trước khi giữ AAAA public.
Monitoring dual-stack
Khi đã public cả IPv4 và IPv6, health check nên kiểm tra cả hai.
Nếu monitoring chỉ resolve theo IPv4, bạn có thể không phát hiện AAAA record bị lỗi.
Nên có ít nhất:
- IPv4 HTTP check;
- IPv6 HTTP check;
- latency/path check nếu IPv6 là phần quan trọng của dịch vụ.
Bạn có thể kết hợp với Prometheus/Grafana hoặc uptime monitor tùy mục tiêu.
Checklist cấu hình IPv6 an toàn
- Lấy đúng IPv6/prefix/gateway từ nhà cung cấp.
- Kiểm tra interface name.
- Backup
/etc/netplan. - Giữ SSH session cũ và console dự phòng.
- Dùng
netplan generatekiểm tra syntax. - Dùng
netplan trytrướcapply. - Kiểm tra
ip -6 route. - Test outbound bằng
curl -6. - Kiểm tra UFW IPv6.
- Kiểm tra service listen
[::]. - Chỉ tạo AAAA sau khi test IPv6 thành công.
- Monitoring cả IPv4 và IPv6.
FAQ
VPS có IPv6 thì có cần IPv4 nữa không?
Tùy workload và đối tượng truy cập. Hiện dual-stack vẫn là lựa chọn thực tế cho nhiều website vì không phải mọi client/network đều IPv6-only.
gateway6 còn nên dùng trong Netplan không?
Netplan hiện đánh dấu gateway4/gateway6 là deprecated và khuyến nghị khai báo default gateway trong routes.
Có thể mất SSH khi sửa IPv6 không?
Có, nhất là khi bạn đồng thời sửa IPv4/default route hoặc cấu hình Netplan sai. Dùng netplan try, giữ session cũ và chuẩn bị console dự phòng.
Tạo AAAA record có tự làm website hỗ trợ IPv6 không?
Không. Server phải có route IPv6, firewall đúng và web server phải listen IPv6 trước.
UFW có hỗ trợ IPv6 không?
Có. Ubuntu Server Docs mô tả UFW là công cụ firewall host cho cả IPv4 và IPv6, nhưng bạn vẫn cần kiểm tra cấu hình IPV6=yes và rule thực tế.
Kết luận
Cấu hình IPv6 trên VPS Ubuntu không khó nếu bạn làm từng lớp: địa chỉ → route → DNS resolver → firewall → service → DNS AAAA → monitoring. Phần dễ gây sự cố nhất là default route và việc vô tình public service qua IPv6 mà không nhận ra.
Hãy luôn dùng thông số mạng do nhà cung cấp cấp, thử cấu hình bằng netplan try và chỉ public AAAA sau khi kiểm tra kết nối IPv6 đầu cuối.
Nếu bạn đang xây dựng website hoặc ứng dụng cần kết nối Internet ổn định, có thể tham khảo các gói VPS tại HUONG CLOUD và kiểm tra thông tin network của từng dịch vụ trước khi triển khai dual-stack.
Nguồn tham khảo
- Netplan Docs — YAML configuration: https://netplan.readthedocs.io/en/latest/netplan-yaml/
- Netplan Docs — netplan try: https://netplan.readthedocs.io/en/stable/netplan-try/
- Netplan Docs — CLI and status: https://netplan.readthedocs.io/en/stable/cli/
- Ubuntu Server Docs — Firewall / UFW: https://documentation.ubuntu.com/server/how-to/security/firewalls/
Kết luận
Nếu chưa chắc cấu hình hoặc loại dịch vụ nào phù hợp, hãy gửi nhu cầu thực tế để đội ngũ hỗ trợ tư vấn trước khi mua.
Chưa biết nên chọn gói nào?
Xem bảng giá VPS hoặc liên hệ đội ngũ hỗ trợ để chọn cấu hình phù hợp.
Xem bảng giá VPS →