Могу ли я создать переопределение DNS, аналогично записи в / etc / hosts без прав root

48

Я хочу установить запись DNS, которую будет использовать мой браузер, но у меня нет доступа с правами root, поэтому я не могу изменить /etc/hosts. Мне нужно сделать это для тестирования vhosts с apache, DNS которого еще не настроен. У меня есть доступ к Firefox и Chrome, так что, если есть плагин, который может облегчить это; или другие варианты полезны.

обновление: альтернативой переопределению днс, вероятно, является изменение заголовков HTTP, если правильные отправляются в apache, правильное содержимое должно быть возвращено.

xenoterracide
источник
1
Последняя строка неясна. Кроме того, не будет ли это больше соответствовать SF?
Чепанг
@tshepang ... нет, потому что мне нужно сделать это на рабочем столе Linux?
ксенотеррацид
1
Все еще не так ясно. Что именно означает «или другие варианты полезны»? Не заставляй меня догадываться.
Чепанг
3
@tshepang Я не знаю, что я ищу ... если бы я знал, почему я спрашивал? могут быть варианты, которые я не рассматривал. Я чувствую, что вы просите меня объяснить, как виртуальные хосты apache, http и dns работают вместе.
ксенотеррацид
Я думаю, что вы ищете это: unix.stackexchange.com/a/104511/135943
подстановочный

Ответы:

65

Я искал способ запустить программу с измененным разрешением DNS для целей тестирования. Для меня решение было использовать HOSTALIASESпеременную окружения:

$ echo "foo www.google.com" >> ~/.hosts
$ HOSTALIASES=~/.hosts wget foo

См hostname(7).

(Примечание: в примере HOSTALIASESпеременная среды влияет только на wgetпроцесс. Конечно, вы можете export HOSTALIASESвключить его для всех подпроцессов текущей оболочки.)

matlehmann
источник
1
на самом деле это должно быть как + 10k, к сожалению, я могу дать вам только +1
xenoterracide
Я согласен! 10к + !!
Андерс Ханссон
3
Большое спасибо! Пример должен предварять exportв большинстве случаев: export HOSTALIASES=~/.hosts.
Ezequiel-Garzon
8
кажется, что псевдонимы хостов поддерживают только хосты, а не IP, и хосты не могут содержать «.».
netawater
Есть ли такое же решение для Windows?
Акцептор
10

Вы можете написать обертку вокруг функции libc, чтобы разрешить имена хостов и искать их в файле, отличном от / etc / hosts. Затем запустите любое приложение, с которым вы хотите использовать файл hosts.

LD_PRELOAD=wrapper.so firefox
Крис
источник
4
Наиболее целесообразно, чтобы ваша оболочка перенаправляла открытие /etc/nsswitch.confв ~/.nsswitch.conf, и создавала ~/.nsswitch.confзапрос к вашим базам данных DNS.
Жиль "ТАК - перестань быть злым"
6

Я думаю, что лучший способ сделать это - настроить прокси-сервер SOCKS5 и сказать Firefox отправлять запросы DNS через прокси-сервер SOCKS5 (network.proxy.socks_remote_dns). Вы можете довольно легко настроить прокси socks5 с openssh (опция -D) и иметь удаленный хост, работающий с пользовательским / etc / hosts, или что-то вроде DNSMasq для более сложных настроек DNS. Однако, по сути, это проталкивает конфигурацию настроек DNS в систему, в которую можно вносить общесистемные изменения.

jsbillings
источник
легче сказать, чем сделать, учитывая, что отличный межсетевой экран, который был установлен, чтобы блокировать нас от ssh-out ...
xenoterracide
5

Проверьте следующий вопрос у суперпользователя:

https://superuser.com/questions/184643/override-dns-in-firefox

Если обсуждаемые варианты и ссылка SO не являются жизнеспособными решениями, проверьте:

https://superuser.com/questions/100239/hostname-override-in-firefox

Особенно проверьте:

https://addons.mozilla.org/en-US/firefox/addon/redirector/

