Chuyển đổi IPv6 sang IPv4

Muốn đổi IPv6 sang IPv4? Dán một địa chỉ IPv6 để lấy địa chỉ IPv4 nằm bên trong, xem 32 bit của nó ở đâu và định dạng nào đã đặt chúng vào đó. Phần lớn địa chỉ IPv6 hoàn toàn không chứa IPv4, và công cụ sẽ nói rõ điều đó.

Bộ giải mã theo RFC 4291, 6052, 3056, 4380 và 5214 · đã kiểm tra với chính các ví dụ của từng RFC · chạy ngay trong trình duyệt của bạn

Đọc theo dạng IPv6

Vị trí của IPv4 trong 128 bitÁnh xạ IPv4
Ví dụ

Mọi cách viết IPv6, kể cả có ngoặc vuông, cổng, %zone hay /prefix. Chuyển đổi ngay trong trình duyệt của bạn; không gửi gì đi.

Có IPv4 bên trongÁnh xạ IPv4Đang dùng

203.0.113.5

::ffff:0:0/96 · RFC 4291

Thấy trong log máy chủ? Khách truy cập này đến qua IPv4, từ 203.0.113.5: máy chủ dual-stack ghi các máy khách IPv4 theo cách này.

IPv4
Dạng nén (RFC 5952)
Dạng đầy đủ
IPv4 dạng số
Thập phân · hex · nhị phân
Tên DNS ngược

Làm sao đổi IPv6 sang IPv4?

Bạn chỉ có thể chuyển một địa chỉ IPv6 sang IPv4 khi bên trong nó đã có sẵn một địa chỉ IPv4: xác định định dạng từ các bit đầu của địa chỉ, lấy 32 bit mà định dạng đó dành riêng, rồi đọc chúng thành bốn số thập phân.

Công cụ làm cả ba bước. Trong ::ffff:203.0.113.5, 96 bit đầu là prefix ánh xạ IPv4 ::ffff:0:0/96 (RFC 4291), nên 32 bit cuối là địa chỉ IPv4: cb00:7105 ở dạng hex, tức cb = 203, 00 = 0, 71 = 113 và 05 = 5.

Các định dạng khác đặt 32 bit ở chỗ khác: 6to4 ngay sau 2002:, prefix NAT64 riêng của một mạng thì quanh một octet bị bỏ qua, Teredo thì ở cuối và bị đảo bit. Dải bit trong công cụ cho thấy vị trí của chúng trong từng địa chỉ bạn nhập.

1Đọc prefix::ffff:0:0/96 Prefix ánh xạ IPv4
2Lấy 32 bit96–127 · cb00:7105
3Mỗi byte sang thập phâncb20300071113055203.0.113.5
Ba bước trên một địa chỉ ánh xạ IPv4 lấy từ log máy chủ. Địa chỉ dành cho tài liệu (RFC 5737).
Công cụ chuyển đổi IPv6 sang IPv4 giải mã một địa chỉ Teredo thành địa chỉ IPv4 của máy chủ và máy kháchCông cụ chuyển đổi IPv6 sang IPv4 giải mã một địa chỉ Teredo thành địa chỉ IPv4 của máy chủ và máy kháchMột ô nhập, mọi cách viếtNgoặc vuông, cổng, zone, prefix, URL và tên ngược đều đọc được; dòng dưới ô nhập cho biết đã đọc thế nào.PrefixCác bit đầu cho biết định dạng, ở đây là 2001::/32 của Teredo theo RFC 4380.Bit đảo ngược, được lật lạiTeredo lưu cổng và IPv4 của máy khách ở dạng đảo bit; dòng bên dưới là giá trị thật.Địa chỉ IPv4Mỗi byte được tô sáng ở dạng thập phân, và cả địa chỉ dưới dấu ngoặc của nó.Kết luậnCó IPv4 bên trong hay không, định dạng, tình trạng của nó hiện nay và ý nghĩa với bạn.Mọi dạng, sẵn sàng sao chépMáy chủ, cổng, cờ, văn bản IPv6 chuẩn, dạng đầy đủ và tên DNS ngược.
Một địa chỉ Teredo được tách ra: máy chủ, các cờ, cổng và IPv4 của máy khách, cả hai được lưu ở dạng đảo bit.

