Мы используем систему проксирования на основе DNS, которая проксирует определенные адреса на основе записи DNS, так, например, для website1.com DNS возвращает IP прокси, и запрос отправляется через него, но для website2.com DNS возвращает обычный адрес, и запрос отправляется напрямую. Это не проблема
Однако это работает только для вызовов на основе имени. Нам нужно иметь возможность сделать то же самое для определенных IP-адресов, но есть ли способ сделать это?
Например, пользователь заходит на веб-сайт с IP 1.2.3.4, но БЕЗ записи DNS, ни A, ни PTR. Тогда нам нужно, чтобы вызов не шел на IP 1.2.3.4, а на наш сервер 10.0.0.4. Есть ли вообще способ это сделать? Мы понимаем, что это нужно будет установить на клиентской машине, но все же — есть ли способ это сделать?
Клиентами могут быть любые устройства: Windows, Mac, Linux, Android, что угодно... возможно, не на всех, но возможно ли это на каких-либо из них?
решение1
Поскольку вы указали сеть, есть вариант на сетевом уровне, я предоставил сетевое решение ниже, помеченное как NETWORK. Только несколько протоколов обычно проксируются, но большинство хорошо работают с NAT (сетевое решение). HTTP и HTTPS обычно проксируются, так что это мой первый ответ.
Я сбит с толку вашим описанием DNS-прокси. DNS обычно указывает разные IP-адреса для разных адресов или для связанных сайтов имеет один и тот же IP-адрес. Поскольку вы указываете веб-сайты в качестве имен хостов, я полагаю, мы можем предположить, что вы хотите проксировать веб-сайты. Я полагаю, что термин, который вы ищете, это «виртуальный хостинг на основе имени» или «проксирование на основе имени»
Для HTTP или HTTPS многие серверы могут проксировать трафик на основе IP-адреса и/или имени, указанного в заголовке HOST. Веб-сервер Apache использует VirtualHosts для разделения сайтов. Другое программное обеспечение, которое может проксировать трафик, имеет такую же или похожую функциональность. В Apache, чтобы выполнить проксирование как на основе IP, так и на основе проксирования для одного и того же сайта, вы должны создать VirtualHost для IP-адреса, добавив требуемые имена к этому виртуальному хосту. Затем вы должны настроить этот VirtualHost для проксирования всего сайта или его части.
СЕТЬ: Если вы хотите перенаправить IP-адрес на другой адрес, это может сделать маршрутизатор. Используемый механизм называется NAT (трансляция сетевых адресов). В этом случае вам понадобится DNAT (трансляция сетевых адресов назначения). Некоторые маршрутизаторы могут выполнять NAT на адресе порта (службы). В этом случае вам нужно, чтобы соответствующие записи DNS возвращали транслируемый IP-адрес.
EDIT: Дополнительные комментарии предоставляют дополнительную информацию. Насколько я понимаю требования: - Проксирование будет только для пользователей с определенных адресов/диапазонов адресов, не весь трафик к имени/IP будет проксироваться.
- Проксированные запросы должны исходить из прокси, а не с исходного хоста. - Текущее решение предоставляет разные записи адресов в зависимости от источника запроса. (Я считаю, что существующее решение здесь не работает. Запрос DNS исходит от DNS-сервера, который использует клиент, который может не быть устройством клиента. Ответы DNS кэшируются, поэтому вы не можете полагаться на DNS-запрос, предшествующий запросу.)
Решение, которое, как я считаю, скорее всего сработает, заключается в том, чтобы справиться с этим с помощью правил NAT на устройстве перед сервером и прокси. Это будет транслировать весь трафик, который вы хотите проксировать на ваше прокси-устройство, на основе исходного IP-адреса, и передавать остальной трафик напрямую на сервер.