У меня есть сервер scaleway.com (DEV1-S), который предлагает мне подсеть /64 IPv6. Я хочу использовать IP-адрес из этой подсети для выполнения HTTP-запроса (в примерах будет использовать wget), но я не могу заставить его работать. Запрос (с wget, а также с другими программами и языками программирования) будет зависать.
Адрес IPv6 — 2001:bc8:1830:1b18::1, шлюз — 2001:bc8:1830:1b18:: и маска сети — 64.
Бег ip -6 адрес
, на чистом/только что созданном сервере выведет следующее:
root@test:~# ip -6 адрес
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 состояние НЕИЗВЕСТНО qlen 1000
inet6 :: 1/128 узел области видимости
valid_lft навсегда
2: ens2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 состояние UP qlen 1000
inet6 2001:bc8:1830:1b18::1/64 глобальная область действия
valid_lft навсегда
inet6 fe80::dc2e:4cff:fe57:a019/64 ссылка на область видимости
valid_lft навсегда
Читал на форумах и другие вопросы/ответы, что для того, чтобы можно было привязываться к адресу из подсети, нужно выполнить следующие команды:
ip add add local 2001:bc8:1830:1b18::/64 dev lo
ip route добавить локальный 2001:bc8:1830:1b18::/64 dev ens2
sysctl -w net.ipv6.ip_nonlocal_bind=1
После этих команд вывод ip -6 адрес
заключается в следующем:
root@test:~# ip -6 адрес
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 состояние НЕИЗВЕСТНО qlen 1000
inet6 2001:bc8:1830:1b18::/64 глобальная область видимости
valid_lft навсегда
inet6 :: 1/128 узел области видимости
valid_lft навсегда
2: ens2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 состояние UP qlen 1000
inet6 2001:bc8:1830:1b18::1/64 глобальная область действия
valid_lft навсегда
inet6 fe80::dc2e:4cff:fe57:a019/64 ссылка на область видимости
valid_lft навсегда
Теперь я могу ping6, например. 2001:bc8:1830:1b18::9
вместо только 2001:bc8:1830:1b18::1
, но только с моего собственного сервера. Не с других серверов/сетей.
Без sysctl -w net.ipv6.ip_nonlocal_bind=1
, wget вернет это:
root@test:~# wget --bind-address=2001:bc8:1830:1b18::2 -v google.com
--2021-08-13 00:29:45-- http://google.com/
Разрешение google.com (google.com)... 2a00:1450:400e:802::200e, 142.250.179.174
Подключение к google.com (google.com)|2a00:1450:400e:802::200e|:80... не удалось: невозможно назначить запрошенный адрес.
Подключение к google.com (google.com)|142.250.179.174|:80... не удалось: семейство адресов не поддерживается протоколом.
Теперь, после 3 команд, когда я запускаю wget с флагом --bind-address, установленным на адрес в подсети, отличной от 2001:bc8:1830:1b18::1
, запрос зависнет навсегда:
root@test:~# wget --bind-address=2001:bc8:1830:1b18::1 google.com
--2021-08-12 23:55:48-- http://google.com/
Разрешение google.com (google.com)... 2a00:1450:400e:802::200e, 142.250.179.174
Подключение к google.com (google.com)|2a00:1450:400e:802::200e|:80... установлено.
HTTP-запрос отправлен, ожидается ответ... 301 Перемещено навсегда
Местоположение: http://www.google.com/ [далее]
--2021-08-12 23:55:48-- http://www.google.com/
Разрешение www.google.com (www.google.com)... 2a00:1450:400e:80f::2004, 142.251.36.4
Подключение к www.google.com (www.google.com)|2a00:1450:400e:80f::2004|:80... установлено.
HTTP-запрос отправлен, ожидается ответ... 200 OK
Длина: не указана [текст/html]
Сохранение в: «index.html».
index.html [ <=> ] 13,03 КБ --.-КБ/с за 0,009 с
12.08.2021, 23:55:48 (1,44 МБ/с) — «index.html» сохранен [13342]
root@test:~# wget --bind-address=2001:bc8:1830:1b18::2 google.com
--2021-08-12 23:55:52-- http://google.com/
Разрешение google.com (google.com)... 2a00:1450:400e:802::200e, 142.250.179.174
Подключение к google.com (google.com)|2a00:1450:400e:802::200e|:80...
lsof
для процесса wget говорит следующее:
wget 3413 корень 3u IPv6 58660 0t0 TCP [2001:bc8:1830:1b18::2]:56623->ams15s41-in-x0e.1e100.net:http (SYN_SENT)
Что я делаю не так?
Заранее большое спасибо!