Có phải địa chỉ IPv6 nào cũng chứa một địa chỉ IPv4?

Không. Một địa chỉ IPv6 thông thường hoàn toàn không chứa địa chỉ IPv4; chỉ một số ít định dạng nhúng IPv4, và mỗi định dạng tự nhận diện bằng một prefix hoặc Interface ID đã biết.

RFC 4291 yêu cầu phần mềm không suy ra cấu trúc nào trong địa chỉ IPv6 ngoài những gì prefix của nó quy định, nên một công cụ biến 2001:db8:85a3::8a2e:370:7334 thành địa chỉ IPv4 là đang bịa ra một địa chỉ. Các định dạng mang địa chỉ IPv4 được vẽ ở đây cùng vị trí 32 bit của chúng.

Ngày nay chỉ hai định dạng phổ biến: địa chỉ ánh xạ IPv4 bên trong phần mềm, và địa chỉ NAT64 trên các mạng chỉ có IPv6. 6to4 và Teredo gần như đã biến mất khỏi lưu lượng thực.

Nơi mỗi định dạng đặt địa chỉ IPv4 192.0.2.33, vẽ đúng tỷ lệ: 32 chữ số hex, mỗi chữ số 4 bit.

Vì sao log của tôi hiện địa chỉ ::ffff:?

Vì máy chủ của bạn lắng nghe cả hai giao thức trên một socket IPv6, và hệ điều hành đưa khách truy cập IPv4 cho nó dưới dạng địa chỉ ánh xạ IPv4: ::ffff:203.0.113.5 là khách truy cập IPv4 203.0.113.5, không phải khách IPv6.

Đây là socket dual-stack của RFC 3493. Dạng ánh xạ chỉ tồn tại bên trong phần mềm: IANA đánh dấu ::ffff:0:0/96 là không được chuyển tiếp và không truy cập được toàn cầu, nên không gói tin nào trên internet mang địa chỉ này.

Để báo cáo hoặc chặn khách truy cập đó, hãy dùng địa chỉ IPv4 thuần. Các công cụ in địa chỉ này khác nhau: gói net cũ của Go hiển thị 203.0.113.5, còn net/netip và Python 3.13 hiển thị ::ffff:203.0.113.5, nên một khách truy cập có thể xuất hiện theo cả hai cách.

Khách truy cập IPv4203.0.113.5IPv4
Khách truy cập IPv62001:db8::7IPv6
Máy chủ của bạn[::]:443một socket IPv6
access.log
::ffff:203.0.113.5 - - [24/Oct/2026:09:14:02 +0000] "GET / HTTP/1.1" 200
2001:db8::7 - - [24/Oct/2026:09:14:05 +0000] "GET / HTTP/2" 200
Một socket, hai họ địa chỉ: hệ điều hành ghi khách truy cập IPv4 thành ::ffff:203.0.113.5.

NAT64 đặt địa chỉ IPv4 vào IPv6 như thế nào?

Mạng NAT64 cấp cho mọi host IPv4 một địa chỉ IPv6 bằng cách ghi địa chỉ IPv4 của nó vào một prefix, mặc định là 64:ff9b::/96, nên 192.0.2.33 trở thành 64:ff9b::c000:221.

Trên mạng chỉ có IPv6, khi một tên miền chỉ có bản ghi A, DNS64 trả lời bằng một bản ghi AAAA được tạo theo cách này, và bộ chuyển đổi biến các gói tin gửi tới địa chỉ đó thành IPv4. Thiết bị tìm prefix của mạng bằng cách hỏi ipv4only.arpa.

Một mạng có thể dùng prefix riêng dài 32, 40, 48, 56, 64 hoặc 96 bit (RFC 6052). Khi đó các bit 64–71 luôn bằng 0, nên với /40, /48 và /56, địa chỉ IPv4 bị tách ra hai bên octet đó. Chỉ nhìn địa chỉ thì không biết mạng đã chọn độ dài nào, vì vậy công cụ hỏi bạn. Prefix well-known không bao giờ được mang địa chỉ IPv4 riêng.

