LINUX.ORG.RU
Форум — Admin  

ip_local_port_range

 ,


0

2

Приветствую. Есть такой параметр net.ipv4.ip_local_port_range - диапазон портов для исходящих соединений. Можно ли как-то его применить не глобально для всей системы, а для процесса или пользователя, или хоста к которому устанавливается соединение (самый идеальный вариант)?

Для чего это мне понадобилось: сервер некоторой конторы, куда мне нужно устанавливать tcp соединения(много соединений), сидит за роутером. Этот роутер начинает блокировать соединения при большом разбросе исходящих портов. Если поставить

net.ipv4.ip_local_port_range = 40000 50000
то всё ок. Блокировки на их стороне больше не срабатывают. Но такого диапазона мало - вижу ошибки в логах (например, от nginx):
[crit] 6012#0: *278755918 connect() to x.x.x.196:80 failed (99: Cannot assign requested address)

Возможно, у них там баг в прошивке или фича защиты от (D)DoS. Пытаются фиксить свой роутер уже пару месяцев, но толку нет.

★

какой программой тебе нужно устанавливать соединения на этот сервер? Может имеет смысл поковырять именно ее?

Pinkbyte ★★★★★
()

а как насчёт РАТ?

zolden ★★★★★
()

Pinkbyte:

Программа самописная на Си. Соединение устанавливает curl. Могу попробовать сделать что-то вроде этого(последний коммент), если других вариантов не будет.

zolden:

Я только за. Уже думал на эту тему - о подмене src port. Но я плохо себе представляю как это должно работать. Например, как выставить случайный исходящий порт в выбранном диапазоне в правиле iptables? И установится ли tcp соединение если я правилом перепишу порт?

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

Вопрос в том, чтобы не лезть в чужой проект. Сделать всё на уровне системы. Есть же фичи типа cgroups например(да, оно не умеет то, что мне надо). Ну и iptables хорош при правильном использовании. Да мало ли других способов вставить временный костыль.

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

не лезть в чужой проект
вставить временный костыль

Я конечно дико извиняюсь, если следующим выражением тебя обижу, не хочу учить кого-то делать работу, но тебе не кажется что ставить костыли вместо того чтобы поставить в известность авторов чужого проекта о проблеме - это немного неправильное решение?

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

Согласен, что решение неправильное, если оно постоянное. Но если ненадолго, то можно. Поэтому я собирался поставить именно временный костыль на несколько дней, пока разработчик не переключится на этот проект и не придумает решение. А если очень повезет - так вообще на той стороне железку пофиксят. Я убираю костыль, все довольны. Такие дела.

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

Оно и так в KVM виртуалке уже вертится.

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

Решено. Сделал быстрофикс в самом приложении:

if (...тот самый сервер) 
{
    curl_easy_setopt(curl, CURLOPT_LOCALPORT, 15000);
    curl_easy_setopt(curl, CURLOPT_LOCALPORTRANGE, 10000);
}
Что означает использовать исходящий порт только в пределах от 15,000 до 25,000.

tcpdump показал, что всё правильно сделал.
Всё работает, все довольны.

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