Tôi có một máy chủ scaleway.com (DEV1-S) cung cấp cho tôi một mạng con /64 IPv6. Tôi muốn sử dụng IP từ mạng con này để thực hiện yêu cầu HTTP (sẽ sử dụng wget trong các ví dụ) nhưng tôi không thể làm cho nó hoạt động. Yêu cầu (với wget cũng như với các chương trình và ngôn ngữ lập trình khác) sẽ bị treo.
Địa chỉ IPv6 là 2001:bc8:1830:1b18::1, cổng là 2001:bc8:1830:1b18:: và mặt nạ mạng là 64.
Đang chạy địa chỉ ip -6
, trên máy chủ sạch/vừa tạo, sẽ xuất ra như sau:
root@test:~# ip -6 addr
1: lo: <LOOPBACK,UP,LOWER_UP> trạng thái mtu 65536 UNKNOWN qlen 1000
inet6 ::1/128 máy chủ phạm vi
hợp lệ_lft mãi mãi ưa thích_lft mãi mãi
2: ens2: <BROADCAST,MULTICAST,UP,LOWER_UP> trạng thái mtu 1500 UP qlen 1000
inet6 2001:bc8:1830:1b18::1/64 phạm vi toàn cầu
hợp lệ_lft mãi mãi ưa thích_lft mãi mãi
liên kết phạm vi inet6 fe80::dc2e:4cff:fe57:a019/64
hợp lệ_lft mãi mãi ưa thích_lft mãi mãi
Tôi đã đọc trên các diễn đàn và các câu hỏi/câu trả lời khác để bạn có thể liên kết với một địa chỉ từ mạng con, bạn cần chạy các lệnh sau:
ip add add local 2001:bc8:1830:1b18::/64 dev lo
tuyến ip thêm cục bộ 2001:bc8:1830:1b18::/64 dev ens2
sysctl -w net.ipv6.ip_nonlocal_bind=1
Sau các lệnh này, đầu ra của địa chỉ ip -6
là như sau:
root@test:~# ip -6 addr
1: lo: <LOOPBACK,UP,LOWER_UP> trạng thái mtu 65536 UNKNOWN qlen 1000
inet6 2001:bc8:1830:1b18::/64 phạm vi toàn cầu
hợp lệ_lft mãi mãi ưa thích_lft mãi mãi
inet6 ::1/128 máy chủ phạm vi
hợp lệ_lft mãi mãi ưa thích_lft mãi mãi
2: ens2: <BROADCAST,MULTICAST,UP,LOWER_UP> trạng thái mtu 1500 UP qlen 1000
inet6 2001:bc8:1830:1b18::1/64 phạm vi toàn cầu
hợp lệ_lft mãi mãi ưa thích_lft mãi mãi
liên kết phạm vi inet6 fe80::dc2e:4cff:fe57:a019/64
hợp lệ_lft mãi mãi ưa thích_lft mãi mãi
Bây giờ tôi có thể ping6, ví dụ: 2001:bc8:1830:1b18::9
thay vì chỉ 2001:bc8:1830:1b18::1
, nhưng chỉ từ máy chủ của riêng tôi. Không phải từ các máy chủ/mạng khác.
không có sysctl -w net.ipv6.ip_nonlocal_bind=1
, wget sẽ trả về cái này:
root@test:~# wget --bind-address=2001:bc8:1830:1b18::2 -v google.com
--2021-08-13 00:29:45-- http://google.com/
Đang phân giải google.com (google.com)... 2a00:1450:400e:802::200e, 142.250.179.174
Kết nối với google.com (google.com)|2a00:1450:400e:802::200e|:80... không thành công: Không thể chỉ định địa chỉ được yêu cầu.
Kết nối với google.com (google.com)|142.250.179.174|:80... không thành công: Họ địa chỉ không được giao thức hỗ trợ.
Bây giờ sau 3 lệnh, khi tôi chạy wget với cờ --bind-address được đặt thành một địa chỉ trong mạng con khác với 2001:bc8:1830:1b18::1
, yêu cầu sẽ bị treo vĩnh viễn:
root@test:~# wget --bind-address=2001:bc8:1830:1b18::1 google.com
--2021-08-12 23:55:48-- http://google.com/
Đang phân giải google.com (google.com)... 2a00:1450:400e:802::200e, 142.250.179.174
Đang kết nối với google.com (google.com)|2a00:1450:400e:802::200e|:80... đã kết nối.
Đã gửi yêu cầu HTTP, đang chờ phản hồi... 301 Đã di chuyển vĩnh viễn
Vị trí: http://www.google.com/ [theo sau]
--2021-08-12 23:55:48-- http://www.google.com/
Đang giải quyết www.google.com (www.google.com)... 2a00:1450:400e:80f::2004, 142.251.36.4
Đang kết nối với www.google.com (www.google.com)|2a00:1450:400e:80f::2004|:80... được kết nối.
Đã gửi yêu cầu HTTP, đang chờ phản hồi... 200 OK
Độ dài: không xác định [text/html]
Đang lưu vào: âindex.htmlâ
index.html [ <=> ] 13,03K --.-KB/s trong 0,009 giây
2021-08-12 23:55:48 (1,44 MB/s) - âindex.htmlâ đã lưu [13342]
root@test:~# wget --bind-address=2001:bc8:1830:1b18::2 google.com
--2021-08-12 23:55:52-- http://google.com/
Đang phân giải google.com (google.com)... 2a00:1450:400e:802::200e, 142.250.179.174
Đang kết nối với google.com (google.com)|2a00:1450:400e:802::200e|:80...
lsof
đối với quá trình wget nói như sau:
quên 3413 root 3u IPv6 58660 0t0 TCP [2001:bc8:1830:1b18::2]:56623->ams15s41-in-x0e.1e100.net:http (SYN_SENT)
Tôi đang làm gì sai?
Cảm ơn rất nhiều trước!