Hiện Tượng

90phut tv trực tiếp bóng đá 90 phút tv,88 Win Game Bài Lá

Lọc Địa Chỉ IPv6 Công Cộng Đúng Qua Chỉ Dẫn (Ký Ức Về Việc Tối Ưu IPv6 DDNS)

HowieHz
2024-02-06
Triển Khai & Vận Hành > Nâng Cao Hiệu Suất > Kỹ Thuật Script
Hệ Thống - Linux


Máy chủ có nhiều địa chỉ IPv6, nhưng dịch vụ DDNSGo không thể nhận đúng địa chỉ.


Quá Trình Nghiên Cứu

  1. Lựa chọn qua giao diện mạng: Cách này quá chậm và không đảm bảo luôn khả dụng.
  2. Lựa chọn qua tên card mạng: Không đảm bảo chính xác mỗi lần khởi động lại thiết bị mạng (tác giả đã phát hiện rằng địa chỉ thứ hai thường là hợp lệ, nhưng sau khi khởi động lại modem quang thì cách này không còn hiệu quả nữa).
  3. Sử dụng lệnh từ hệ thống: Lệnh mặc định cung cấp bởi dự án DDNSGo không hoạt động như mong muốn.

Cách Tạo Một Chỉ Dẫn Chính Xác

Dự án DDNSGo cung cấp lệnh sau:

1
ip -6 addr | grep inet6 | awk -F '[ \t]+|/' '$3 == "::1" { next;} $3 ~ /^fe80::/ { next;} /inet6/ {print $3}'

Chúng ta có thể tùy chỉnh lệnh này để phù hợp với tình huống cụ thể.

Bước 1: Sử dụng ip -6 addr để kiểm tra địa chỉ IPv6 của card mạng.
Tác giả sử dụng mạng dây kết nối qua eth0, và chỉ có eth0 nhận được địa chỉ IPv6 bắt đầu bằng “24”. Vì vậy, eth0 là card mạng cần lọc.

Đây là đầu ra mẫu của máy chủ tác giả (đã xử lý thông tin nhạy cảm):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 state UNKNOWN qlen 1000
    inet6 ::1/128 scope host noprefixroute
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
    inet6 2409:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xx/128 scope global deprecated dynamic noprefixroute
       valid_lft 2001sec preferred_lft 0sec
    inet6 fd02:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:c3a2/64 scope global deprecated dynamic noprefixroute
       valid_lft 5998sec preferred_lft 0sec
    inet6 2409:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/64 scope global dynamic noprefixroute
       valid_lft 7014sec preferred_lft 3414sec
    inet6 fe80::xxxx:xxxx:xxxx:xxxx/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
...

Do đó, đoạn lệnh đầu tiên có thể được thay đổi thành ip -6 addr show eth0.

Tiếp theo, thử nghiệm lệnh ip -6 addr show eth0 | grep inet6 sẽ cho kết quả sau:

1
2
3
4
inet6 24xx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xx/128 scope global dynamic noprefixroute
inet6 fd02:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/64 scope global deprecated dynamic noprefixroute
inet6 24xx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/64 scope global dynamic noprefixroute
inet6 fe80::xxxx:xxxx:xxxx:xxxx/64 scope link noprefixroute

Như chúng ta biết, các địa chỉ có nhãn deprecated là những địa chỉ bị khai tử hoặc hết hạn. Chúng không thể sử dụng được trong thực tế. Để kiểm tra sự ổn định, bạn có thể dùng công cụ ping trực tuyến hoặc kết nối laptop qua điểm nóng di động để đảm bảo rằng tất cả các thiết lập mạng (bộ định tuyến, modem quang, v.v.) đều đang hoạt động bình thường.

Qua nhiều lần thử nghiệm, tác giả nhận thấy rằng địa chỉ /128 có thể bị đánh dấu là deprecated hoặc không, nhưng dù thế nào nó cũng không thể liên lạc được. Do đó, đoạn lệnh grep inet6 đã được sửa thành grep 'inet6 240[a-f:A-F 0-9]*/64'.

Sau một tuần vận hành ổn định, mạng bị ngừng do thiếu phí thanh toán. Sau khi nạp tiền và yêu cầu bộ định tuyến tái cấu hình địa chỉ IP, dịch vụ trở nên không khả dụng.

Đầu ra của lệnh ip -6 addr show eth0 | grep inet6 lúc này trông như sau:

1
2
3
4
5
6
7
8
9
inet6 24xx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xx/128 scope global dynamic noprefixroute
inet6 24xx:xxxx:xxxx:xxxx:xxxx:xxxx:xxx:xxxx/64 scope global deprecated dynamic noprefixroute
inet6 fd02:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/64 scope global deprecated dynamic noprefixroute
inet6 24xx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/64 scope global deprecated dynamic noprefixroute
inet6 24xx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/64 scope global deprecated dynamic noprefixroute
inet6 24xx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/64 scope global deprecated dynamic noprefixroute
inet6 24xx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/64 scope global deprecated dynamic noprefixroute
inet6 24xx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/64 scope global dynamic noprefixroute
inet6 fe80::xxxx:xxxx:xxxx:xxxx/64 scope link noprefixroute

Rõ ràng, có rất nhiều địa chỉ với prefixlen 64 nhưng bị đánh dấu là deprecated. Đây là lý do tại sao việc cố định lấy địa chỉ thứ hai qua card mạng sẽ dẫn đến lỗi sau lần đầu tiên. Vì vậy, tác giả đã thêm lệnh grep -v 'deprecated' giữa hai bước để loại bỏ các địa chỉ không cần thiết.


Cập nhật ngày 25 tháng 2 năm 2024:
Một người dùng trên GitHub phản hồi rằng nếu đường truyền internet thường xuyên thay đổi, lệnh trên vẫn có thể trả về hai địa chỉ, và địa chỉ mới ở vị trí thứ hai mới là chính xác. Do đó, thêm lệnh tail -1 vào cuối cùng để chọn địa chỉ cuối cùng.


Lệnh Cuối Cùng

(Lưu ý: Thay eth0 bằng tên card mạng của bạn hoặc giữ nguyên ip -6 addr nếu không chắc chắn.)

1
ip -6 addr show enp1s0 | grep 'inet6 240[a-f:A-F 0-9]*/64' | grep -v 'deprecated' | awk -F '[ \t]+|/' '$3 == "::1" { next;} $3 ~ /^fe80::/ { next;} /inet6/ {print $3}' | tail -1

Bài Viết Liên Quan

  • 2025-03-19: Chia Sẻ Script CDN Tự Động Chuyển Sang Cloudflare Khi Đạt Giới Hạn Lưu Lượng
  • 2024-12-23: Script Gửi Tin Nhắn Hàng Loạt Cho Các Nhóm QQ Dựa Trên OneBot API

Trang Chủ | Lưu Trữ | Nhật Ký | Liên Kết Hữu Ích | Về Tác Giả

Built with Hugo
Theme Stack thiết kế bởi Jimmy