Скрытие реального ip сервера с помощью своего DNS. Как?
Стоит задача скрыть реальный айпи сервера своими силами (т.е. без cloudflare и прочих аналогов). Как это сделать пошагово (можно крупными мазками, но и подробности лишними не будут)?
Если я ничего не путаю, то есть два возможных варианта решения этой задачи:
1.
Сервер1 – содержит apache/nginx, БД и исходники сайта. На нём же хостится dns-сервер.
Сервер2 – отдельный сервер с VPS, через который идет проброс dns-запросов к сайту по его доменному имени.
Т.е. сервер1 входящий и исходящий трафик проводит только через сервер2, ip которого открыты для внешнего мира, но который физически не содержит никакие данные сайта, а только получает их с сервера1 и передает пользователю.
2.
Сервер1 – содержит apache/nginx, БД и исходники сайта.
Сервер2 хостит dns.
При запросе сайта по доменному имени обращение идет к серверу2, который направляет запрос на сервер1, получает запрошенное содержимое, предъявляя его пользователю.
Я ничего не напутал, оба варианта возможны?
Какой оптимальнее с точки зрения производительности и безопасности?
Как это всё настроить? В частности интересуют настройки dns (bind) и в том, и в другом случае на обоих серверах.
Сторонние сервисы (cloudflare и т.п.) и dns-хостинги не предлагать. Нужно именно решение своими силами.
Ext7,
Как тогда понимать это:
"Сторонние сервисы (cloudflare и т.п.) и dns-хостинги не предлагать. Нужно именно решение своими силами."?
Едите в какой-нибудт Франкфурт, снимаете там помещение впихиваете туда сервер со стойкой, настраиваете прокси. Так нормально? А колокейшн в датаценте? А виртуалка с прокси на aws/azure/прочих? Где грань? По какой причине вы не можете cf использовать? И что вы понимаете под "своими силами"??? Решений-то масса. И от кого скрыть? От дяди милиционера или от конкрутентов-потенциальных-нарушителей?
Всем ещё раз спасибо за рекомендации. Я остановился на таком решении:
На прокси-сервер (2) ставим утилиту 3proxy. В её конфиге помимо прочего прописываем такую строчку:
tcppm -iserver2 port2 server1 port1
Таким образом можно сделать и цепочку прокси. Дополнительный плюс решения в том, что на прокси-сервер не нужно ставить ssl-сертификат, в отличие от варианта с nginx.
3 вариант, без ДНС-сервера.
сервер1 <---vpn--->сервер2 <--->дикий интернет.
На сервере 1 в качестве шлюза для dest 443 и 80 портов (и других по желанию) ставится сервер2.
На сервере2 SNAT-им сервер1 в мир, и DNAT-им входящий из мира трафик на 443 и 80 порт на сервер1. В настройках днс-зоны делаем запись А на айпи-адрес сервера2.
4. Вариант. Тоже без днс.
nginx или haproxy на сервере2 в качестве reverse proxy. 443 и 80 валим на сервер1.
Ext7, да. И готовой и качесвенной статьи может и не найдете, так как тут несколько технологий. Поэтому поэтапно. Сначала Openvpn между двумя хостами. Потом SNAT настроить и проверить командой wget https://ipinfo.io -qO-. Далее настроить DNAT. Потом переделать днс. Это то, что касается 3 варианта.
А 4-й самый простой по идее. Хотя тоже как посмотреть, так как шифровать http SSL-ом надо будет в оба плеча.
armodim, 4 вариант в nginx можно реализовать через модуль stream (т.е. L4 балансировку), если весь трафик за TLS - можно будет не шифровать дважды т.к. соединение клиент - сервер1 прозрачное.
Делал что-то подобное давно, точно не скажу как, но это возможно.
Ставите мордой nginx за ним apache, и через nginx есть вроде возможность по запросу отдавать локальный ip apache вместо внешнего.