dnsmanagerv1/readme.markdown

173 lines
6.6 KiB
Markdown
Raw Permalink Normal View History

2016-01-07 14:12:18 +01:00
# DNSmanager (en)
This project is about managing DNS zones with a simple website, providing a
name to anyone on the Internet. It is bound to the [netlib.re][netlibre]
2016-01-07 14:12:18 +01:00
project. This service let you manage your dynamic IP address with your domain so
you don't need DynDNS anymore, and it's all libre software !
The association managing the infrastructure behind this service is [Alsace
Réseau Neutre][arn], which is an ethical ISP based in Alsace, France. Don't be
2016-01-07 14:12:18 +01:00
shy, go ask your questions !
## Tools
* [Dancer2](http://perldancer.org/)
* [Net::DNS](https://metacpan.org/pod/Net::DNS)
* [Bootstrap](http://twitter.github.io/bootstrap/)
* [DBD::mysql](https://metacpan.org/module/DBD::mysql)
* [Moo](https://metacpan.org/pod/Moo)
* [Crypt::Digest::SHA256](https://metacpan.org/pod/Crypt::Digest::SHA256)
## TODO
* zone delegation
* REST API
* captcha ?
# Installation (base)
I suggest using [perlbrew][perlbrew] and [cpanm][cpanm] for the installation,
to not change your current environment. So install them then :
perlbrew install perl-5.18.0
perlbrew switch perl-5.18.0
perlbrew exec sh init/deploiement.sh all
# Contribution (but only to the user interface)
If you want to contribute only on the application interface, you don't need to install and configure all the applications involved in the production release of dnsmanager.
First, uncomment "isviewtest" on **conf/config.yml** then :
perlbrew install perl-5.18.0
perlbrew switch perl-5.18.0
perlbrew exec sh init/deploiement.sh installdep
perlbrew exec sh init/deploiement.sh perlmodules
Finally, to run the application with fake views :
perlbrew exec plackup --port 3000 bin/app.psgi
2016-01-07 14:12:18 +01:00
# DNSmanager (fr)
2015-12-23 00:15:38 +01:00
Ce projet est un programme de gestion de zones DNS à partir d'un site web
simple, permettant à chacun d'avoir un nom sur **Internet**. Il est lié au
2016-01-07 14:12:18 +01:00
service en ligne [netlib.re][netlibre]. Ce service en ligne peut
2015-12-23 00:15:38 +01:00
remplacer avantageusement DynDNS puisqu'il est basé sur du code libre, et une
association s'occupe de son maintien ([Alsace Réseau
2016-01-07 14:12:18 +01:00
Neutre][arn], éthique++).
2015-12-23 00:15:38 +01:00
De manière factuelle :
- des utilisateurs peuvent s'enregistrer puis
- ajouter, supprimer, modifier des zones DNS
- mettre à jour un enregistrement A ou AAAA automatiquement via un script
- des administrateurs sont là pour
- supprimer des zones, des utilisateurs
- vous aider sur IRC (#arn sur irc.geeknode.org) ! \o/
2013-05-28 11:34:05 +02:00
# installation (base)
2013-05-28 11:34:05 +02:00
L'installation de l'application se fait de préférence via
[perlbrew][perlbrew] et [cpanm][cpanm] ce qui permet d'installer les
bibliothèques sans toucher à votre installation de Perl. Installez ces
programmes puis faites :
2013-05-28 11:34:05 +02:00
perlbrew install perl-5.18.0
perlbrew switch perl-5.18.0
perlbrew exec sh init/deploiement.sh all
# Contribuer (uniquement à l'interface)
Si vous souhaitez contribuer à *l'interface*, il suffit de décommenter la ligne
indiquant "isviewtest" dans le fichier de configuration **conf/config.yml**.
À partir de là, vous pouvez installer l'application comme ceci :
perlbrew install perl-5.18.0
perlbrew switch perl-5.18.0
perlbrew exec sh init/deploiement.sh installdep
perlbrew exec sh init/deploiement.sh perlmodules
Puis pour faire vos tests :
perlbrew exec plackup --port 3000 bin/app.psgi
## Ce qu'il reste à faire
* délégation de zone
* API REST
2015-12-23 00:15:38 +01:00
* captcha ?
2016-01-07 14:12:18 +01:00
# Un point sur le code
Le code de dnsmanager est composé de la manière suivante :
* `cli/` : regroupe les commandes à utiliser en ligne de commande, afin
d'administrer facilement la base de donnée et les zones, et faire des tests.
Il y a également le code du démon qui tourne sur les machines clientes pour
gérer la mise à jour de l'adresse IP dynamique.
* `conf/` : contient la configuration du serveur, à savoir `conf.yml` pour
indiquer où sont les serveurs de nom, comment y accéder pour mettre à
jour les zones, quel est le répertoire à utiliser pour mettre les fichiers
temporaires… et `reserved.zone` qui indique quelles sont les zones réservées
par l'administrateur (ex: on ne veut pas que quelqu'un enregistre www.NDD).
* `init/` : regroupe les scripts permettant de mettre en place le serveur et la
base de données.
* `lib/` : contient la majorité du code, qui est découpée en MVC, à savoir :
* `lib/MyWeb/App.pm` : le contrôleur, s'occupe des routes
* `lib/rt/App.pm` : les routes, qui font office de modèles, effectuent les
actions à entreprendre (ajout, suppression, modification de zone et
d'utilisateur)
Mais `lib` contient également toute la bibliothèque logicielle qui effectue les
actions, avec principalement une interface à l'authentification, la
récupération, modification et la suppression de zones et d'utilisateurs avec le
fichier `lib/app.pm`.
* `lib/configuration.pm` : gère la configuration du serveur
* `lib/copycat.pm` : copie des fichiers entre les serveurs
* `lib/db.pm` : gère les interactions avec la base de données
* `lib/encryption.pm` : chiffre les données
* `lib/fileutil.pm` : fonctions utilitaires pour gérer les fichiers
* `lib/getiface.pm` : récupère l'interface logicielle pour gérer un type de
serveur de noms (Bind9, NSD, Knot…), les interfaces sont dans `lib/interface/`
* `lib/remotecmd.pm` : effectue une commande à distance (comme recharger un
fichier de configuration dans Bind9)
* `lib/util.pm` : quelques fonctions utilitaires
* `lib/zone.pm` : gère les zones DNS (en général, s'occupe de recharger les
configuration, mettre à jour les zones, etc)
* `lib/zonefile.pm` : gère les fichiers de zone
* `public/` : les fichers statics du serveur web
* `views/` : les différentes vues de l'application
# La délégation de zone
Le principe de délégation est de laisser une personne héberger elle-même
son serveur DNS.
Elle va gérer elle-même sa zone, on aura juste un enregistrement de sa zone
"bla.netlib.re." qui pointera vers son adresse IP via un enregistrement de
type NS et un autre de type A.
Ces enregistrements devront se faire directement dans notre zone DNS
(netlib.re. ou codelib.re.).
Pour gérer la délégation de zone, il l faut :
* mémoriser que la personne a une zone déléguée, non gérée par notre interface
actuelle mais par une autre interface à faire, ce qui implique de toucher à la
BDD
* qu'elle puisse ajouter son (ses) adresse(s) IP pour la délégation
* ajouter un enregistrement de type NS dans notre zone (net|code)lib.re
* mettre à jour le numéro de série de notre zone
* indiquer à notre serveur primaire de reload la zone
2016-01-07 14:12:18 +01:00
[netlibre]: https://netlib.re/
[arn]: https://www.arn-fai.net
[perlbrew]: http://perlbrew.pl/
[cpanm]: http://search.cpan.org/~miyagawa/App-cpanminus-1.7040/bin/cpanm