[PYTHON] Créez facilement un serveur DNS en utilisant Twisted

Qu'est-ce que c'est?

Twisted facilite la création d'un serveur DNS, et jusqu'à ce que je le sache, je construisais un paradis avec / etc / hosts. J'ai cherché à me débarrasser des fichiers / etc / hosts gonflés. En parlant de cela, si vous utilisez Twisted, pourquoi ne pas utiliser cette bibliothèque, Twisted, qui contient diverses choses dans ce réseau? J'ai pensé. Donc, quand je l'ai recherché, j'ai trouvé qu'avec la commande twistd (script Python) qui vient après l'installation de Twisted, si vous passez dns comme argument, tout ce que vous avez à faire est d'écrire un simple fichier de zone.

Je vais donc écrire un mémo sur la création d'un serveur DNS (facile) à l'aide de Twisted.

Flux simple de la maintenance de l'environnement à la construction

--Préparer l'environnement Python 2.7.3 --Dans la version 12.3.0, la bibliothèque est également prise en charge dans Python 3.3 (sauf pour certains), mais elle est en fonctionnement Du point de vue, j'ai décidé de sélectionner la dernière version stable de la série 2.x.

--Installez Twisted comme une évidence. ――Je ne veux pas polluer l'environnement, je prépare donc l'environnement d'exploitation avec easy_install & pip & virtualenv

--Préparer un fichier de zone

--Démarrez le serveur avec la commande twistd --Je ne sais pas si l'expression "démarrer le serveur" est correcte, mais passez le paramètre dns pour le démarrer.

Machine dont le fonctionnement a été vérifié

Procédure détaillée de la maintenance de l'environnement au démarrage

Jusqu'à ce que l'environnement dans lequel Twisted peut être utilisé soit préparé

> easy_install-2.7 pip
> pip install virtualenv
> rehash
> mkdir -p ~/TwisedDNS/
> cd ~/TwistedDNS
> virtualenv python 
> source python/bin/activate
(python)> rehash
(python)> pip install twisted

description du fichier de zone

--Unko.zone.

unko.zone


zone = [
    SOA(
        'unko.com',
        mname = 'ns1.unko.com',
        serial = 2013011901,
        refresh = '1H',
        retry = '1H',
        expire = '1H',
        minimum = '1H' 
    ),
   
    # NS Record 
    NS('unko.com', 'ns1.unko.com'),

    # A Record
    A('unko.com', '10.0.0.10'),
    A('blog.unko.com', '10.0.1.10'),

    # CNAME Record
    CNAME('www.unko.com', 'unko.com') 
]

Démarrez le serveur

> sudo twistd -n dns --recursive --cache --pyzone unko.zone
# -n est--Avec l'option nodaemon, si celle-ci est attachée, elle démarrera comme un processus sur le shell au lieu du démon. Cette fois, c'est un test, donc je l'ai activé.
# --Cela ressemble à des requêtes récursives vers un serveur de noms externe de manière récursive.
# --cache active le cache de domaine.
# --pyzone est utilisé pour spécifier le fichier de zone.

Renseignez-vous immédiatement avec la commande dig

--Utilisez la commande dig pour faire une enquête.

> dig @127.0.0.1 unko.com 

; <<>> DiG 9.8.3-P1 <<>> @127.0.0.1 unko.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47522
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;unko.com.INA

;; ANSWER SECTION:
unko.com.3600INA10.0.0.10
> dig @127.0.0.1 blog.unko.com 

; <<>> DiG 9.8.3-P1 <<>> @127.0.0.1 blog.unko.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6450
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;blog.unko.com.INA

;; ANSWER SECTION:
blog.unko.com.3600INA10.0.1.10

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sat Jan 19 15:48:31 2013
;; MSG SIZE rcvd: 47
> dig @127.0.0.1 www.unko.com 