Chính các ví dụ của RFC 6052 cho 192.0.2.33: bit prefix màu trắng, IPv4 màu xanh lá, octet u gạch chéo.

Địa chỉ Teredo là gì?

Địa chỉ Teredo là địa chỉ IPv6 dành cho một máy tính sau NAT IPv4, được đưa qua đường hầm UDP; nó chứa địa chỉ IPv4 của máy chủ Teredo và, ở dạng đảo bit, địa chỉ IPv4 công cộng cùng cổng của máy khách.

Nó gồm năm phần: prefix 2001::/32, địa chỉ IPv4 của máy chủ ở bit 32–63, 16 bit cờ, cổng UDP mà NAT của máy khách đã gán, và địa chỉ IPv4 công cộng của máy khách; hai phần cuối bị đảo mọi bit (RFC 4380).

Từ RFC 5991, 12 trong 16 bit cờ là ngẫu nhiên, nên cờ khác 0x8000 là bình thường. Teredo gần như đã biến mất khỏi internet ngày nay, nhưng log cũ và quy tắc tường lửa vẫn còn chứa địa chỉ của nó.

Giải mã 2001:0:c000:201:8000:63bf:34ff:8efa: máy chủ 192.0.2.1, cờ cone, cổng 40000, máy khách 203.0.113.5.

Địa chỉ 6to4 và ISATAP là gì?

6to4 và ISATAP là những cách đầu tiên để truyền IPv6 qua mạng IPv4, và cả hai đều ghi một địa chỉ IPv4 vào địa chỉ IPv6: 6to4 ngay sau 2002:, ISATAP trong Interface ID sau 5efe.

Prefix của một site 6to4 là 2002: theo sau là địa chỉ IPv4 công cộng của site, nên 192.0.2.33 từng sở hữu 2002:c000:221::/48. RFC 7526 đã loại bỏ các relay anycast giúp 6to4 hoạt động trên internet, chứ không loại bỏ định dạng.

ISATAP tạo 64 bit cuối từ 0:5efe, hoặc 200:5efe với địa chỉ IPv4 công cộng, theo sau là địa chỉ IPv4, dưới bất kỳ prefix /64 nào.

Hai định dạng, và lưu lượng của chúng đã biến mất ra sao (thống kê IPv6 của Google).

Làm sao tìm địa chỉ IPv4 của tôi khi đang dùng IPv6?

Hãy tra riêng nó: địa chỉ IPv4 và IPv6 của bạn là hai địa chỉ độc lập, địa chỉ IPv6 không chứa địa chỉ IPv4, và IP Của Tôi Là Gì hiển thị cả hai cạnh nhau.

Một kết nối dual-stack có một địa chỉ IPv4, thường được dùng chung qua NAT của nhà mạng, và một prefix IPv6; mỗi website kết nối với bạn qua giao thức mà trình duyệt chọn. Công cụ chuyển đổi chỉ giúp được với các địa chỉ ở định dạng nhúng, chẳng hạn một địa chỉ ánh xạ trong log.

Trên mạng di động chỉ có IPv6, lưu lượng IPv4 của ứng dụng đi qua 464XLAT của nhà mạng, và địa chỉ IPv4 mà website thấy là của bộ chuyển đổi của nhà mạng.

Hai địa chỉ, hai làn: không thể suy ra địa chỉ này từ địa chỉ kia. Địa chỉ dành cho tài liệu.

Làm sao buộc dùng IPv4 thay vì IPv6?

Hãy cho máy tính ưu tiên IPv4 thay vì tắt IPv6: khi một tên miền có cả hai loại địa chỉ, máy tính thử IPv6 trước, và việc nâng IPv4 lên trong bảng chọn địa chỉ sẽ đổi thứ tự đó trong khi IPv6 vẫn hoạt động.

Microsoft khuyến nghị đúng cách này trên Windows và cảnh báo không nên vô hiệu hóa hay gỡ liên kết IPv6, vì có thể khiến một số phần của Windows ngừng hoạt động. Trên Mac, Cài đặt hệ thống không có công tắc tắt IPv6. Trên Linux, một dòng trong /etc/gai.conf là đủ, dù Chrome tự sắp xếp địa chỉ.

