Configurer un serveur DNS

Bonjour,

Participant prochainement à une install party, je suis en train de configurer un miroir des dépôts principaux d’Ubuntu, sur une Debian Squeeze AMD64. J’ai déjà réussi à récupérer les dépôts qui m’intéressent (apt-mirror), et configuré un serveur DHCP (grâce à de la doc trouvée ici ^^).

Mon serveur a deux cartes réseau, eth0 qui a accès au net (via une box) qui reçoit une adresse par dhcp (192.168.0.x), et eth1 qui sera reliée aux ordinateurs à installer (10.10.100.230). En branchant un ordinateur sur eth1, celui-ci reçoit une adresse ip sur le réseau 10.10.100.0/24, et a accès au net.

J’aimerai que les ordinateurs du réseau 10.10.100.0/24 soient redirigés vers 10.10.100.230 lorsqu’ils cherchent à récupérer un fichier sur les serveurs Ubuntu. Pour faire cela, j’ai essayé de configurer un serveur bind9, mais après avoir bataillé longtemps, les PC clients ne parviennent pas à avoir de résolution DNS en passant par mon serveur bind.

Est-ce qu’il y a un moyen plus simple de faire cela? Ou dois-je continuer à chercher à faire fonctionner bind?

Up!
Ce problème n’inspire personne?

Un squid avec un grooos cache ?

Deux pistes :

  • vérifier la configuration de ton bind
  • donner les serveur dns d’opendns ou du fai au client dhcp directement via le serveur dhcp

Quelle est ta configuration de ton bind? (Les fichiers).

Une autre solution consisterait à mettre en place apt-proxy (qui correspond parfaitement à tes besoins sans pour autant mettre en place DNS etc…).

Seul problème, il faut configurer les fichiers /etc/apt/sources.list des postes clients pour aller chercher les paquets sur ton serveur.
Si tu optes pour cette solution, n’oublies pas de remettre les serveurs officiels à ce fichier, sinon, ils auront une drôle de surprise une fois chez eux.

Un tuto est disponible ici.

Merci pour les réponses!

Squid me parait compliqué à mettre en place, qui plus est pour en faire ce que je veux… je ne sais pas si ça vaut le coup que je me lance là dedans, n’y connaissant rien à Squid.

Donner les serveur dns d’opendns ou du fai au client dhcp directement via le serveur dhcp: dans ce cas, les PC ne seraient alors pas dirigés vers le serveur local lors d’une mise à jour?

Concernant apt-proxy, si il faut modifier les sources.list de tous les pc, je préfère éviter… je garde sous le coude en dernier recours.

Je posterai ma config bind dès que j’ai le temps, probablement demain soir.

Voici ma configuration actuelle:

/etc/bind/named.conf.local

[code]// Consider adding the 1918 zones here, if they are not used in your
// organization
//include “/etc/bind/zones.rfc1918”;

zone “archive.ubuntu.com” {
type master;
file “/etc/bind/db.archive.ubuntu.com”;
forwarders{};
};

zone “ubuntu.com” {
type master;
file “/etc/bind/db.ubuntu.com”;
forwarders{};
};[/code]

/etc/bind/named.conf.options

[code]options {
directory “/var/cache/bind”;

// If there is a firewall between you and nameservers you want
// to talk to, you may need to fix the firewall to allow multiple
// ports to talk.  See http://www.kb.cert.org/vuls/id/800113

// If your ISP provided one or more IP addresses for stable 
// nameservers, you probably want to use them as forwarders.  
// Uncomment the following block, and insert the addresses replacing 
// the all-0's placeholder.

forwarders {
	89.2.0.1;
	89.2.0.2;
};

auth-nxdomain no;    # conform to RFC1035
listen-on-v6 { any; };

};
[/code]

/etc/bind/db.archive.ubuntu.com (oubli de modifier la première ligne…)

[code]$TTL 86400
@ IN SOA pgdebian.mondomaine.com. root.mondomaine.com. (
20111110 ; Serial -> N° de série à incrémenter à chaque modif
; de ce fichier. Ce N° est utilisé par les
; serveurs esclaves pour lui indiquer qu’il
; doit mettre à jour sa base. Par commodité
; ce n° est une date à l’envers.
86400 ;Refresh -> A l’expiration du délai Refresh exprimé en
; secondes, le serveur excalve va entrer en
; communication avec le maitre et si il ne
; le trouve pas, il fera une nouvelle
; tentative au bout du délai Retry et si au
; bout du délai Expire il considerera que le
; serveur n’est plus disponible.
3600 ; Retry
2419200 ; Expire
86400 ) ; Minimum -> Durée de vie minimum du cache en secondes

