Utilizzare dnsmasq per lo sviluppo in locale su OSX

In questa guida vedremo come installare dnsmasq su OSX, configurarlo per rispondere a tutte le richieste a .dev con 127.0.0.1 e configurare OSX per inviare tutte le richieste con .dev a dnsmasq.

1. Installare dnsmasq.
Per questo passo potete procedere un po’ come volete, io ho scelto di usare Homebrew che secondo me funziona molto bene. Per l’installazione di Homebrew potete guardare qui.
Aprite una shell e digitate brew install dnsmasq.

2. Avviare dnsmasq.
Al completamento della procedura facciamolo partire:

# Copio il file d'esempio di configurazione in /usr/local/etc/
cp $(brew list dnsmasq | grep /dnsmasq.conf.example$) /usr/local/etc/dnsmasq.conf
# Copio il file con la configurazione del demone in /Library/LaunchDaemons/.
sudo cp $(brew list dnsmasq | grep /homebrew.mxcl.dnsmasq.plist$) /Library/LaunchDaemons/
# Mi assicuro che abbia i permessi corretti
chown root:wheel /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist
# Faccio partire dnsmasq al login con launchctl.
sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist

3. Configiurare dnsmasq.
A questo punto andiamo a cambiarne la configurazione; con un editor di testo (io consiglio Sublime Text) apriamo il file /usr/local/etc/dnsmasq.conf e dopo averlo svuotato ci incolliamo le seguenti riga:

address=/.dev/127.0.0.1
address=/.dev/::1

Salviamo e chiudiamo; oppure direttamente da shell

sudo echo "address=/.dev/127.0.0.1" > /usr/local/etc/dnsmasq.conf
sudo echo "address=/.dev/::1" >> /usr/local/etc/dnsmasq.conf

Ora riavviamo dnsmasq:

sudo launchctl unload /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist
sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist

4. Configiurare OSX.
Verificare l'esistenza della cartella
/etc/resolver se non esiste la potete creare con questo comando:

sudo mkdir -p /etc/resolver

Creiamo un file al suo interno col nome dev

sudo touch /etc/resolver/dev

Apriamo questo file e incolliamoci dentro le seguenti riga:

nameserver 127.0.0.1
nameserver ::1

oppure direttamente da shell

sudo echo "nameserver 127.0.0.1" > /etc/resolver/dev
sudo echo "nameserver ::1" >> /etc/resolver/dev

5. Proviamo il tutto

ping -c 1 ciccio.cappuccio.dev

dovremmo ottenere qualcosa del tipo
PING ciccio.cappuccio.dev (127.0.0.1): 56 data bytes

Da ora in poi tutti i domini .dev risponderanno all’indirizzo locale 127.0.0.1 senza dover aggiungerli al file hosts.