cấu hình các ứng dụng và công cụ dòng lệnh (như curl, ping, ssh, v.v.) để sử dụng IPv6 thay vì IPv4

cấu hình các ứng dụng và công cụ dòng lệnh (như curl, ping, ssh, v.v.) để sử dụng IPv6 thay vì IPv4

IPv6, hay Internet Protocol version 6, là thế hệ mới nhất của giao thức IP – nền tảng cốt lõi mà toàn bộ Internet hiện đại dựa vào để định tuyến và kết nối giữa các thiết bị. Trong khi IPv4 – phiên bản tiền nhiệm – vẫn đang được sử dụng rộng rãi trên toàn cầu, thì việc không gian địa chỉ IPv4 đã gần như cạn kiệt đang trở thành rào cản lớn trong thời đại mà số lượng thiết bị IoT, máy chủ và người dùng Internet không ngừng gia tăng.

IPv6 ra đời nhằm khắc phục những giới hạn đó. Ưu điểm lớn nhất của IPv6 là khả năng mở rộng vượt trội với không gian địa chỉ lên đến 2^128, so với chỉ 2^32 của IPv4. Điều này không chỉ giải quyết bài toán thiếu hụt địa chỉ IP mà còn mang lại nhiều cải tiến về hiệu suất, bảo mật và tính linh hoạt trong cấu trúc mạng.

Tuy nhiên, để khai thác tối đa sức mạnh của IPv6, người quản trị hệ thống và kỹ sư mạng cần thích ứng với một số thay đổi về công cụ và cấu hình mạng. Trong bài viết này, chúng ta sẽ cùng tìm hiểu cách sử dụng các công cụ phổ biến tương thích với IPv6 và hướng dẫn chi tiết cách cấu hình các dịch vụ mạng như SSH, web server và Firewall để hoạt động hiệu quả trên hạ tầng IPv6.

Kiểm tra mạng cơ bản với IPv6

Một số tiện ích đơn giản dùng để chẩn đoán sự cố mạng ban đầu được tạo ra với IPv4 làm tiêu chuẩn. Để xử lý IPv6, chúng ta có thể sử dụng các công cụ “đồng nghiệp” của nó cho lưu lượng IPv6.

Đầu tiên, để xem các địa chỉ IPv6 đang được cấu hình hiện tại trên máy chủ của bạn, bạn có thể sử dụng các công cụ của iproute2 với lệnh sau:

ip -6 addr show

Ví dụ xuất ra:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
    inet6 2400:6180:0:d0::41f/64 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::601:15ff:fe43:b201/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
    inet6 fe80::601:15ff:fe43:b202/64 scope link 
       valid_lft forever preferred_lft forever

Để in ra bảng định tuyến IPv6, bạn có thể sử dụng lệnh netstat như sau:

netstat -A inet6 -rn
Kernel IPv6 routing table
Destination                    Next Hop                   Flag Met Ref Use If
2400:6180:0:d0::/64            ::                         U    256 0     1 eth0
fe80::/64                      ::                         U    256 0     0 eth1
fe80::/64                      ::                         U    256 0     0 eth0
::/0                           2400:6180:0:d0::1          UG   1024 0     0 eth0
::/0                           ::                         !n   -1  1    90 lo
::1/128                        ::                         Un   0   1    20 lo
2400:6180:0:d0::41f/128        ::                         Un   0   1    86 lo
fe80::601:15ff:fe43:b201/128   ::                         Un   0   1    75 lo
fe80::601:15ff:fe43:b202/128   ::                         Un   0   1     0 lo
ff00::/8                       ::                         U    256 0     0 eth1
ff00::/8                       ::                         U    256 0     0 eth0
::/0                           ::                         !n   -1  1    90 lo

Nếu bạn thích sử dụng các công cụ của iproute2, bạn cũng có thể lấy được thông tin tương tự bằng lệnh:

ip -6 route show
2400:6180:0:d0::/64 dev eth0  proto kernel  metric 256 
fe80::/64 dev eth1  proto kernel  metric 256 
fe80::/64 dev eth0  proto kernel  metric 256 
default via 2400:6180:0:d0::1 dev eth0  metric 1024