Nếu chỉ cần cho một lệnh, hầu hết công cụ đều có tùy chọn -4. Các tab cho thấy các bước của từng hệ điều hành, đã đối chiếu với tài liệu của chính nhà phát triển.

Bảng chọn địa chỉ

Mặc địnhƯu tiên IPv4
IPv6 (::/0)4040
IPv4 (::ffff:0:0/96)35100

RFC 6724 §2.1, §10.3

Trong cửa sổ lệnh chạy với quyền quản trị viên, rồi khởi động lại:
› reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters" /v DisabledComponents /t REG_DWORD /d 32 /f
Kiểm tra: dòng ::ffff:0:0/96 giờ xếp trên ::/0
› netsh interface ipv6 show prefixpolicies
Chỉ cho một lệnh:
› ping /4 example.com
› tracert /4 example.com
Cài đặt hệ thống không có tùy chọn tắt IPv6; lệnh này tắt IPv6 cho một dịch vụ:
› networksetup -listallnetworkservices
› networksetup -setv6off "Wi-Fi"
Hoàn tác:
› networksetup -setv6automatic "Wi-Fi"
Trên Mac, ping vốn chỉ dùng IPv4 (ping -4 là lỗi).
Thêm vào /etc/gai.conf, và chép cả các dòng mặc định khác của glibc: một dòng precedence sẽ thay thế toàn bộ bảng.
› precedence ::ffff:0:0/96 100
Chỉ cho một lệnh:
› ping -4 example.com
Chrome có thể không theo gai.conf: nó tự sắp xếp địa chỉ.
Trong about:config:
› network.dns.disableIPv6 = true
Chrome không có thiết lập như vậy; trên Windows, nó theo ưu tiên của hệ thống.
› curl -4 https://example.com
› wget -4 https://example.com
› ssh -4 user@example.com
› nslookup -type=A example.com
dig -4 chỉ đổi cách dig kết nối tới máy chủ DNS: thay vào đó, hãy truy vấn bản ghi A.
› dig A example.com
Ưu tiên IPv4 mà không tắt IPv6: bảng chọn địa chỉ, rồi các bước cho từng hệ điều hành theo tài liệu của chính nhà phát triển.

Câu hỏi thường gặp

Có thể chuyển mọi địa chỉ IPv6 sang IPv4 không?

Không. Một địa chỉ IPv6 chỉ đổi được sang IPv4 khi có một địa chỉ IPv4 được ghi vào bên trong, như trong các định dạng ánh xạ IPv4, NAT64, 6to4, Teredo và ISATAP. Một địa chỉ gốc như 2001:db8:85a3::8a2e:370:7334 không mang địa chỉ IPv4 nào, và công cụ nào in ra IPv4 cho nó là đang bịa. Nếu cần địa chỉ IPv4 của một website, hãy tra bản ghi A của nó.

Địa chỉ IPv4 trong ::ffff:192.0.2.1 là gì?

Là 192.0.2.1. Prefix ::ffff:0:0/96 đánh dấu một địa chỉ ánh xạ IPv4: 80 bit 0, 16 bit 1, rồi địa chỉ IPv4 ở 32 bit cuối. Viết ở dạng hex, cùng địa chỉ đó là ::ffff:c000:201, vì c0 là 192, 00 là 0, 02 là 2 và 01 là 1. Phần mềm hiển thị các đầu kết nối IPv4 theo cách này khi dùng một socket IPv6 cho cả hai giao thức.

Làm sao chuyển địa chỉ 64:ff9b:: sang IPv4?

Lấy 32 bit cuối. 64:ff9b::/96 là prefix well-known của NAT64, nên 64:ff9b::c000:221 là host IPv4 192.0.2.33, cũng viết được là 64:ff9b::192.0.2.33. Bạn gặp những địa chỉ này trên mạng chỉ có IPv6, nơi DNS64 tạo chúng từ bản ghi A của host và bộ chuyển đổi NAT64 đưa lưu lượng sang IPv4. Prefix này không bao giờ được chứa địa chỉ IPv4 riêng.

Vì sao công cụ hỏi độ dài prefix NAT64 của mạng?

