Рейтинг:0

Привязка к случайному IP-адресу из подсети IPv6 (/64) не работает

флаг cn

У меня есть сервер 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)

Что я делаю не так? Заранее большое спасибо!

Michael Hampton avatar
флаг cz
Этот процесс позволяет принимать входящие соединения только в указанной сети. Он не поддерживает исходящие соединения. Добавьте такие IPv6-адреса непосредственно в сетевой интерфейс.
003random avatar
флаг cn
@MichaelHampton спасибо за ваш ответ. Я могу подтвердить, что это работает, когда я добавляю IP-адреса, которые хочу использовать, непосредственно в интерфейс, но это не будет правильно масштабироваться? В подсети много адресов, и держу пари, что добавить их все в интерфейс не получится. Я что-то читал про freebind и anyIP. они также применяются только к предстоящим соединениям?
Michael Hampton avatar
флаг cz
Да, FreeBind и AnyIP применимы к входящим соединениям, и да, не очень хорошо масштабируются для добавления отдельных адресов в интерфейс. Добавление большого количества адресов для исходящих соединений — это не то, что обычно делают и даже не думают об этом. Вам _действительно_ нужно это делать? Я бы предположил, что вы этого не сделаете.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.