Как могут взаимодействовать 2 компьютера в разных сетях?

Предположим, что мой друг и я подключены к Интернету через локальный интернет-провайдер (не обязательно такой же), что означает, что мы находимся в разных сетях, поэтому наши компьютеры имеют разные частные IP-адреса. Есть ли способ отправить сообщение ему, если я знаю его частный, а также общедоступный IP-адрес (который является IP-адресом его шлюзового маршрутизатора)? Если да, то каким образом пакеты достигнут его?

2 голоса | спросил Rishabh Gour 17 +03002015-10-17T08:56:43+03:00312015bEurope/MoscowSat, 17 Oct 2015 08:56:43 +0300 2015, 08:56:43

4 ответа


2

Во-первых, просто потому, что ваши два компьютера подключены через Интернет в двух разных местах, не обязательно означает, что вы используете частные адреса. Это, безусловно, наиболее вероятные сценарии с IPv4, учитывая нехватку адресов IPv4, но это все еще не обязательно верно. Если вы используете IPv6, вы, вероятно, используете общедоступные IPv6-адреса.

Предположим, что вы используете приватную IPv4-адресацию за маршрутизатором с использованием NAT.

Знание другого частного адреса вообще ничего не делает для вас, поэтому просто возьмите это из уравнения.

При нормальных условиях, не связанных с хакерами, маршрутизаторы NAT на каждом конце должны иметь возможность перенаправления портов для частного адреса каждого ПК, или маршрутизаторам необходимо будет использовать один-к-одному NAT, чтобы включить два компьютера для связи через общедоступные адреса. Вы также можете использовать VPN между двумя ПК, чтобы обойти проблему NAT. Все это предполагает, что брандмауэры не блокируют трафик из Интернета в частные сети.

В режиме «один к одному» NAT каждая сеть имеет несколько общедоступных адресов, которые однозначно переводят на один частный адрес, поэтому использование общего адреса приведет вас к соответствующему приватному адресу. Это также маловероятный сценарий, учитывая нехватку адресов IPv4, но это делается в некоторых местах.

Переадресация портов настраивает NAT для пересылки входящего трафика, отправляемого на общий адрес маршрутизатора, на определенный номер порта, который должен быть отправлен на конкретный внутренний частный адрес с заданным номером порта.

VPN - это туннель. Обычно трафик из одной внутренней сети инкапсулируется в пакеты, адресованные общедоступному адресу другой сети, и отправляется в другую сеть, где он деинкапсулирован в другую внутреннюю сеть. Это можно настроить таким образом, чтобы внешняя сеть отображалась локально для интерфейса туннеля локальной сети.

Брандмауэр на любом конце или в любом месте по пути может быть настроен для блокировки любого или всех этих методов.

ответил Ron Maupin 17 +03002015-10-17T09:51:49+03:00312015bEurope/MoscowSat, 17 Oct 2015 09:51:49 +0300 2015, 09:51:49
1

Прежде всего, все компьютеры во всем мире физически связаны друг с другом через интернет-провайдеры. ISP использует все кабели, которые объединяют их в несколько маршрутизаторов.

В любом случае. Чтобы ответить на ваш вопрос. Вам не нужен его частный IP-адрес. Только его публичный ip. Чтобы подключиться к компьютеру в его собственной частной сети, его маршрутизатор uitilizes что-то называется NAT. Когда вы подключаетесь к его публичному IP, вы можете сказать, что хотите управлять своим компьютером. Маршрутизатор /брандмауэр на своем конце должен открыть указанный порт для этой службы.

Итак, пример будет примерно таким: скажем, вы хотите отключить свой компьютер с вашего компьютера (при условии, что такая служба существует), и эта служба использует порт 10. Вы отправили бы этот специальный пакет выключения в порт 10 в свой Public Айпи адрес. Затем маршрутизатор /брандмауэр на своем конце должен быть настроен для пересылки запросов на порт 10, чтобы перейти на его компьютер.

Надеюсь, я помог.

ответил odannyc 18 +03002015-10-18T05:03:29+03:00312015bEurope/MoscowSun, 18 Oct 2015 05:03:29 +0300 2015, 05:03:29
1

1 Шаг: как указано выше - переадресация порта на маршрутизаторе.

Чтобы быть конкретным в запросе вашего сообщения, вы можете посмотреть:

Spark IM client ...

ответил Northumbrian 23 +03002015-10-23T02:13:38+03:00312015bEurope/MoscowFri, 23 Oct 2015 02:13:38 +0300 2015, 02:13:38
0

Есть три способа сделать это:

Перенаправление портов

Это дает вам самое быстрое соединение, но вам нужен доступ администратора к каждому маршрутизатору на стороне сервера, или вам нужно позвонить в интернет-провайдер и согласиться с переадресацией портов с ними, если вы находитесь за NAT.
Howto: Посмотрите на другие ответы или google «Как настроить переадресацию портов».

Использование VPN

Обычно лучший выбор в большинстве случаев. Это не самый быстрый, но по крайней мере вам не нужно настраивать переадресацию портов.
Howto: Скачать Hamachi, Tunnngle или подобное. В качестве альтернативы вы можете использовать /купить свою собственную VPN или использовать ее.

Использование чего-то как посредника, даже если оно не сделано.

Используйте этот параметр только в том случае, если вы по какой-либо причине не можете использовать переадресацию портов или VPN. Вам нужно знать программирование, чтобы настроить соединение, поскольку нет доступных примеров с открытым исходным кодом - не многие люди используют этот способ, и когда они это делают, они хакеры, и они хранят это в секрете. Но здесь есть несколько проблем: практически невозможно установить полное соединение, «соединение» будет больше напоминать обмен мгновенными сообщениями между двумя клиентами. Также ожидайте, что соединение будет слишком медленным - у Mine было ping около 750 мс. Я использовал бесплатный веб-хостинг как посредник.

Howto: Это зависит от того, что вы используете в качестве посредника, я использовал веб-хостинг - клиент отправляет запрос POST, а web (PHP) обрабатывает его и сохраняет сообщение в базе данных (MySQL) с идентификатором отправителя и идентификатором получателя. Затем другой клиент отправляет другой запрос POST для чтения сообщений и ответов сервера с веб-сайтом, в котором ничего нет, но сообщение для клиента.

ответил HotChocolateIsGood 27 J0000006Europe/Moscow 2017, 12:29:33

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132