LINUX.ORG.RU
решено ФорумAdmin

На 1 сервер 5000 IP

 , , , ,


1

2

Как на 1 интерфейс навешать 5000 адресов и чтобы запросы шли рэндомно с этих IP?

Хочу что-то типа

iptables -A POSTROUTING -d 10.0.0.2/32 -j SNAT --to-source x.x.x.x

Но чтобы x.x.x.x подменялся рэндомно. Или нужно прописать в iptables 5000 правил?
Хочу потестировать сайт, но чтобы запросы на nginx шли со случайных адресов. Как лучше сделать? На тестируемом сервере думаю делать маршрут по умолчанию на 10.0.0.3(сервер с которого будут запросы идти)

★★★★

Херасе ты уникум.
Технически, навесить можно было бы чем-то типа:

for ip in $(cat iplist.txt);do ip a a $ip dev eth0;done

Но это явно не то, что тебе надо.
А надо идти от задачи - что именно ты nginx собрался проверять

zolden ★★★★★
()
Ответ на: комментарий от zolden

Сделал так

$ips = file("ips.txt");
$port_local_start = 40000;
$port_local_end = 45000;
$i=0;
shell_exec("iptables -t nat -F");
for($port=$port_local_start; $port < $port_local_end; $port++){
    $ip = trim(array_pop($ips));
    $cmd = "iptables -t nat -A POSTROUTING -d 10.0.0.2/32 -p tcp --sport {$port}  -j SNAT --to-source {$ip}";
    shell_exec($cmd);
}

Предварительно уменьшив диапозон локальных портов
sysctl -w net.ipv4.ip_local_port_range="40000    45000"

Вроде работает )
В /var/log/nginx/access.log рэндомные адреса запросов, то что и нужно было

gobot ★★★★
() автор топика

Что-то плохо работает. Конектится через раз как то. Если пачкой сразу 10 конектов запускать на 443 порт, то нормально, если поочередно 1 раз в сек., то затыкается рэндомно, то на 6 конекте, то на 8, то на 2... Соединение висит со статусом SYN_SENT. Посмотрел tcpdump, действительно сервер посылает SYN+ACK, но клиент не посылает ACK

Проверяю так

for($i=0; $i<= 10; $i++){

	$sockets[$i] = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
	$conn = socket_connect($sockets[$i], "10.0.0.2", 443);

}

Выпадает с ошибкой
socket_connect(): unable to connect [110]: Connection timed out


Иногда проходят все 10 соединений сразу, иногда затыкается. Ничего не понимаю )

gobot ★★★★
() автор топика
Ответ на: комментарий от gobot

сервер посылает SYN+ACK, но клиент не посылает ACK

Ошибка, SYN+ACK не посылается сервером, клиент шлет 5 раз SYN и на этом все, ответа не поступает. Не пойму почему случайным образом такое происходит

gobot ★★★★
() автор топика

Вообще, для таких задач очень удобно использовать TPROXY/IP_TRANSPARENT.

У вменяемого сетевого софта обычно есть возможность указать локальный адрес, с которого оно будет выполнять коннекты.

При наличии исходников добавляем туда «setsockopt(SOL_IP,IP_TRANSPARENT)» и можно биндиться на произвольный адрес.

( Теоретически, тоже самое можно сделать без исправления софта, через sysctl net.ipv4.ip_nonlocal_bind=1 )

Дальше простенький сетап на машине с которой ведется тестирование

iptables -t mangle -N DIVERT
iptables -t mangle -A DIVERT -j MARK --set-mark 1
iptables -t mangle -A DIVERT -j ACCEPT
iptables -t mangle -A PREROUTING -p tcp -m socket --sport 80 -s xx.xx.xx.xx -j DIVERT

ip rule add fwmark 1 lookup 100
ip route add local 0.0.0.0/0 dev lo table 100
xx.xx.xx.xx:80 - это адрес и порт сервиса на который мы хотим подключаться с произвольного адреса.

На сервере нужно добавить машрут для блока адресов с которого ведется тестирование, чтоб пакеты возвращались к отправителю.

vel ★★★★★
()
Ответ на: комментарий от vel

На сервере нужно добавить машрут для блока адресов с которого ведется тестирование

А где этот блок указывается? Этот пример будет работать только после перекомпиляции программы и добавления в нее setsockopt?

gobot ★★★★
() автор топика
Ответ на: комментарий от gobot

начни с простого - без шаманства с фейковыми IP все твои пятьтыщ запростов всегда проходят? я вот сомневаюсь, есьчестно

anonymous
()
Ответ на: комментарий от gobot
ip ro add 10.x.0.0/16 via <ip_test_gw>

тестировать адресами из сети 10.x.0.0/16

vel ★★★★★
()
Ответ на: комментарий от anonymous

Два чаю этому парню. Потыкай сначала с помощью ApacheBench. Тулза понятнее васянских велосипедов.

anonymous
()
Ответ на: комментарий от anonymous

Я не делаю 5000 запросов.

gobot ★★★★
() автор топика
Ответ на: комментарий от anto215

Нет никакого флуда, тест из поочередных 10 конектов, из которых рэндомно не срабатывает 1-3

gobot ★★★★
() автор топика

Ку всем ) Разобрался вроде почему сервер не посылает на некоторые IP SYN_ACK. Это невалидные адреса, которые генератор нагенерил

Например 225.169.121.33

https://ipinfo.io/225.169.121.33
Some IP addresses and IP ranges are reserved for special use, such as for local or private networks, and should not appear on the public internet. 


Теперь вопрос другой: где найти генератор валидных IP адресов? ) Гугл по запросу «ip valid generator» выдает генераторы, но они все равно чушь генерят

gobot ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.