Làm chủ 464XLAT trên Linux: Kết nối ứng dụng chỉ hỗ trợ IPv4 vào mạng thuần IPv6

Networking tutorial - IT technology blog
Networking tutorial - IT technology blog

Thực trạng cạn kiệt địa chỉ IPv4

Gần đây tôi đã dẫn dắt một dự án chuyển đổi một cụm microservices khổng lồ sang hạ tầng thuần IPv6 (IPv6-only). Chúng tôi muốn loại bỏ sự phiền đoái khi quản lý các dải địa chỉ IPv4 nội bộ bị trùng lặp và đơn giản hóa bảng định tuyến (routing tables). Trên lý thuyết, đây là một bước đi kiến trúc hoàn hảo. Tuy nhiên, khi triển khai thực tế, chúng tôi đã gặp phải những rào cản ngay lập tức. Một vài agent giám sát cũ và các thư viện bên thứ ba độc quyền đã được lập trình cứng (hardcode) để chỉ nhận diện IPv4. Chúng không nhận diện bản ghi AAAA và không thể xử lý địa chỉ 128-bit.

Kịch bản này là một “cơn đau đầu” phổ biến trong DevOps hiện đại. Bạn cần khả năng mở rộng của IPv6, nhưng thế giới vẫn đang bám lấy các giao thức cũ. Nếu bạn từng thử chạy một file binary 10 năm tuổi trên một host thuần IPv6 và nhận lỗi “Network unreachable”, bạn sẽ hiểu cảm giác ức chế này.

Tại sao NAT64 tiêu chuẩn không phải lúc nào cũng đủ

Hầu hết các kỹ sư bắt đầu với NAT64 và DNS64. Sự kết hợp này hoạt động tốt cho các trình duyệt web hoặc ứng dụng phụ thuộc hoàn toàn vào DNS. Khi một ứng dụng yêu cầu địa chỉ của api.example.com, DNS64 sẽ tổng hợp một địa chỉ IPv6, và NAT64 sẽ xử lý việc biên dịch. Tuy nhiên, phương pháp này thất bại khi ứng dụng có một IP như 1.1.1.1 được hardcode trong cấu hình. Nó cũng thất bại với các giao thức tùy chỉnh bỏ qua hoàn toàn việc tra cứu DNS.

Ứng dụng sẽ bị lỗi (crash) vì nó không tìm thấy stack IPv4 trên interface cục bộ. Đây là lúc 464XLAT trở nên thiết yếu. Nó cung cấp một interface IPv4 logic trên máy cục bộ (gọi là CLAT). Interface ảo này đánh lừa ứng dụng rằng nó đang ở trong một mạng IPv4 tiêu chuẩn, trong khi việc truyền tải thực tế diễn ra qua hạ tầng IPv6.

Cơ chế hoạt động của 464XLAT: CLAT và PLAT

464XLAT sử dụng hai thành phần riêng biệt để thu hẹp khoảng cách:

  • PLAT (Provider-side Translator): Đây là cổng NAT64 được quản lý bởi nhà cung cấp dịch vụ hoặc đội ngũ hạ tầng lõi. Nó biên dịch các gói tin IPv6 ngược lại thành IPv4 để truy cập internet công cộng.
  • CLAT (Customer-side Translator): Đây là phần chúng ta cấu hình trên host Linux của mình. Nó tạo ra một interface ảo clat. Khi một ứng dụng gửi gói tin IPv4, CLAT sẽ đóng gói nó vào một header IPv6 và chuyển hướng đến PLAT.

Tôi đã triển khai thiết lập này trong các môi trường xử lý lưu lượng lên tới 10Gbps. Nó hoạt động cực kỳ ổn định, giúp lấp đầy khoảng cách giao thức mà không yêu cầu lập trình viên phải sửa lại bất kỳ dòng code cũ nào.

Giải pháp: Triển khai CLAT với TAYGA

Để triển khai CLAT trên Linux, TAYGA là tiêu chuẩn vàng. Đây là một NAT64 daemon không trạng thái (stateless) cực kỳ nhẹ. TAYGA hoạt động thầm lặng và tập trung vào việc biên dịch tốc độ cao.

Bước 1: Điều kiện tiên quyết

Đảm bảo host của bạn có kết nối IPv6 hoạt động bình thường và bạn biết NAT64 prefix của mạng. Hầu hết các mạng sử dụng prefix tiêu chuẩn phổ biến là: 64:ff9b::/96.

# Cài đặt TAYGA trên Debian/Ubuntu
sudo apt update
sudo apt install tayga -y

Bước 2: Cấu hình TAYGA

Mở file /etc/tayga.conf để xác định địa chỉ IPv4 ảo và NAT64 prefix. Cấu hình này hướng dẫn TAYGA cách ánh xạ hai không gian địa chỉ.

