Đồng hồ điểm 2:15 sáng. Đội ngũ của bạn vừa hoàn tất triển khai dual-stack networking trên toàn bộ cluster nội bộ, thì 48 worker node Kubernetes mới khởi tạo bỗng đồng loạt flapping. Không node nào nhận được default gateway hay DNS resolver IPv6.
Chuông PagerDuty réo vang đầu giường. Phản xạ tự nhiên trong một sự cố thế này là vội vã dựng lên một stateful DHCPv6 server như ISC Kea hay wide-dhcpv6. Nhưng đó thường là một sai lầm. Toàn bộ hạ tầng của bạn thực chất chỉ cần một cơ chế cấp phát địa chỉ stateless có thể dự đoán và tự phục hồi.
Router Advertisement Daemon (radvd) giải quyết triệt để vấn đề này bằng cách broadcast các gói tin ICMPv6 Router Advertisement (RA). Các node sẽ tự cấu hình địa chỉ global của mình thông qua Stateless Address Autoconfiguration (SLAAC). Chúng nhận recursive DNS server qua RDNSS (RFC 8106). Và tuyệt vời nhất là gateway hoàn toàn không phải lưu vết trạng thái của client.
Bắt đầu nhanh (5 phút): Kích hoạt SLAAC và RDNSS
Khi thời gian cấp bách, hệ thống cần thông mạng ngay lập tức. Dưới đây là cách thiết lập cấu hình tự động hoạt động trên Linux router chạy Debian/Ubuntu hoặc RHEL.
1. Bật IPv6 Forwarding
Nếu Linux kernel không forward gói tin IPv6, radvd sẽ dừng ngay khi khởi động cùng thông báo lỗi nghiêm trọng. Hãy bật cờ sysctl trực tiếp:
# Áp dụng trực tiếp vào bộ nhớ kernel
sysctl -w net.ipv6.conf.all.forwarding=1
# Duy trì cấu hình sau khi reboot
echo "net.ipv6.conf.all.forwarding=1" | sudo tee /etc/sysctl.d/99-ipv6-forwarding.conf
sudo sysctl --system
2. Gán IPv6 Prefix tĩnh cho LAN Interface
Gán một địa chỉ tĩnh thuộc subnet /64 mục tiêu cho interface nội bộ (ở đây sử dụng eth1):
sudo ip -6 addr add 2001:db8:1000:1::1/64 dev eth1
sudo ip link set eth1 up
3. Cài đặt và cấu hình radvd
# Trên Ubuntu/Debian
sudo apt-get update && sudo apt-get install -y radvd
# Trên RHEL/AlmaLinux/Rocky
sudo dnf install -y radvd
Ghi cấu hình chuẩn thực chiến này vào /etc/radvd.conf. Cấu hình này giảm khoảng thời gian gửi advertisement xuống còn 3–10 giây nhằm phục hồi nhanh các client bị kẹt:
sudo tee /etc/radvd.conf << 'EOF'
interface eth1 {
AdvSendAdvert on;
MinRtrAdvInterval 3;
MaxRtrAdvInterval 10;
AdvManagedFlag off;
AdvOtherConfigFlag off;
prefix 2001:db8:1000:1::/64 {
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr on;
};
RDNSS 2001:db8:1000:1::1 2606:4700:4700::1111 {
AdvRDNSSLifetime 30;
};
};
EOF
4. Khởi động và kiểm tra dịch vụ
sudo systemctl restart radvd
sudo systemctl status radvd
Trong vòng 5 giây, các client trên eth1 sẽ tự tạo địa chỉ global thuộc dải 2001:db8:1000:1::/64. Chúng sẽ thiết lập địa chỉ link-local của router làm default route và cập nhật cấu hình resolver cục bộ.
Tìm hiểu sâu: Cơ chế hoạt động của SLAAC và RDNSS
Xử lý nhanh giúp dập tắt sự cố tức thời. Nhưng hiểu rõ luồng trao đổi giao thức bên dưới mới là chìa khóa giữ cho hệ thống vận hành ổn định dưới tải thực tế.
Kiến trúc Stateless
Các DHCPv4 truyền thống và stateful DHCPv6 server duy trì cơ sở dữ liệu lease tập trung. Chúng theo dõi ánh xạ MAC sang IP và quản lý bộ đếm thời gian gia hạn. SLAAC đảo ngược hoàn toàn mô hình này: router chỉ đóng vai trò như một ngọn hải đăng phát tín hiệu thông tin, trao quyền tự tạo IP trực tiếp cho client. Hướng tiếp cận này loại bỏ điểm lỗi đơn lẻ (SPOF) trên các cụm bare-metal quy mô lớn cũng như các container bridge ngắn hạn.
Các chỉ thị cấu hình chính
AdvSendAdvert on: Ra lệnh choradvdphát các gói tin multicast RA định kỳ và phản hồi các gói ICMPv6 Type 133 Router Solicitation trong vài mili-giây.AdvManagedFlag off(M flag): Báo cho client không truy vấn stateful DHCPv6 server để lấy địa chỉ. Bật cờ này sangonsẽ khiến client gửi yêu cầu cấp phát địa chỉ IP qua DHCPv6.AdvOtherConfigFlag off(O flag): Kiểm soát việc client có truy vấn stateless DHCPv6 để lấy thêm các tham số bổ sung như NTP server hay SIP gateway hay không. Giữ cả M và O ở trạng thái off sẽ đảm bảo cơ chế SLAAC hoàn toàn tự quản.AdvAutonomous on(A flag trongprefix): Chốt chặn cốt lõi của SLAAC. Nó cho phép client kết hợp prefix 64-bit được quảng bá với Interface Identifier 64-bit cục bộ của nó. Client sẽ sinh hậu tố này bằng chuẩn EUI-64 cố định hoặc cơ chế ngẫu nhiên RFC 7217 privacy extensions.RDNSS(RFC 8106): Trước đây, các mô hình SLAAC sơ khai chỉ đẩy route và prefix, buộc các sysadmin phải chạy thêm DHCPv6 daemon song song chỉ để cấp DNS server. Giờ đây, Linux, macOS, Windows 10/11 và Android hiện đại đều có thể phân tích trực tiếp payload RDNSS và DNSSL từ khung gói tin RA.
Cấu hình nâng cao: Độ ưu tiên Route, Renumbering không gián đoạn và MTU
Trong các topo mạng dự phòng, việc dùng cấu hình mặc định cuối cùng sẽ dẫn đến hiện tượng bất đối xứng định tuyến hoặc drop gói tin.
Chuyển đổi Prefix không gây gián đoạn dịch vụ
Khi thay đổi nhà cung cấp transit upstream hoặc renumbering lại data center, hãy quảng bá đồng thời cả hai subnet. Đặt AdvPreferredLifetime về 0 trên prefix sắp ngưng sử dụng. Thiết lập này yêu cầu các endpoint duy trì kết nối TCP hiện có trên địa chỉ cũ, đồng thời trói buộc (bind) toàn bộ socket mới vào dải IP mới:
interface eth1 {
AdvSendAdvert on;
MinRtrAdvInterval 30;
MaxRtrAdvInterval 100;
# Prefix chính mới đưa vào
prefix 2001:db8:2000:1::/64 {
AdvOnLink on;
AdvAutonomous on;
AdvValidLifetime 86400; # Có hiệu lực trong 24h
AdvPreferredLifetime 14400; # Ưu tiên trong 4h
};
# Loại bỏ dần dải IP cũ: kết nối hiện tại vẫn duy trì, không mở socket mới
prefix 2001:db8:1000:1::/64 {
AdvOnLink on;
AdvAutonomous on;
AdvValidLifetime 7200; # Hết hiệu lực sau 2h
AdvPreferredLifetime 0; # Không dùng cho kết nối mới ngay lập tức
};
DNSSL internal.infra.local corp.example.com {
AdvDNSSLLifetime 100;
};
};
Độ ưu tiên Router và giới hạn MTU
Nếu bạn vận hành các edge router mô hình active-passive trên cùng một phân đoạn Layer 2, hãy cấu hình AdvDefaultPreference. Điều này đảm bảo node phụ không bao giờ chiếm dụng lưu lượng gửi ra ngoài:
interface eth1 {
AdvSendAdvert on;
AdvDefaultPreference high; # Giá trị nhận: low, medium, high
AdvLinkMTU 1500;
AdvCurHopLimit 64;
};
Quy trình xử lý sự cố: Khắc phục các node mất kết nối
Khi client không thể lấy được default route hoặc địa chỉ IP, hãy kiểm tra lần lượt theo danh sách sau.
1. Bắt gói tin Advertisement với radvdump
Đừng đoán mò. Hãy dùng công cụ giải mã gói tin đi kèm trực tiếp với daemon:
sudo radvdump
Công cụ này lắng nghe trên nhóm multicast toàn node ff02::1 và in ra các gói tin RA theo thời gian thực dưới dạng block cấu hình hợp lệ. Nếu màn hình terminal vẫn trống sau 10 giây, hãy kiểm tra xem các switch trung gian có đang drop lưu lượng multicast hay không.
2. Kiểm tra bộ lọc ICMPv6
Chặn ICMPv4 là thiếu cẩn thận; chặn ICMPv6 là thảm họa. Việc drop ICMPv6 sẽ phá vỡ hoàn toàn Neighbor Discovery Protocol (NDP), Path MTU Discovery và SLAAC.
Đảm bảo cả firewall trên host lẫn ACL trên switch đều cho phép rõ ràng ICMPv6 Type từ 133 đến 136:
# Cho phép rõ ràng Router Solicitation và Router Advertisement
sudo ip6tables -A INPUT -p icmpv6 --icmpv6-type router-solicitation -j ACCEPT
sudo ip6tables -A INPUT -p icmpv6 --icmpv6-type router-advertisement -j ACCEPT
# Cho phép rõ ràng Neighbor Solicitation và Neighbor Advertisement (tương đương ARP)
sudo ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbor-solicitation -j ACCEPT
sudo ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbor-advertisement -j ACCEPT
3. Khắc phục bẫy accept_ra trong Kernel trên client nhiều card mạng
Một sự cố thường gặp xảy ra trên các hệ thống Linux cấu hình làm container host hoặc VPN endpoint. Nếu client bật net.ipv6.conf.all.forwarding=1, kernel sẽ tự động bỏ qua toàn bộ gói tin Router Advertisement nhận được. Tham số accept_ra của nó sẽ mặc định âm thầm chuyển về 0.
Kiểm tra trạng thái interface trên client:
sysctl net.ipv6.conf.eth0.accept_ra
sysctl net.ipv6.conf.eth0.autoconf
Bắt buộc kernel của client chấp nhận RA dù đang đóng vai trò là node forwarding:
sudo sysctl -w net.ipv6.conf.eth0.accept_ra=2
Thiết lập accept_ra=2 đảm bảo interface gán default route và địa chỉ SLAAC ngay cả khi đang forward gói tin qua các bridge nội bộ và container.
Hãy commit file /etc/radvd.conf vào Git, đảm bảo không chặn ICMPv6 trên mọi VLAN, và hệ thống IPv6 của bạn sẽ tự cấu hình ổn định mà không tốn chi phí quản lý trạng thái của DHCP.

