добавление маршрутов к файлам хостов win/OSX без прав администратора или с использованием бесплатного файла хостов

Я прочитал Как настроить файл hosts для конкретного пользователя в Windows, на него нет ответов, и он датирован 2012 годом, так что шанс, что кто-то возродит его, практически равен нулю.

Вот мой пример использования: у нас есть набор инструментов nodejs, который позволяет пользователям создавать контент, который сохраняется в их собственном субдомене в производственной системе. Допустим, он развернут на example.org, а вы зарегистрированы под именем пользователя xyz, тогда созданный вами контент попадет на xyz.examplecontent.org (другой домен из-за очевидных проблем с безопасностью).

Проблема в том, что это также должно быть протестировано локально разработчиками, включая систему, которая выполняет доменную маршрутизацию с префиксом имени пользователя. Поскольку при чистой проверке нет заранее подготовленных пользователей, каждому разработчику придется настроить некоторых пользователей (эта часть важна, потому что она проверяет процесс создания пользователей), а затем также вручную отредактировать свой файл hosts, чтобы были ( Насколько известно компьютеру) хосты поддоменов пользователей, которые будут корректно разрешаться.

Можно в некотором роде автоматизировать модификации хостов с помощью таких библиотек, как https://npmjs.org/package/hostile или https://npmjs.org/package/mod-hosts (без учета https://npmjs.org/package/local-tld, поскольку это только OSX) но поскольку для изменения файла hosts в Windows или OSX требуются права администратора, и вы определенно не собираетесь запускать какое-либо приложение с правами администратора, эти библиотеки классные, но на самом деле их нельзя использовать.

Существуют ли какие-либо пакеты Node.js, которые я не могу найти при поиске http://npmjs.org для "hosts"? это решит эту проблему, или у Windows и OSX есть способы настроить дополнительные файлы хостов, чтобы можно было указать дополнительные правила хостов, не загрязняя основной файл и не требуя прав администратора?

Примечание: Ответы типа «этот инструмент автоматизации может сделать это за вас и работает на *n*x, OSX и Windows, но требует ruby/python/perl/что-то еще», конечно, также вполне приемлемы. . Пока он кроссплатформенный и не требует прав администратора, это уже лучше, чем ручное курирование.


person Mike 'Pomax' Kamermans    schedule 20.09.2013    source источник
comment
Это похоже не на файл hosts, а скорее на DNS. Вы можете установить пару записей DNS для project.dev и *.projectcontent.dev, которые указывают на 127.0.0.1.   -  person des    schedule 20.09.2013
comment
для локальной работы разве это буквально не включает добавление файла hosts? в частности, идеальное решение — это то, которое работает одновременно с инструментами и обновляет DNS/хосты, когда (и только когда) создается новый пользователь.   -  person Mike 'Pomax' Kamermans    schedule 20.09.2013
comment
Изменение файла hosts — не единственный способ решить эту проблему. В этом случае, когда поддомены должны быть динамическими, лучшим вариантом будет универсальный поддомен, который всегда указывает на ваш код.   -  person des    schedule 20.09.2013
comment
правда, хотя для этого все равно потребуется ручное редактирование хостов. Меньше, конечно, так что хорошее предложение.   -  person Mike 'Pomax' Kamermans    schedule 20.09.2013
comment
Я согласен, что DNS лучше. Думаю, я не совсем понимаю ситуацию, так как не понимаю, почему, учитывая подход DNS, вам придется редактировать hosts. В любом случае, и для полноты картины, я хочу изложить другой, более простой подход: по соглашению решите, что пользователи, которых создает разработчик, всегда называются от u1 до u10. Пусть каждый разработчик добавит одну запись в свой файл hosts (127.0.0.1 u1.devdomain u2.devdomain ...) и все. Это одноразовая модификация файла hosts для каждого разработчика.   -  person Nitzan Shaked    schedule 21.09.2013
comment
И еще одно: если вы действительно хотите сделать все возможное, вы можете иметь простой DNS-сервер, работающий на локальном Unix-сервере, предоставить ему какой-то API и вызывать его из сценариев разработки. Таким образом, их оконные блоки разрешают определенные поддомены из окна unix, и нет файла hosts для изменения. Хотя это, по общему признанию, гораздо больше работы.   -  person Nitzan Shaked    schedule 21.09.2013
comment
@NitzanShaked, учитывая, что нам нужно проверить большое количество шаблонов имен пользователей, это не вариант. Имена пользователей от u1 до 小猿マン должны работать, и постоянное тестирование с одними и теми же именами пользователей будет гарантированной проблемой. Решение также должно принимать во внимание внешних участников: люди должны иметь возможность просто взять нашу кодовую базу, установить ее, а затем протестировать ее, не принуждая себя быть пользователем u1 и т. д. Тестирование должно быть настоящим тестированием. Настройка DNS может сработать, если мы можем общаться с ним из Node.js, чтобы добавлять/удалять правила.   -  person Mike 'Pomax' Kamermans    schedule 21.09.2013
comment
Так сделай это. Настройте небольшой экземпляр привязки и запустите на нем небольшой сервер API, который добавит строки в файл зоны и перезапустит привязку. Поговорите с этим сервером из node.   -  person Nitzan Shaked    schedule 21.09.2013
comment
звучит хорошо, за исключением небольшой части API-сервера. Поиск в Google таких вещей, как сервер привязки nodejs или API привязки nodejs, в значительной степени терпит неудачу из-за того, что bind также является распространенным глаголом. вы случайно не знаете какие-нибудь места, которые объясняют, как написать сервер, который разговаривает (или вызывает) с привязкой?   -  person Mike 'Pomax' Kamermans    schedule 21.09.2013


Ответы (1)


Я бы, возможно, предложил создать собственный DNS-сервер, который отвечает на запросы *.somespecificdomain.ext и запускать его локально.

На Node JS написано несколько DNS-серверов, вот один из примеров: https://github.com/tjfontaine/node-dns

Дополнительные DNS-серверы nodejs в этом вопросе: Простой DNS-сервер в Node.JS? (основной/авторитарный DNS-сервер) (может быть, ndns?)

Затем вы можете добавить этот DNS-сервер в список DNS-серверов ваших локальных сетевых устройств. Если вы используете DHCP на своем основном сетевом устройстве, возможно, добавьте его в виртуальный сетевой адаптер или аналогичный на конкретной целевой ОС.

Да, вам нужны права администратора / root, чтобы добавить DNS-сервер к сетевому адаптеру, но это одноразовая задача.

person Dean Taylor    schedule 19.12.2013
comment
К сожалению, это означает, что вы не можете сделать это без прав администратора, а значит, это не ответ на заданный вопрос. - person Stefan Steiger; 24.11.2016