LINUX.ORG.RU
ФорумAdmin

Локальная эмуляция подключение к удаленному серверу

 ,


0

3

Здравствуйте! Есть программка, которая во время запуска создает подключения к удаленному серверу (около 3000 подключений, а возможно и больше будет). Из-за того что задержка до сервера примерно 250-400мс возникает проблема времени запуска приложения, т.к. на открытие 3х портов требуется около 1-2 секунд. В сумме ожидание запуска составляет около 20-30минут - что недопустимо.
Код программы исправить не возможно. Новый софт писать нет смысла по различным причинам.
Как можно обмануть прогу с помошью баш скриптика, который будет запускать файл програмки и пока не наберется определенное количество threads будет эмулировать удаленный сервер локально (дабы уменьшить задержку до минимума), а после выключать подмену.
При этом программа все время должна видеть один и тотже ип адрес и порт.
Выглядит безумно, но мне кажется что-нибудь придумать реально...
Заранее Благодарен за помощь!



Последнее исправление: cetjs2 (всего исправлений: 1)

подключения к удаленному серверу (около 3000 подключений, а возможно и больше будет).

Не надо так делать. НИКОГДА.

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

Почему так не надо делать?
Этот софт так работает последние 5 лет.
Возрасло количество подключений со временем. А после смены настроек нужно ребутить. Меняются настройки раза в 3-4 в день. А требуется безперебойная работа этого софта. Если раньше 2-3мин были ок, то сейчас уже не катит.
Программиста кто писал давно нету.

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

Не вижу ничего криминального ускорить открытие портов виртуально локально, а потом перевести их на реальный ип и порт.
Возможно ли такое сделать?

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

Может через nginx можно проксировать трафик локально и пересылать туда куда надо. Порты же будут локально моментально открываться?

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

Программиста кто писал давно нету.

Я бы тоже исчез после такого.

Что за софтина-то?

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

локально моментально открываться?

Да, но коннекты до сервера один фиг поднимать придётся.
Решение в лоб - поднять vpn до сервера.

devl547 ★★★★★
()

Открытие 3000 соединений требует времени чуть больше, чем открытие самого медленного из них:

int i, count = 0;
int sock[3000];
struct sockaddr_in sa;
struct epoll_event ev[100]; /* handle 100 up to events per iteration */
int epfd = epoll_create(10);
assert(epfd != -1);
for (i = 0; i < sizeof(sock) / sizeof(*sock); i++) {
  int value = 1;
  sock[i] = socket(PF_INET, SOCK_STREAM, 0);
  assert(sock[i] != -1);
  /* make socket nonblocking */
  assert(ioctl(sock[i], FIONBIO, &value) != -1);
  /* connect */
  if (connect(sock[i], (struct sockaddr*)&sa, sizeof(sa)) == -1) {
    assert(errno == EINPROGRESS);    
    /* if connection didn't succeeded immediately, schedule it for monitoring */
    ev->events = EPOLLOUT | EPOLLERR | EPOLLONESHOT;
    ev->data.u32 = i;
    assert(epoll_ctl(epfd, EPOLL_CTL_ADD, sock[i], ev) != -1);
  }
}
/* the interesting part goes here */

Иными словами, могу заставить вашу программу совершать все три тысячи соединений за несколько (1-2) секунд, если сойдемся в цене. Забесплатно я дал очень жирный намек, как это может быть сделано.

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

Спасибо за советы. Я попробывал через firehol вот так:

dnat to 1.1.1.1:10100 proto tcp dport 100
Пакеты вроде уходят и сервак в момент грузится, а вот ответа от удаленного сервера не приходит...

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

В общем, пиши, как начальство дозреет до диалога о цене (до 9 декабря включительно). Скажу только, что стоит такое не одну, не две и даже не пять т. р.

kawaii_neko ★★★★
()

Есть программка, которая во время запуска создает подключения к удаленному серверу (около 3000 подключений, а возможно и больше будет).

Новый софт писать нет смысла по различным причинам.

сделай бочку.

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

Прямо в точку =) Благодарен!

#!/bin/sh
screen -d -m -S socat
wait 1
screen -S socat -X stuff 'socat TCP-LISTEN:[IN PORT],fork TCP:1.1.1.1:[OUT PORT] \r'
wait 1
Сделал на соседней машине, т.к. ОС где софт работает на Винде.
3000 портов открываются гдето за 3секунды.

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