Giờ bạn đã biết cách lấy thông tin IPv6 của chính mình, hãy cùng tìm hiểu cách sử dụng một số công cụ làm việc với IPv6.

Lệnh ping phổ biến vốn dĩ dành riêng cho IPv4. Phiên bản dành cho IPv6, hoạt động tương tự nhưng dùng địa chỉ IPv6, được đặt tên là ping6. Ví dụ, lệnh sau sẽ gửi gói tin tới giao diện loopback của hệ thống:

ping6 -c 3 ::1

Kết quả xuất ra sẽ như sau:

PING ::1(::1) 56 data bytes
64 bytes from ::1: icmp_seq=1 ttl=64 time=0.021 ms
64 bytes from ::1: icmp_seq=2 ttl=64 time=0.028 ms
64 bytes from ::1: icmp_seq=3 ttl=64 time=0.022 ms

--- ::1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.021/0.023/0.028/0.006 ms

Như bạn thấy, kết quả hoạt động giống như mong đợi, chỉ khác ở phiên bản giao thức được sử dụng.

Một công cụ khác mà bạn có thể tin dùng là traceroute. Có một phiên bản tương đương dành cho IPv6:

traceroute6 google.com

Ví dụ xuất ra:

traceroute to google.com (2404:6800:4003:803::1006) from 2400:6180:0:d0::41f, 30 hops max, 24 byte packets
 1  2400:6180:0:d0:ffff:ffff:ffff:fff1 (2400:6180:0:d0:ffff:ffff:ffff:fff1)  0.993 ms  1.034 ms  0.791 ms
 2  2400:6180::501 (2400:6180::501)  0.613 ms  0.636 ms  0.557 ms
 3  2400:6180::302 (2400:6180::302)  0.604 ms  0.506 ms  0.561 ms
 4  10gigabitethernet1-1.core1.sin1.he.net (2001:de8:4::6939:1)  6.21 ms  10.869 ms  1.249 ms
 5  15169.sgw.equinix.com (2001:de8:4::1:5169:1)  1.522 ms  1.205 ms  1.165 ms
 6  2001:4860::1:0:337f (2001:4860::1:0:337f)  2.131 ms  2.164 ms  2.109 ms
 7  2001:4860:0:1::523 (2001:4860:0:1::523)  2.266 ms  2.18 ms  2.02 ms
 8  2404:6800:8000:1c::8 (2404:6800:8000:1c::8)  1.741 ms  1.846 ms  1.895 ms

Bạn có thể đã quen với lệnh tracepath, phiên bản IPv6 của nó là:

tracepath6 ::1

Kết quả xuất ra:

1?: [LOCALHOST]                        0.045ms pmtu 65536
1:  ip6-localhost                                         0.189ms reached
1:  ip6-localhost                                         0.110ms reached
    Resume: pmtu 65536 hops 1 back 64

Nếu bạn cần giám sát lưu lượng truy cập vào máy, chương trình tcpdump thường được sử dụng. Bạn có thể sử dụng tcpdump để lọc chỉ lưu lượng IPv6 với biểu thức ip6 hoặc proto ipv6 sau các tùy chọn. Ví dụ, để nhanh chóng thu thập một bản tóm tắt lưu lượng IPv6 mà không làm chậm đầu ra, bạn có thể dùng lệnh:

tcpdump -t -n -i eth0 -s 512 -vv ip6 or proto ipv6

Kiểm tra thông tin DNS dành cho IPv6

Bạn có thể kiểm tra thông tin DNS cho các tên miền của mình bằng cách sử dụng các công cụ thông thường. Sự khác biệt chính là bạn sẽ truy vấn bản ghi AAAA, dùng để ánh xạ địa chỉ IPv6 thay vì bản ghi A chỉ dành cho IPv4.

Để lấy bản ghi địa chỉ IPv6 cho một tên miền, bạn có thể dùng lệnh host như sau:

host -t AAAA google.com

Kết quả xuất ra:

google.com has IPv6 address 2404:6800:4003:803::1004

