Как сохранить IP адрес клиента в локальной сети при запросе через внешний интерфейс?
Имеется HTTP сервер в локальной сети с адресом 192.168.1.100, на него настроено перенаправление из-вне по 443-му порту.
Клиент с адресом 192.168.1.200, находясь в одной локальной сети с этим сервером, делает запрос через внешний интерфейс (по домену, привязанному ко внешнему IP), HTTP сервер принимает этот запрос, но вместо IP клиента получает IP шлюза (192.168.1.1), что в общем логично, но хотелось бы в итоге на HTTP сервере получить адрес 192.168.1.200.
Как я понимаю, сделать это можно, только если отправлять запрос на HTTP сервер, минуя внешний интерфейс.
Вопрос: как это сделать без внутреннего DNS сервера? Теоретически ведь роутер может сам решить этот вопрос?
Разнесите сервер и клиент по разным внутренним подсетям. В этом случае подменять внутренний адрес клиента внешним адресом роутера необходимости не будет (т.к. не возникнет ситуации, когда трафик от клиента к серверу и обратно ходит по разным маршрутам).
Сергей Семенко, это вопрос уже к топологии сети и настройке роутера. Если клиент и сервер находятся в разных подсетях, то при обращении к серверу нет необходимости подменять адрес клиента. Собственно, это в общем случае вообще не требуется. Такая необходимость возникает при нахождении клиента и сервера в одной подсети потому, что когда сервер пытается отсылать обратный трафик клиенту, он идет мимо роутера, который выполняет NAT, и, соответственно, клиент получает ответный трафик не с того ip-адреса, с которого ожидает.
Клиентское приложение должно работать как внутри локальной сети, так и за её пределами, но при работе в локальной сети хотелось бы отдельно идентифицировать каждое устройство.
Вариант с заголовками не походит, потому что их должен передавать клиент, там изменений быть не должно.
Клиентское приложение должно работать как внутри локальной сети, так и за её пределами, но при работе в локальной сети хотелось бы отдельно идентифицировать каждое устройство.
Ну, и прекрасно - изнутри просто нужно отдавать на DNS-запрос локальный адрес, а снаружи - внешний. Это общепринятая практика, в общем-то.
В целом - для проброса IP-адреса за НАТ используют специальные заголовки а-ля X-Real-IP.
Вы чтото путаете - заголовок "а-ля X-Real-IP" может вставлять прокси работающий на седьмом уровне модели OSI - хапрокси, нджинкс, и тд.
Нат это механизм работы с четвертым уровнем и роутер просто перенаправляет пакеты, кроме этого у него нет ссл сертификата и он не может никак туда заголовок вставлять