;** Les 3 lignes suivantes permettent au serveur de se retrouver lui même
NS names.ubuntu.com. ;Nom du serveur
names A 10.10.100.230 ;Adresse IP du serveur de noms
names HINFO “Atom 4core” “Owner: kimented” ;Info complèmentaire

;** Les lignes suivantes définissent la table entre les noms et les IP
fr A 10.10.100.230[/code]

/etc/bind/db.ubuntu.com pareil…

[code]$TTL 86400
@ IN SOA pgdebian.mondomaine.com. root.mondomaine.com. (
20111110 ; Serial -> N° de série à incrémenter à chaque modif
; de ce fichier. Ce N° est utilisé par les
; serveurs esclaves pour lui indiquer qu’il
; doit mettre à jour sa base. Par commodité
; ce n° est une date à l’envers.
86400 ;Refresh -> A l’expiration du délai Refresh exprimé en
; secondes, le serveur excalve va entrer en
; communication avec le maitre et si il ne
; le trouve pas, il fera une nouvelle
; tentative au bout du délai Retry et si au
; bout du délai Expire il considerera que le
; serveur n’est plus disponible.
3600 ; Retry
2419200 ; Expire
86400 ) ; Minimum -> Durée de vie minimum du cache en secondes

;** Les 3 lignes suivantes permettent au serveur de se retrouver lui même
NS names.ubuntu.com. ;Nom du serveur
names A 10.10.100.230 ;Adresse IP du serveur de noms
names HINFO “Atom 4core” “Owner: kimented” ;Info complèmentaire

;** Les lignes suivantes définissent la table entre les noms et les IP
archive A 10.10.100.230
extras A 10.10.100.230
security A 10.10.100.230[/code]

/etc/hosts

[code]127.0.0.1 localhost
127.0.1.1 server
10.10.100.230 kimented.lan

The following lines are desirable for IPv6 capable hosts

::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters[/code]

/etc/hostname

/etc/resolv.conf

nameserver 89.2.0.1 nameserver 89.2.0.2

[code]root@kimented:~# dig @192.168.31.28 extras.ubuntu.com

; <<>> DiG 9.7.3 <<>> @192.168.31.28 extras.ubuntu.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 39337
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;extras.ubuntu.com. IN A

;; Query time: 0 msec
;; SERVER: 192.168.31.28#53(192.168.31.28)
;; WHEN: Tue Nov 22 08:21:11 2011
;; MSG SIZE rcvd: 35[/code]

Qu’entends-tu par “oubli de modifier la première ligne” ?
Quel est ce serveur 192.168.31.28 que tu interroges ?

Tes deux zones se recouvrent : un enregistrement A de archive.ubuntu.com est défini dans la zone ubuntu.com alors qu’il existe une zone archive.ubuntu.com. D’autre part, tes zones sont beaucoup trop large : tout nom de domaine sous ubuntu.com ne figurant pas dans tes zones ne sera pas résolu. Exemple : www.ubuntu.com.

Pour faire ce que tu cherches à faire, je créerais plutôt une zone distincte pour chaque nom de site à intercepter, ne contenant que l’enregistrement A correspondant (en plus des SOA et NS obligatoires) afin de minimiser l’impact sur la résolution des autres noms.

La ligne que je n’ai pas modifiée est:

Mais je ne sais pas vraiment quoi mettre, par exemple “extras.ubuntu.com” (le nom que je voudrais résoudre) ou le nom de mon serveur (kimented.lan d’après /etc/hostname), et ne sais pas à quoi correspond root.mondomaine.com (j’ai utilisé cette doc : coagul.org/drupal/node/140/ ).

L’adresse que j’interroge avec dig (192.168.31.28) est l’adresse du serveur sur mon réseau (carte eth0), j’ai oublié de le préciser. Si j’interroge 10.10.100.230 j’ai bien sur le même résultat (adresse de la carte eth1).

@ Pascal: Donc si j’ai compris, dans mon fichier /etc/bind/named.conf.local je devrais juste mettre ça:

zone "archive.ubuntu.com" {
       type master;
       file "/etc/bind/db.archive.ubuntu.com";
       forwarders{};
};
zone "extras.ubuntu.com" {
       type master;
       file "/etc/bind/db.extras.ubuntu.com";
       forwarders{};
};

Dans ce cas, comment dois-je renseigner le fichier db.archive.ubuntu.com pour résoudre les adresses archive.ubuntu.com et fr.archive.ubuntu.com?

Merci pour les réponses

Ces deux données du SOA sont plus “administratives” que fonctionnelles.
Le premier nom de domaine indique le serveur source des données la zone, donc généralement le NS primaire.
Le second nom de domaine sert à représenter l’adresse e-mail de l’administrateur de la zone, le premier point servant de @ : root.example.net est à interpréter comme root@example.net.

