У меня есть компьютер в домашней сети, который находится за маршрутизатором с NAT. Я хотел установить FTP-сервер на ПК, поэтому перенаправил все необходимые порты и т. Д., И теперь он работает. Затем я просто из любопытства запускаю Wireshark, чтобы посмотреть, какие пакеты там работают. Я подключился к себе через WAN IP маршрутизатора, и вот что я увидел:
Здесь 192.168.1.3 - это IP-адрес моего компьютера, 95.105.x.x - это IP-адрес моего маршрутизатора в глобальной сети, а 192.168.1.1 - это IP-адрес маршрутизатора в локальной сети.
Я понимаю, почему есть две копии запроса и ответа - я запускаю и клиент, и сервер на одном компьютере. Я не понимаю, почему 2-й и 3-й пакеты содержат IP-адрес маршрутизатора LAN.
Когда человек подключается к моему серверу, я вижу это:
Как видите, пакеты содержат только IP-адрес моего ПК в локальной сети и IP-адрес человека. То же самое, когда я подключаюсь к другому серверу.
Так почему же маршрутизатор отвечает своим сетевым IP-адресом, если я подключаюсь к самому себе?
Маршрутизатор не может сохранить исходный IP-адрес, потому что это приведет к тому, что обратный трафик будет доставлен непосредственно через локальную сеть, минуя NAT. А применение NAT только к одному направлению трафика, а не к другому, нарушит связь.
IP-адрес источника необходимо выбрать таким образом, чтобы обратный трафик отправлялся на маршрутизатор. Это означает, что он мог использовать любой IP-адрес за пределами локальной сети, и подключение работало бы.
Один из подходов к NAT - использовать IP-адрес исходящего интерфейса в качестве IP-адреса источника. По крайней мере, в одной реализации это известно как маскировка. И это объяснило бы то, что вы видите. Соединения вашей локальной сети с внешним миром маскируются под WAN IP вашего маршрутизатора. А подключения из вашей локальной сети через переадресацию портов и обратно в вашу локальную сеть маскируются под LAN IP вашего маршрутизатора.
Дополнительным преимуществом этого подхода является то, что соединения не прерываются в случае изменения WAN IP вашего маршрутизатора.