; <<>> DiG 9.8.3-P1 <<>> @127.0.0.1 www.unko.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10221
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.unko.com.INA

;; ANSWER SECTION:
www.unko.com.3600INCNAMEunko.com.
unko.com.3600INA10.0.0.10

;; Query time: 3 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sat Jan 19 15:48:36 2013
;; MSG SIZE rcvd: 60

Essayez également de contacter les domaines non gérés.

> dig @127.0.0.1 yahoo.co.jp 

; <<>> DiG 9.8.3-P1 <<>> @127.0.0.1 yahoo.co.jp
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37453
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;yahoo.co.jp.INA

;; ANSWER SECTION:
yahoo.co.jp.224INA124.83.187.140
yahoo.co.jp.224INA203.216.243.240

;; Query time: 13 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sat Jan 19 15:54:20 2013
;; MSG SIZE rcvd: 61

J'ai pu faire une enquête parfaite. Si vous souhaitez l'exécuter en tant que processus démon, vous pouvez utiliser l'option -n (--nodaemon). Je pense que le fichier twistd.pid et le fichier twistd.log sont créés dans le répertoire où la commande est lancée, vous pouvez donc les utiliser comme il convient. .. non lié, nsd, et c'est [BIND](https: //www.isc. Si vous souhaitez l'utiliser dans un service spécifique, c'est-à-dire dans le réseau interne sans utiliser org / software / bind), cela suffit.

c'est tout.

référence

Creating and working with a names (DNS) server

Recommended Posts

Créez facilement un serveur DNS en utilisant Twisted
Configurer un serveur de messagerie avec Twisted
Créez un serveur Web API à une vitesse explosive en utilisant HUG
Créer un environnement go à l'aide de Docker
Construire un serveur de cache Pypi sur QNAP
Créez facilement un environnement de développement avec Laragon
Créez votre propre serveur DNS avec Twisted
Construisez un serveur WebDAV simple sur Linux
Construire un serveur Samba sur Arch Linux
Configurons un serveur WEB avec Chromebook
Créer un serveur proxy avec nginx sur plusieurs serveurs distants à l'aide d'Ansible
Créer un serveur local avec une commande sur une seule ligne [Mac]
Ecrire un serveur TCP à l'aide du module SocketServer
Préparer un pseudo serveur API à l'aide d'actions GitHub
Créer un environnement de développement Django à l'aide de pyenv-virtualenv sur Mac
Configurer un serveur de fichiers sur Ubuntu 20.04 à l'aide de Samba
[Partie 2] Construisons un serveur Web avec EC2 Linux
Je souhaite créer facilement un environnement de développement basé sur un modèle
Construire un environnement virtuel Python en utilisant venv (Django + MySQL ①)
Créez un environnement Python sur votre Mac en utilisant pyenv
Créer un pseudo serveur d'API REST à l'aide de pages GitHub
Apprendre un réseau neuronal à l'aide de Chainer
Le débutant de la CTF a tenté de créer un serveur problématique (Web) [Problème]
[Python] J'ai essayé d'exécuter un serveur local en utilisant flask
Créer un environnement de développement Python à l'aide de pyenv sur MacOS
Créons facilement un gif mathématique en utilisant Google Colaboratory
Créer un environnement de développement d'API rapide léger à l'aide de Docker
Serveur DNS en Python ....
Connexion SSH à un serveur privé à l'aide d'un serveur de plateforme dans EC2
Construire un modèle seq2seq en utilisant la création et l'apprentissage du modèle d'API fonctionnelle de Keras
Créez facilement un environnement GCP pour Kaggle à grande vitesse
Créer un environnement Python et transférer des données vers le serveur
Créez un serveur API Web ultra-rapide avec Falcon
<Python> Construisez un serveur dédié pour l'analyse des données Jupyter Notebook
Créez un environnement de développement Flask à faible coût avec Docker
Créez un environnement python sur CentOS 7.7 pour votre serveur domestique