Virtualhosty pro Apache bez nutnosti editace /etc/hosts

Následující postup umožní vytvářet nové lokální subdomény pro virtualhosty Apache bez nutnosti editace souboru /etc/hosts. Docílí se toho použitím dnsmasq jako lokálního DNS serveru. Jedná se o řešení pro Linux. Postup byl testován ve Fedoře, v jiných distribucích se pravděpodobně bude lišit minimálně způsob instalace.

Nainstalujeme dnsmasq:

yum -y install dnsmasq

Povolíme spuštění po startu:

chkconfig --level 5 dnsmasq on

Do souboru /etc/dnsmasq.conf přidáme následující řádek, který zajistí, že cokoliv.dev bude směřováno na localhost (lze zadat více záznamů s různými doménami a IP adresami):

address=/dev/127.0.0.1

Upravíme /etc/resolv.conf tak, aby se používal lokální DNS server, následující řádek vložíme do tohoto souboru jako první:

nameserver 127.0.0.1

Spustíme dnsmasq:

service dnsmasq start

V tuto chvíli by již mělo fungovat cokoliv.dev pro localhost. Otestovat můžeme např. pomocí příkazu:

host test.dev

Problém je však v tom, že NetworkManager při každém připojení a odpojení obsah /etc/resolv.conf kompletně přepíše. Toto je možné ošetřit vytvoření scriptu, který bude automaticky volán NetworkManagerem po tom, co dojde k připojení či odpojení od Internetu.

Vytvoříme soubor /etc/NetworkManager/dispatcher.d/add-local-nameserver (název může být libovolný, ale musí jít o spustitelný soubor, do kterého může zapisovat pouze uživatel root), kam vložíme toto:

#!/bin/sh
RESOLV=/etc/resolv.conf
RESOLV_TMP=/tmp/resolv.conf
LOC_NS=127.0.0.1
 
if ! grep -q $LOC_NS $RESOLV; then
	echo "# Generated by $0"  > $RESOLV_TMP
	echo "nameserver $LOC_NS" >> $RESOLV_TMP
	cat $RESOLV >> $RESOLV_TMP
	mv $RESOLV_TMP $RESOLV
fi

Tím se pokaždé utomaticky do /etc/resolv.conf vloží lokální nameserver.

Návod pro dosažení stejného výsledku pro Windows.

Tags: , ,

3 Responses to “Virtualhosty pro Apache bez nutnosti editace /etc/hosts”

  1. Cr Says:

    Díky za návod. Jak jednoduché…
    Jen dodám, že pod Gentoo stačí vytvořit soubor /etc/resolv.conf.tail, který se vždy do resolv.conf přidá za vygenerovaný obsah. Možná to bude fungovat i na Fedoře :) .

  2. Cr Says:

    …tedy pardon. Je třeba použít resolv.conf.head, aby byl server na začátku.

  3. Jakub Says:

    Cr: tohle na Fedoře – zdá se – nefunguje. Řešení se scriptem pro NM dispatcher by ale mělo fungovat všude. Nicméně díky za tip.

Leave a Reply