Nếu bạn ưa thích sử dụng dig, bạn có thể dùng cú pháp sau:

dig google.com AAAA

Ví dụ xuất ra:

; <<>> DiG 9.8.1-P1 <<>> google.com AAAA
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14826
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;google.com.			IN	AAAA

;; ANSWER SECTION:
google.com.		299	IN	AAAA	2404:6800:4003:803::1006

;; Query time: 5 msec
;; SERVER: 8.8.4.4#53(8.8.4.4)
;; WHEN: Tue Apr  1 13:59:23 2014
;; MSG SIZE  rcvd: 56

Như bạn thấy, việc kiểm tra DNS cho các tên miền với địa chỉ IPv6 cũng đơn giản như với IPv4.

Dịch vụ mạng Với IPv6

Hầu hết các dịch vụ mạng phổ biến của bạn nên có khả năng xử lý lưu lượng IPv6. Đôi khi, chúng cần các tham số hay cú pháp đặc biệt, hoặc thậm chí cung cấp một phiên bản thay thế riêng cho IPv6.

Cấu hình SSH

Với SSH, daemon có thể được cấu hình để lắng nghe trên địa chỉ IPv6. Điều này được điều khiển trong tập tin cấu hình mà bạn có thể mở bằng:

sudo nano /etc/ssh/sshd_config

Lệnh ListenAddress chỉ định địa chỉ mà daemon SSH sẽ liên kết đến. Với địa chỉ IPv4, nó sẽ như sau:

ListenAddress 111.111.111.111:22

Lệnh này lắng nghe địa chỉ IPv4 111.111.111.111 trên cổng 22. Đối với địa chỉ IPv6, bạn có thể đặt địa chỉ trong ngoặc vuông:

ListenAddress [1341:8954:a389:33:ba33::1]:22

Lệnh này cho daemon SSH lắng nghe địa chỉ 1341:8954:a389:33:ba33::1 trên cổng 22. Để lắng nghe trên tất cả các địa chỉ IPv6 hiện có, bạn có thể dùng:

ListenAddress ::

Sau khi thay đổi, hãy nhớ tải lại daemon:

sudo service ssh restart

Ở phía client, nếu daemon mà bạn đang kết nối được cấu hình để lắng nghe cả IPv4 và IPv6, bạn có thể ép buộc client chỉ sử dụng IPv6 bằng cách sử dụng tham số -6 như sau:

ssh -6 username@host.com

Cấu hình máy chủ Web

Tương tự như SSH, các máy chủ web cũng cần được cấu hình để lắng nghe trên địa chỉ IPv6.

Trong Apache, bạn có thể cấu hình máy chủ để phản hồi các yêu cầu trên một địa chỉ IPv6 cụ thể sử dụng cú pháp sau:

Listen [1341:8954:a389:33:ba33::1]:80

Lệnh trên cho biết máy chủ sẽ lắng nghe địa chỉ cụ thể này trên cổng 80. Bạn có thể kết hợp cùng với địa chỉ IPv4 để tăng tính linh hoạt:

Listen 111.111.111.111:80
Listen [1341:8954:a389:33:ba33::1]:80

Trong thực tế, nếu bạn muốn lắng nghe trên tất cả các giao diện với tất cả các giao thức trên cổng 80, bạn có thể chỉ cần dùng:

Listen 80

Ở cấp độ VirtualHost, bạn cũng có thể chỉ định địa chỉ IPv6. Ví dụ, bạn có thể cấu hình VirtualHost để khớp với cả địa chỉ IPv4 và IPv6:

<VirtualHost 111.111.111.111:80, [1341:8954:a389:33:ba33::1]:80>
    . . .
</VirtualHost>

Sau đó, hãy khởi động lại dịch vụ để áp dụng thay đổi:

sudo service apache2 restart

Nếu bạn thích sử dụng Nginx làm máy chủ web, bạn có thể cấu hình tương tự. Đối với chỉ thị listen, với lưu lượng IPv6, bạn có thể dùng:

listen [1341:8954:a389:33:ba33::1]:80;

