Поработаю немного Эйнстоком Файром. Не смейтесь. Предположим, есть сетевая хрень с более-менее симметричным протоколом (по TCP).
Можно ли соединить два сервера друг с другом (UPD3, по TCP напрямую)? Например, послать SYN-пакет одному серверу от имени второго?
Вернее послать-то можно, но даст ли это возможность соединения?
Или например, использовать расшаренные сокеты?
А то надо городить лишний агент-посредник, перебрасывающий трафик между двумя серверами — не охота, да и лишнее звено...
(UPD2 — советуют socat).
UPD1. Ось — Windows. Желательна некоторая совместимость с Linux.
Здравствуйте, Bill Baklushi, Вы писали:
BB>Поработаю немного Эйнстоком Файром. Не смейтесь. Предположим, есть сетевая хрень с более-менее симметричным протоколом (по TCP).
Лучше побудь самим собой и сформулируй задачу внятно, в технических терминах.
wildwind:
BB>>Поработаю немного Эйнстоком Файром. Не смейтесь. Предположим, есть сетевая хрень с более-менее симметричным протоколом (по TCP). W>Лучше побудь самим собой и сформулируй задачу внятно, в технических терминах.
Вроде сформулировал, что непонятно?
Немного переформулировал. Сейчас понятнее?
Здравствуйте, Bill Baklushi, Вы писали:
BB>Можно ли соединить два сервера друг с другом (UPD3, по TCP напрямую)? Например, послать SYN-пакет одному серверу от имени второго? BB>Вернее послать-то можно, но даст ли это возможность соединения?
Основное что защищает обычный TCP от таких сторонних участников — рандомизация sequence numbers.
Если вы можете предсказать, какой номер выдаст другая сторона, или заставить её это сделать — считайте, соединение у вас в кармане.
BB>Или например, использовать расшаренные сокеты?
В каком смысле?
BB>А то надо городить лишний агент-посредник, перебрасывающий трафик между двумя серверами — не охота, да и лишнее звено... BB>(UPD2 — советуют socat).
Ну да, какой-то прокси тут почти неизбежен, если не чудить с прямым доступом в ядро или эмуляцией пакетов соединения с обеих сторон.
BB>UPD1. Ось — Windows. Желательна некоторая совместимость с Linux.
Здравствуйте, Bill Baklushi, Вы писали:
BB>А без агента никак? Чтобы напрямую?
Тебе надо получить сетевой пакет из сетевого стека ОС, инкапсулировать IP-пакет в свой протокол на одной стороне, переслать данные через свой протокол, принять их на другой стороне, вытащить IP-пакет и заслать в сетевой стек ОС, чтобы дальше она уже разбиралась с ним.
Часть, отвечающая за взаимодействие с ОС, реализуется через tun-устройство (в Linux). Часть, которая будет инкапсулировать/вытаскивать IP-пакет в твоей протокол, конечно, тебе надо писать самому.
В Windows есть сторонние драйверы, создающие tun-устройство. Я бы посмотрел в первую очередь в сторону wireguard, в нём этот драйвер должен быть.
Возможно я не до конца понял твой вопрос. Может быть тебе хватит банального OpenVPN. Он умеет работать поверх TCP.
Здравствуйте, Bill Baklushi, Вы писали:
BB>UPD1. Ось — Windows. Желательна некоторая совместимость с Linux.
Возможно только под линуксом, вроде ethernet injection называется. Занимался подобными штуками чтобы рвать SCTP соединения. Тебе достаточно договорится в соответствии с процедурой TCP и данные можно посылать. Наверное, есть какие-то драйвера и утилиты которые выкидывают TCP стек в user-space после чего можно шаманить над трафиком.
BB>>>А то надо городить лишний агент, соединяющий два сервера — не охота O>>на socat'е такой агент можно сделать BB>А без агента никак? Чтобы напрямую?
Скорее всего можно чтото нахимичить с помощью iptables и BPF на одном из серверов, но это слишком сильная магия, тут точно не скажу.
Как много веселых ребят, и все делают велосипед...
Здравствуйте, Bill Baklushi, Вы писали:
BB>Немного переформулировал. Сейчас понятнее?
Нет. Прежде всего непонятна проблема, которую решаешь. Сейчас для меня она звучит как "Хочу с одного хоста соединиться с другим, но что-то(?) мешает. Нужен какой-то посредник."
Хотя, это наверное только я такой тугой, т.к. не сетевик.
Здравствуйте, Bill Baklushi, Вы писали:
BB>Можно ли соединить два сервера друг с другом (UPD3, по TCP напрямую)? Например, послать SYN-пакет одному серверу от имени второго? BB>Вернее послать-то можно, но даст ли это возможность соединения?
Именно так соединения и устанавливаются.
BB>А то надо городить лишний агент-посредник, перебрасывающий трафик между двумя серверами — не охота, да и лишнее звено... BB>(UPD2 — советуют socat).
Может быть, на Ваших серверах есть запрет исходящих соединений? Т.е. принять коннект от клиента он может, а вот сам куда-то постучать — нет. Обычно так делают, чтобы уменьшить последствия от взлома, чтобы скомпрометированный сервер не стал атаковать другие сетевые узлы. Тогда неизбежно нужен посредник за пределами серверного периметра.
Здравствуйте, Bill Baklushi, Вы писали:
BB>Можно ли соединить два сервера друг с другом (UPD3, по TCP напрямую)? Например, послать SYN-пакет одному серверу от имени второго? BB>Вернее послать-то можно, но даст ли это возможность соединения?
Можно. Но вероятно, придется покрутить настройки firewall'а.