Il faut créer un enregistrement d’adresse pour chacun des deux noms.

archive.ubuntu.com. A 10.10.100.230 fr.archive.ubuntu.com. A 10.10.100.230
Par contre tout autre nom de la forme *.archive.ubuntu.com autre que fr.archive.ubuntu.com ne sera pas résolu.

Une alternative serait peut-être d’utiliser dnsmasq à la place de BIND. Il peut en même temps faire office de serveur DHCP, et de serveur DNS récursif qui utilise le contenu du fichier /etc/hosts, ce qui évite de créer des zones. Il suffirait d’ajouter les noms à résoudre dans /etc/hosts.

J’ai essayé comme ceci:

[code]$TTL 86400
@ IN SOA archive.ubuntu.com. root.kimented.lan. 2011112403 86400 3600 2419200 86400;

;** Les 3 lignes suivantes permettent au serveur de se retrouver lui même
;archive.ubuntu.com. NS 10.10.100.230 ;Nom du serveur
;fr.archive.ubuntu.com. NS 10.10.100.230 ;Sous-domaine

;** Les lignes suivantes définissent la table entre les noms et les IP
archive.ubuntu.com. A 10.10.100.230
fr.archive.ubuntu.com. A 10.10.100.230[/code]

Mais ça ne marche pas…

[code]root@kimented:/etc/bind# dig @10.10.100.230 archive.ubuntu.com

; <<>> DiG 9.7.3 <<>> @10.10.100.230 archive.ubuntu.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 53846
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;archive.ubuntu.com. IN A

;; Query time: 0 msec
;; SERVER: 10.10.100.230#53(10.10.100.230)
;; WHEN: Thu Nov 24 08:59:01 2011
;; MSG SIZE rcvd: 36
[/code]

Les domaines que je ne veux pas gérer fonctionnent

[code]root@kimented:/etc/bind# dig @10.10.100.230 ubuntu-fr.org

; <<>> DiG 9.7.3 <<>> @10.10.100.230 ubuntu-fr.org
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23445
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 13, ADDITIONAL: 13

;; QUESTION SECTION:
;ubuntu-fr.org. IN A

;; ANSWER SECTION:
ubuntu-fr.org. 300 IN A 193.54.153.232

;; AUTHORITY SECTION:
(…)

;; ADDITIONAL SECTION:
(…)

;; Query time: 36 msec
;; SERVER: 10.10.100.230#53(10.10.100.230)
;; WHEN: Thu Nov 24 09:01:41 2011
;; MSG SIZE rcvd: 466
[/code]

Le contenu de la zone n’est pas correct : l’enregistrement NS pour archive.ubuntu.com, obligatoire, est commenté.
L’autre enregistrement NS pour fr.archive.ubuntu.com n’est en revanche nécessaire que pour faire une délégation si tu crées à côté une zone fr.archive.ubuntu.com distincte, ce qui n’a pas vraiment d’intérêt sauf si tu voulais définir d’autres zones *.archive.ubuntu.com de type forward afin qu’elles soient résolues en externe.

J’ai trouvé la solution!
J’ai cherché comment créer des fichiers logs, regardé dedans, et puis j’ai vu ça:

zone archive.ubuntu.com/IN: loading from master file /etc/bind/db.archive.ubuntu.com failed: permission denied zone archive.ubuntu.com/IN: not loaded due to errors. zone extras.ubuntu.com/IN: loading from master file /etc/bind/db.extras.ubuntu.com failed: permission denied zone extras.ubuntu.com/IN: not loaded due to errors.
Les problèmes de permission réglés, ça marche mieux ^^. J’ai configuré comme ceci:

[code]TTL 86400
@ IN SOA kimented.lan. root.kimented.lan. 2011112503 86400 3600 2419200 86400;

;** Les 3 lignes suivantes permettent au serveur de se retrouver lui même
archive.ubuntu.com. NS kimented.lan. ;Nom du serveur
;fr.archive.ubuntu.com. NS 10.10.100.230 ;Sous-domaine

;** Les lignes suivantes définissent la table entre les noms et les IP
archive.ubuntu.com. A 10.10.100.230
fr.archive.ubuntu.com. A 10.10.100.230[/code]

Et j’obtiens maintenant une réponse:

[code]; <<>> DiG 9.7.3 <<>> @10.10.100.230 extras.ubuntu.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42972
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;extras.ubuntu.com. IN A

;; ANSWER SECTION:
extras.ubuntu.com. 86400 IN A 10.10.100.230

;; AUTHORITY SECTION:
extras.ubuntu.com. 86400 IN NS kimented.lan.
[/code]

Merci beaucoup pour votre aide!
Je vais maintenant m’attaquer à la configuration d’Apache…

edit: mon serveur fonctionne comme je veux maintenant, juste à temps.