Cấu Hình IPv6 Trên VPS Ubuntu Với Netplan: Dual-Stack, DNS Và Firewall

Cấu hình IPv6 trên VPS Ubuntu bằng Netplan, giữ dual-stack IPv4/IPv6, thêm route và DNS, kiểm tra UFW và tránh mất SSH khi áp dụng mạng mới.

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.

Điểm quan trọng Hãy lựa chọn dịch vụ dựa trên nhu cầu sử dụng thực tế và theo dõi tài nguyên thường xuyên để có hiệu quả tốt nhất.

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:

  1. kiểm tra VPS đã có IPv6 hay chưa;
  2. xác nhận prefix và gateway từ nhà cung cấp;
  3. cấu hình Netplan dual-stack;
  4. dùng netplan try để tránh tự khóa SSH;
  5. kiểm tra route, DNS và firewall;
  6. thêm DNS AAAA cho website;
  7. 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.

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 try timeout/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-link requirement;
  • 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 generate kiểm tra syntax.
  • Dùng netplan try trước apply.
  • 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

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 →