Trên Linux, lệnh này cũng kích hoạt lưu lượng IPv4 trên cổng 80 do hệ thống tự động ánh xạ các yêu cầu IPv4 sang địa chỉ IPv6. Điều này có thể khiến bạn không thể chỉ định địa chỉ IPv6 và IPv4 riêng biệt như sau:

listen [1341:8954:a389:33:ba33::1]:80;
listen 111.111.111.111:80;

Lệnh trên sẽ gây lỗi vì cổng đã bị ràng buộc bởi một dịch vụ khác. Nếu bạn muốn sử dụng các chỉ thị riêng biệt, bạn phải tắt tính năng ánh xạ này bằng cách sử dụng sysctl:

sysctl -w net.ipv6.bindv6only=1

Để đảm bảo tùy chọn này tự động được áp dụng khi khởi động, thêm dòng sau vào tập tin /etc/sysctl.conf:

sudo nano /etc/sysctl.conf

Thêm vào:

. . .
net.ipv6.bindv6only=1

Sau đó, bạn có thể dùng cấu hình tương tự như trước bằng cách thêm tham số ipv6only=on vào chỉ thị lắng nghe IPv6:

listen [1341:8954:a389:33:ba33::1]:80 ipv6only=on;
listen 111.111.111.111:80;

Cuối cùng, khởi động lại Nginx để áp dụng thay đổi:

sudo service nginx restart

Cấu hình tường lửa

Nếu bạn quen với việc cấu hình các quy tắc tường lửa thông qua các công cụ như iptables, bạn sẽ vui mừng khi biết rằng có công cụ tương đương cho IPv6 có tên là ip6tables.Với biến thể IPv6, bạn chỉ cần thay thế lệnh bằng ip6tables để quản lý các quy tắc lọc gói IPv6. Ví dụ, để liệt kê các quy tắc IPv6, bạn có thể chạy:

sudo ip6tables -L

Kết quả xuất ra sẽ có dạng:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Nếu bạn sử dụng công cụ ufw, thì chúc mừng bạn, bạn đã xong rồi! Công cụ ufw cấu hình cả hai ngăn xếp (IPv4 và IPv6) cùng lúc trừ khi được chỉ định khác. Bạn có thể phải thêm các quy tắc cho các địa chỉ IPv6 cụ thể, nhưng không cần sử dụng công cụ khác.

Cấu hình TCP Wrappers

Nếu bạn sử dụng TCP wrappers để kiểm soát quyền truy cập vào máy chủ thông qua các tập tin /etc/hosts.allow và /etc/hosts.deny, bạn có thể sử dụng cú pháp IPv6 tương tự để khớp các quy tắc nguồn.

Ví dụ, bạn có thể chỉ cho phép một địa chỉ IPv4 và một địa chỉ IPv6 kết nối qua SSH bằng cách chỉnh sửa tập tin /etc/hosts.allow như sau:

sudo nano /etc/hosts.allow

Thêm vào:

. . .
sshd: 111.111.0.0/255.255.254.0, [1341:8954:a389:33::]/64

Như bạn thấy, việc điều chỉnh các quy tắc TCP wrapper để áp dụng cho địa chỉ IPv6 là rất đơn giản. Bạn có thể tìm hiểu thêm về cách định dạng địa chỉ IP và subnet tại các tài liệu liên quan.

Kết luận

Hy vọng rằng sau khi tham khảo hướng dẫn này, bạn sẽ thấy rằng việc chuyển đổi sang IPv6 – hoặc triển khai song song cả IPv4 và IPv6 (dual stack) – hoàn toàn không phức tạp như tưởng tượng.

Tùy thuộc vào hệ thống và dịch vụ mạng bạn đang vận hành, có thể bạn sẽ cần rà soát và điều chỉnh một vài cấu hình để đảm bảo IPv6 được áp dụng đúng cách và tối ưu hiệu suất. Tuy nhiên, với kiến thức bạn vừa tiếp thu, bạn đã có nền tảng vững chắc để tự tin quản lý, cấu hình và vận hành các dịch vụ mạng tương thích IPv6 một cách hiệu quả và chuyên nghiệp.

<div class=”author”>By Justin Ellingwood</div>

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *