Возможный дубликат:
Могу ли я привязать (большой) блок адресов к интерфейсу?
У меня блок / 48 IPv6. Я бы хотел сделать это:
$ wget --bind-address=<1st-ipv6> http://www.some-url.com
$ wget --bind-address=<2nd-ipv6> http://www.some-url.com
$ wget --bind-address=<3rd-ipv6> http://www.some-url.com
etc...
для любого из 2 ^ 80 доступных IP-адресов в блоке my / 48.
Согласно моим тестам, назначение большого количества IP-адресов интерфейсу замедляет работу (с точки зрения HTTP-запросов в секунду). И, очевидно, я не могу назначить миллиарды IP-адресов одному интерфейсу. Есть ли способ указать Linux принимать любой IP-адрес, принадлежащий моему блоку / 48, или изменить wget, чтобы это можно было сделать?
17 января 2013 РЕДАКТИРОВАТЬ: Я узнал, как это сделать. Ваша версия ядра должна быть не ниже 3.3, потому что с этой версии применяется этот патч: http://lists.openwall.net/netdev/2011/11/08/8
Затем вам нужно запустить как root (как сказал Дэвид Шварц):
# ip -6 route add local your_ipv6_block/48 dev lo
Вы должны назначить этот маршрут интерфейсу lo, даже если он не будет исходящим интерфейсом для выхода в Интернет.
Затем вам нужно изменить источники wget. В src / connect.c внутри функции connect_to_ip () после создания сокета добавьте следующее:
setsockopt(sock, SOL_IP, IP_FREEBIND, &v, sizeof(v));
Затем скомпилируйте wget (компилятор может пожаловаться на то, что IP_FREEBIND не определен, как решить эту проблему здесь не рассматривается) и установите его.
Тогда вы сможете успешно:
$ wget --bind-address=<any_ipv6_in_your_block> http://www.some-url.com
Предполагая, что вы делаете это для нагрузочного тестирования своего веб-сервера, вы можете взглянуть на завиток
Это будет делать запросы к веб-серверу и использовать разные IP-адреса клиента для каждого запроса, он также может запрашивать разные страницы в одном и том же соединении, имитируя пользователя, например, переход на страницу входа и вход в систему, затем выход из системы и т. Д.
Он будет работать с IPv4 и IPv6 и настроит для вас IP-адреса, поэтому все, что вам нужно сделать, это указать ему диапазон IP-адресов, URL-адрес и максимальное количество подключений и одновременных подключений, а затем запустить команду.