# Chỉnh sửa /etc/tayga.conf
tun-device nat64
ipv4-addr 192.168.255.1
prefix 64:ff9b::/96
dynamic-pool 192.168.255.0/24

Trong cấu hình này, 192.168.255.1 đóng vai trò là gateway nội bộ. dynamic-pool cung cấp một dải địa chỉ IPv4 cục bộ mà TAYGA sử dụng để ánh xạ lưu lượng IPv6 đi vào ngược trở lại hệ thống cục bộ.

Bước 3: Khởi tạo Interface

Tiếp theo, tạo interface mạng và xác định định tuyến. Chúng ta phải chỉ dẫn nhân Linux (Linux kernel) gửi tất cả lưu lượng hướng tới IPv4 thông qua interface của TAYGA.

# Tạo thiết bị nat64
sudo tayga --mktun

# Kích hoạt interface
sudo ip link set nat64 up
sudo ip addr add 192.168.255.1 dev nat64

# Ép tất cả lưu lượng IPv4 đi qua interface biên dịch
sudo ip route add 0.0.0.0/0 dev nat64

Bước 4: Khởi chạy Daemon

Bây giờ, hãy khởi chạy dịch vụ TAYGA. Sử dụng systemd để đảm bảo bộ biên dịch tự động khởi động lại nếu máy chủ reboot.

sudo systemctl enable tayga
sudo systemctl start tayga

Xử lý định tuyến và Source IP

Địa chỉ nguồn thường khiến những người mới bắt đầu bối rối. Khi một gói tin IPv4 đi vào interface nat64, TAYGA sẽ chuyển đổi nó sang IPv6. Địa chỉ nguồn IPv6 mới là sự kết hợp giữa NAT64 prefix và địa chỉ IPv4 nội bộ của bạn.

Để thiết lập này hoạt động, bạn phải kích hoạt IP forwarding. Bạn cũng cần kiểm tra xem firewall (iptables hoặc nftables) có đang chặn lưu lượng đã được biên dịch hay không.

# Kích hoạt IPv6 forwarding
sudo sysctl -w net.ipv6.conf.all.forwarding=1

# Cho phép lưu lượng đi qua interface nat64
sudo iptables -A FORWARD -i nat64 -j ACCEPT
sudo iptables -A FORWARD -o nat64 -j ACCEPT

Kiểm tra việc biên dịch

Để xác minh thiết lập, hãy ping một địa chỉ IPv4 công cộng. Mặc dù DNS của Google (8.8.8.8) hỗ trợ IPv6, chúng ta có thể sử dụng nó để ép kiểm tra đường truyền IPv4.

ping -4 8.8.8.8

Nếu lệnh ping trả về thành công, CLAT của bạn đã hoạt động. Các ứng dụng cũ của bạn giờ đây sẽ thấy một route IPv4 hợp lệ và có thể giao tiếp qua mạng thuần IPv6 mà không gặp vấn đề gì.

Kinh nghiệm thực tế tốt nhất

Sau khi quản lý nhiều dự án chuyển đổi sang IPv6, tôi đề xuất các tối ưu hóa sau để tránh những sai lầm phổ biến:

  • Xử lý vấn đề MTU: Header IPv6 chiếm 40 byte, trong khi header IPv4 chỉ chiếm 20 byte. Sự chênh lệch 20 byte này có thể khiến các gói tin bị rớt trong quá trình truyền tải dữ liệu lớn. Nếu kết nối bị treo, hãy hạ MTU của interface nat64 xuống 1260.
  • Theo dõi Log: TAYGA gửi đầu ra của nó tới syslog. Nếu mất kết nối, hãy chạy lệnh tail -f /var/log/syslog. Nó sẽ ghi log rõ ràng khi không tìm thấy route hợp lệ tới PLAT.
  • Xác minh Prefix: Đừng mặc định prefix là 64:ff9b::/96. Một số mạng doanh nghiệp sử dụng prefix tùy chỉnh. Luôn xác nhận với đội ngũ mạng hoặc sử dụng lệnh dig +short amir.ipv6-test.com AAAA để xem cách mạng tổng hợp địa chỉ.

Lời kết

Chuyển sang IPv6 không có nghĩa là bạn phải vứt bỏ những phần mềm cũ đang hoạt động ổn định. 464XLAT cung cấp một cầu nối minh bạch, hiệu suất cao giúp hạ tầng của bạn luôn hiện đại. Bằng cách sử dụng TAYGA như một CLAT daemon, bạn có thể duy trì môi trường dual-stack ngay cả khi nhà cung cấp chỉ cấp cho bạn một địa chỉ IPv6 duy nhất.

Share: