Это общая проблема, вызванная невозможностью сделать NAT шпильки. Большинство дешевых домашних маршрутизаторов справляются с этим, просто включив переадресацию портов. Однако маршрутизаторам более высокого уровня на самом деле нужны отдельные правила для решения этой проблемы.
Ваши обычные правила NAT работают только за пределами вашей сети. Если вы попытаетесь подключиться изнутри вашей сети, возникнет проблема с NAT.
Учти это...
- У вас
Server A
в локальной сети есть IP10.10.10.10
. - У вас
Computer A
в локальной сети есть IP10.10.10.20
. - У вас есть
Router A
сLAN
IP10.10.10.1
иWAN
IP из11.11.11.11
. - У вас есть
Computer B
вне вашей сети с IP12.12.12.12
. - Вы перешли
port 22
с вашего WAN IP наServer A
.
Из-за пределов вашей сети трафик выглядит так:
Компьютер B пытается подключиться к серверу A:
Source IP: 12.12.12.12 Src Port: 12345 Destination IP: 11.11.11.11 Dest Port: 22
Маршрутизатор A NATs пакет и отправляет его на сервер A:
Source IP: 12.12.12.12 Src Port: 12345 Destination IP: 10.10.10.10 Dest Port: 22
Сервер A отвечает на компьютер B:
Source IP: 10.10.10.10 Src Port: 22 Destination IP: 12.12.12.12 Dest Port: 12345
Маршрутизатор A NATs пакет и отправляет его на компьютер B:
Source IP: 11.11.11.11 Src Port: 22 Destination IP: 12.12.12.12 Dest Port: 12345
Все работает как задумано. Теперь рассмотрим тот же сценарий, но внутри вашей сети:
Компьютер A пытается подключиться к серверу A:
Source IP: 10.10.10.20 Src Port: 12345 Destination IP: 11.11.11.11 Dest Port: 22
Маршрутизатор A NATs пакет и отправляет его на сервер A:
Source IP: 10.10.10.20 Src Port: 12345 Destination IP: 10.10.10.10 Dest Port: 22
Сервер A отвечает на компьютер A:
Source IP: 10.10.10.10 Src Port: 22 Destination IP: 10.10.10.20 Dest Port: 12345
Исходный IP-адрес находится в той же подсети, что и IP-адрес назначения. Server A
не отправляет пакет обратно маршрутизатору, он отправляет его напрямую Computer A
. Computer A
отбрасывает пакет, потому что он пришел 10.10.10.10
и отправил исходный пакет 11.11.11.11
. Ожидается, что пакет вернется из11.11.11.11
.
Чтобы решить эту проблему, вы должны создать второе, более конкретное правило NAT для соответствия трафику, исходящему из вашей сети. Это придет после вашего исходного правила NAT. Вам нужно будет сделать Source NAT, который выглядит следующим образом:
srcnat src-address=10.10.10.0/24 dst-address=10.10.10.10 dst-port=22 out-interface=LAN action=masquerade
Теперь давайте посмотрим на это снова:
Компьютер A пытается подключиться к серверу A:
Source IP: 10.10.10.20 Src Port: 12345 Destination IP: 11.11.11.11 Dest Port: 22
Маршрутизатор A NATs пакет и отправляет его на сервер A:
Source IP: 10.10.10.1 Src Port: 12345 Destination IP: 10.10.10.10 Dest Port: 22
Сервер A отвечает на компьютер A:
Source IP: 10.10.10.10 Src Port: 22 Destination IP: 10.10.10.1 Dest Port: 12345
Маршрутизатор A NATs пакет и отправляет его на компьютер A:
Source IP: 11.11.11.11 Src Port: 22 Destination IP: 10.10.10.20 Dest Port: 12345
Все работает как задумано.
Как вы реализуете это второе правило NAT, зависит от аппаратного и программного обеспечения вашего маршрутизатора. Ваш пробег может отличаться.