Есть 2 сети обе находться за NAT не подконтрольный мне можно ли их соединить, может есть в сети службы которые например принимают входящие с 2х tcp соединений и перенаправляют одно в другое?
Это будет сложно сделать, однако...
Тебе нужен туннель (хорошая идея - OpenVPN), но проблема тут в том, что инициатор соединения не сможет достучаться до второй стороны.
Поэтому:
1. или придется просить прова, чтобы он сделал статический нат на одну из твоих машин в одной из сетей.
2. или использовать сервер, который стоит в голом инете и на который есть доступ, и установить из обоих сетей с ним туннель OpenVPN в режиме роутинг. Тогда два любых компа из разных сетей будут пинговаться. А если можно посадить все компы в одну общую сеть, то тогда делаешь туннель в режиме бриджинг и тогда даже броадкасты ходить будут (надо ли это?).
Думай, что легче сделать :)
Ни одна служба не сможет установить соединение с двумя компами, находящимися за NAT'ом, т.к. они имеют серые адреса. Так что даже не беспокойся на эту тему. В твоем варианте напрямую не получится, надо искать обходные пути.
ну дык я и ищи может есть служба ... регистрируешся тебе дают порты куда надо коннектиться я изнутри обеих сетей инициирую tcp или udp соединения а эта служба мне "туда-сюда" ... :-)
>регистрируешся тебе дают порты куда надо коннектиться я изнутри обеих сетей инициирую tcp или udp соединения а эта служба мне "туда-сюда"
Где регестрируешься? Если обе сети за NAT, то все проблема в том, как установить хотя бы одно соедиенени, а не в службе, которая:
>принимают входящие с 2х tcp соединений и перенаправляют одно в другое?
ИМХО, Теоретически возможность установления соединия/тунеля есть, так как обыно NAT не изменяет порты, а только src ip адрес, поэтому если комп первой сети отправит UDP пакет с TTL=2 на адрес, с которого NAT'ят вторую сеть, то после этого пакет отправленый из второй сети на адрес, с которого NAT'ят первую сеть может пройти... Но это все теория, пока у меня нет времени ее проверить. Для ее реализации нужен cipe, синхронизация часов компьютеров за NAT'ом и программка, генерящая заданный UDP пакет и скрипт, все этим управляющий...
я пробовал делать это не с udp а с icmp маршрутизатор внешний предположительно cisco она меняет у исходящих icmp датаграм поле ID IP пакета. При этом когда приходит ответный icmp то видимо трасировщик нат убирает запись и поэтому ответный трафик с таким же ID второй раз уже не проходит. должно работать только как запрос-ответ. у UDP скорей всего ID тоже меняет да и вдобавок может порт источника всеже смениться (хотя опятьже наврядли.) но как быть с ID их всеже 65к вариаций :-)
SRC порт обычно стараются не менять, меняют только если он не привелигированный или уже занят для NAT... хотя все зависит от реализации NAT... Я свое утверждение проверял только на Linux и Cisco (ADSL)
Сомневаютсь, что кто-нибудь даст конкретный рецепт как это сделать. Думаю, что и в Инете нет готового решения. Да к тому же, часто NAT объединяют с firewall и достаточно хорошо перекрывают порты.
Что тебе надо понятно: тебе нужен тунель в инете к концам которого ты мог бы приконектиться из за ната. Это типа SOCKS которые надо натравить друг на друга ;) или stunnel (или любая другая хрень которая умеет делать тунели).
Иметь отдельную машину с реальным ипом в инете нужно, но вот весь трафик гонять через неё необязательно. Машина нужна только для установки соединения. Подробное описание схемы работы тут кто-то уже бросал:
Проще всего можно сделать прямое udp-соединение из-за специфики этого протокола. Над udp можно уже сделать IP-туннель. Только вот я не нашел готовых реализаций такой схемы. Может, плохо искал.