Похоже, что это дополнение может помочь - но я зависит от его фактической реализации.

maxschlepzig
источник
к сожалению, так же, как в этом вопросе, ни один из них не представляется жизнеспособным.
ксенотеррацид
@xenoterracide - я обновил свой ответ - возможно, надстройка перенаправителя является вариантом?
maxschlepzig
Я так не думаю из-за того, как оно сформулировано ... что мне действительно нужно, это изменить отправляемые HTTP-заголовки ... как альтернативный вариант взлома с использованием хостов
xenoterracide
Я искал SO решение (TamperData), но я не видел, как изменить хост в этом. Интересно, действительно ли функция живых заголовков http позволяет мне изменять заголовки, она говорит, что это программа просмотра.
ксенотеррацид
Я думаю, что расширение Modify Headers, перечисленное немного ниже в SO, работает ... если вы используете Host host name ... в нем ... еще не проверено ... вне взлома сайтов, использующих его.
ксенотеррацид
2

Чтобы проверить vhosts, вы можете установить сервер Apache в качестве прокси в Firefox. Введенное вами имя будет перенаправлено в Apache. Это нарушит просмотр других сайтов, поэтому верните прокси, когда закончите.

BillThor
источник
0

Мне нужно что-то подобное для ssh, scp и т. Д. Для сервера, который постоянно меняет IP каждые пару недель (а наша ИТ-служба имеет пару недель задержки при настройке хоста). Я решил это, используя специальную переменную для этого сервера: export FOO='131.227.aaa.bbbи тогда я могу сделать только, ssh bar@$FOOи я меняю IP в ~/.bashrcлюбой момент, когда он меняется ...

BIOStheZerg
источник
-2

Не повезло, вы не можете, кроме как написать свой собственный интернет-браузер.

Если вам нужно выполнить несколько тестов, вам нужен тестовый компьютер, будь то виртуальный или реальный компьютер, поэтому вам следует спросить своего администратора Unix (или хостинг-провайдера), как вы можете создать среду разработки.

Вы также можете установить виртуальную машину на свой ПК, установить дистрибутив Linux, Apache и протестировать свои изменения (это не так сложно, как кажется)

Обновить

Чтобы лучше объяснить, каждое приложение написано с использованием стандартных библиотек, таким образом, никто не должен переписывать низкоуровневую библиотеку и функции, такие как gethostbyname ().

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

  1. Вы можете настроить свой собственный DNS-сервер и спросить, у кого есть права root, чтобы изменить /etc/resolve.conf
  2. Вы можете установить прокси-сервер, такой как DeleGate, и установить некоторые правила для вашего VirtualHost
  3. Спросите права sudo на этом клиентском хосте
  4. Измените поведение приложения, которое вы используете для проверки соединения (я думаю, в браузере), например https://addons.mozilla.org/en-US/firefox/addon/switchhosts/
tmow
источник
4
-1 сформулирован плохо и покровительственно. Я являюсь хостинг-провайдером, и мне нужно протестировать сайт проклятых клиентов на нашем сервере. У нас есть сетевой загрузочный Linux, к которому у меня нет доступа администратора, и я не верю, что смогу загрузить на него виртуальную машину.
ксенотеррацид
@xenoterracide сказать особо нечего. Это действительно не выполнимо, о чем вы просите, за исключением того, что вы изменили способ создания SOCKET.
tmow
1
@xenoterracide Кстати, не было никакого намерения обидеть.
tmow
а также хостинг-провайдер ... у меня "права sudo" на самом деле, у меня есть реальный root на каждом ящике и полный доступ ко всему ... кроме моего рабочего стола (eyeroll), но если они еще не хотели менять свои серверы имен .. Я не могу с этим поделать ...
Ксенотеррацид
1
с LD_PRELOAD вы можете «переопределить» определенные функции «низкого уровня» и делать то, что вы хотите, например. сообщать программе о вашем собственном «/ etc / hosts» open()и любом другом низкоуровневом вызове .. до тех пор, пока включена динамическая загрузка кода (.so)
akira