Чтобы ответить на этот вопрос, вам нужно знать, как работает сетевой трафик между клиентом и сервером.
Когда у вас есть клиент-серверная программа, сервер настраивает порт прослушивания.
Любой клиент может затем подключиться к этому порту прослушивания и попросить подключиться. Поскольку вы можете сделать только одно соединение с портом, как только сервер примет соединение (идет за доли секунды), сервер затем устанавливает новое соединение обратно к клиенту (обычно через uPNP, опционально указывая, какой порт он будет использовать ) сделать фактическую передачу данных. Исходный порт от клиента к серверу сбрасывается, чтобы освободить порт прослушивания.
Поскольку сервер находится за NAT (маршрутизатором), когда клиент подключается к общедоступному IP-адресу с номером порта, маршрутизатор отвечает, а не сервер за ним. Поскольку у маршрутизатора нет программного обеспечения сервера (в вашем случае веб-сервера), он не знает, как ответить, и соединение не устанавливается, потому что маршрутизатор просто игнорирует запрос.
Добавляя portforward, вы сообщаете маршрутизатору, что делать, когда кто-то пытается подключиться к общедоступному IP-адресу с указанным портом. В вашем случае правило гласит: ретранслируйте трафик на Raspberry Pi.
Теперь, как вы можете видеть, единственное, что происходит, это то, что маршрутизатор узнает, что делать, когда делается запрос к общедоступному IP-адресу и порту. ПК внутри сети не запрашивают доступ по общему IP, но вместо этого по частному IP. Кроме того, маршрутизатор позволяет настроить, какой публичный порт он слушает. Поэтому, если у вас есть 3 малиновых пи, каждый из которых имеет свой IP-адрес, вы можете установить 3 правила:
- port 8081 to pi1, port 80
- port 8082 to pi2, port 80
- port 8083 to pi3, port 80
Затем клиент подключается к вашему общедоступному ip, добавляя:8081, чтобы открыть этот порт, и все работает.
Физические ссылки не установлены, поэтому все порты остаются без изменений. Просто маршрутизатор понимает, что делать с портом и куда должен направляться трафик.
Обратите внимание, что не все маршрутизаторы способны к петлевому трафику, то есть они ожидают, что соединения на NAT с публичным IP-адресом будут поступать от порта WAN, а не от порта LAN, поэтому может оказаться невозможным проверить правила пересылки на вашем роутере изнутри сети.