Vì một mạng có thể dùng prefix NAT64 riêng dài 32, 40, 48, 56, 64 hoặc 96 bit, và vị trí của địa chỉ IPv4 phụ thuộc vào độ dài đó. Ví dụ với /48, địa chỉ IPv4 bị tách ra hai bên các bit 64 đến 71, vốn luôn bằng 0. Chỉ nhìn địa chỉ thì không biết được độ dài, và RFC 8215 cấm phỏng đoán với khối 64:ff9b:1::/48, nên công cụ liệt kê mọi khả năng.

Địa chỉ IPv6 tương thích IPv4 là gì?

Đó là một định dạng cũ, ::/96, đặt địa chỉ IPv4 vào 32 bit cuối sau 96 bit 0, như ::192.0.2.1. RFC 4291 đã đánh dấu nó lỗi thời và các cơ chế chuyển dịch sang IPv6 hiện nay không dùng nó, nên bạn chủ yếu gặp nó trong cấu hình cũ và các bản xuất cấu hình tường lửa. Công cụ vẫn đọc nó và đánh dấu là lỗi thời, nhưng không bao giờ coi :: hay ::1 là IPv4.

Làm sao lấy địa chỉ IPv4 từ một địa chỉ IPv6 bằng Python?

Dùng module ipaddress. Với một IPv6Address, .ipv4_mapped trả về địa chỉ IPv4 trong ::ffff:0:0/96, .sixtofour trả về địa chỉ trong 2002::/16, và .teredo trả về cặp địa chỉ máy chủ và máy khách trong 2001::/32; mỗi thuộc tính trả về None với các địa chỉ khác. Python không có thuộc tính cho NAT64 hay ISATAP, nên với chúng bạn tự lấy đúng 32 bit, như công cụ này làm.

Chuyển đổi một địa chỉ có làm thay đổi kết nối của tôi không?

Không. Công cụ chỉ đọc văn bản bạn nhập và cho thấy những gì được ghi bên trong; không có gì trên máy tính hay mạng của bạn thay đổi, và không có gì được gửi đi. Để thật sự dùng IPv4 thay vì IPv6, hãy đổi ưu tiên địa chỉ của máy tính, như phần buộc dùng IPv4 giải thích. Để xem địa chỉ IPv4 mà kết nối của bạn đang có, hãy mở IP Của Tôi Là Gì.

Làm sao ưu tiên IPv4 hơn IPv6 trên Windows?

Đặt giá trị registry DisabledComponents thành 0x20 trong HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters từ cửa sổ lệnh có quyền quản trị viên, rồi khởi động lại; Microsoft khuyến nghị cách này thay vì vô hiệu hóa IPv6. Kiểm tra bằng netsh interface ipv6 show prefixpolicies: dòng ::ffff:0:0/96 phải xếp trên ::/0. Nếu chỉ cần cho một lệnh, ping /4 và tracert /4 chỉ dùng IPv4. Microsoft khuyên không nên bỏ chọn IPv6 trên bộ điều hợp mạng.

Vì sao địa chỉ 6to4 và Teredo giờ hiếm gặp?

Vì các relay và máy chủ của chúng đã bị tắt gần như ở mọi nơi. Theo số liệu đo của Google, khoảng hai phần ba người dùng IPv6 truy cập Google qua 6to4 hoặc Teredo vào tháng 9 năm 2008, và không còn ai từ tháng 7 năm 2021. RFC 7526 đã loại bỏ các relay anycast của 6to4, nhưng không loại bỏ chính định dạng 2002::/16. Bạn vẫn có thể gặp các địa chỉ này trong log cũ, quy tắc tường lửa và tài liệu.

Địa chỉ tôi dán vào có được gửi tới máy chủ của bạn không?

Không. Việc chuyển đổi chạy trong trình duyệt của bạn bằng mã của chính trang, vì vậy kết quả hiện ra ngay khi bạn gõ. Liên kết được sao chép giữ địa chỉ sau dấu # trong URL, phần mà trình duyệt không bao giờ gửi tới máy chủ, nên ai mở liên kết cũng thấy cùng kết quả. Chỉ khi script của trang không tải được, nút Chuyển đổi mới chuyển sang một yêu cầu trang thông thường. Không có gì được lưu lại.

Còn thiếu điều gì?Đề xuất tính năng hoặc công cụ mới