Pregunta

Tengo un servidor web de desarrollo de alojamiento como "myhost.local" que se encuentra mediante Bonjour / mDNS. El servidor ejecuta avahi-daemon.

El servidor web también quiere manejar cualquier subdominio de sí mismo. Por ejemplo, "cat.myhost.local" y "dog.myhost.local" y "guppy.myhost.local".

Dado que myhost.local está en una dirección IP dinámica de DHCP, es todavía una forma de ruta de todas las solicitudes de los subdominios a myhost.local?

Estoy empezando a pensar que no es posible actualmente ...

http://marc.info/?l=freedesktop-avahi&m=119561596630960&w= 2

  
    

Esto se puede hacer con el archivo / etc / avahi / hosts. Como alternativa, puede
    utilizar a publicar-host-name avahi.

  
     

No, no puede. Desde que se quiere definir un alias, no una nueva   nombre de host. Es decir. él sólo quiere registrar un RR, sin RR PTR reversa. Pero   si usted se pega algo en / etc / avahi / hosts entonces se registra tanto,   y detecta una colisión si el RR PTR es no único, que sería el   caso para un alias.

¿Fue útil?

Solución 4

Se lo di como no es posible en el tiempo, y no he revisado el problema desde entonces.

Mi solución actual es añadir laboriosamente cada subdominio de interés para el archivo hosts en el equipo local.

Otros consejos

He resuelto esto lo mejor que pueda con la pequeña cantidad de tiempo que he asignado a esta tarea.

Pero, por desgracia no creo que la aplicación de ventanas avahi / msdns / Bonjour soporta alias (corríjame si estoy equivocado con ejemplos de cómo apoyar esto).

Lo que hice fue comenzar con el script de ejemplo pitón en la página web avahi:

Crea: /usr/bin/avahi-announce-alias

Que sea ejecutable y Rellenar con

#! /usr/bin/env python
# avahi-alias.py

import avahi, dbus
from encodings.idna import ToASCII

# Got these from /usr/include/avahi-common/defs.h
CLASS_IN = 0x01
TYPE_CNAME = 0x05

TTL = 60

def publish_cname(cname):
    bus = dbus.SystemBus()
    server = dbus.Interface(bus.get_object(avahi.DBUS_NAME, avahi.DBUS_PATH_SERVER),
            avahi.DBUS_INTERFACE_SERVER)
    group = dbus.Interface(bus.get_object(avahi.DBUS_NAME, server.EntryGroupNew()),
            avahi.DBUS_INTERFACE_ENTRY_GROUP)

    rdata = createRR(server.GetHostNameFqdn())
    cname = encode_dns(cname)

    group.AddRecord(avahi.IF_UNSPEC, avahi.PROTO_UNSPEC, dbus.UInt32(0),
        cname, CLASS_IN, TYPE_CNAME, TTL, rdata)
    group.Commit()


def encode_dns(name):
    out = []
    for part in name.split('.'):
        if len(part) == 0: continue
        out.append(ToASCII(part))
    return '.'.join(out)

def createRR(name):
    out = []
    for part in name.split('.'):
        if len(part) == 0: continue
        out.append(chr(len(part)))
        out.append(ToASCII(part))
    out.append('\0')
    return ''.join(out)

if __name__ == '__main__':
    import time, sys, locale
    for each in sys.argv[1:]:
        name = unicode(each, locale.getpreferredencoding())
        publish_cname(name)
    try:
        # Just loop forever
        while 1: time.sleep(60)
    except KeyboardInterrupt:
        print "Exiting"

Este script se encarga el anuncio de cada alias individual, y permanecerá en funcionamiento hasta lo matas. (Debido a esto, tenemos que crear otro script que he mostrado a continuación)

Crear archivo de texto /etc/avahi/aliases

Esto es lo que utilizan a los alias de las tiendas para esta máquina uno por línea

Crea /etc/avahi/aliases.d/ directorio

En realidad no he hecho uso de esta en cualquiera de los guiones que muestro aquí, pero para aquellas personas emprendedoras por ahí, se puede ver lo que hay que hacer.

La idea es que se puede alias de grupo en archivos de texto separados (que tendrá más sentido cuando se trabaja con máquinas virtuales en Apache), esto es algo que muchas aplicaciones demonio en * nix ya proporcionan (Apache y aptos son sólo dos ejemplos ).

Crea /usr/bin/avahi-announce-aliases

Que sea ejecutable y llenarlo con

#!/usr/bin/env python

import os, sys
from subprocess import Popen


def ensure_file (path):
    """
        Looks for  file at provided path, creates it if it does not exist.
        Returns the file.
    """
    rfile = None    
    if not os.path.exists(path) and os.path.isfile(path) :
        rfile = open(path,"w+");
        print("ensuring file : %s " % path)

    print("file ensured : %s " % path)
    return rfile


command = '/usr/bin/avahi-announce-alias'
alias_pid_path = "/tmp/avahi-aliases.pid"
alias_file_path = "/etc/avahi/aliases"

alias_file = open(alias_file_path)
if not os.path.exists(alias_pid_path) :
    open(alias_pid_path,"w").close()

alias_pid = open(alias_pid_path,"r")


for line in alias_pid :
    txt = line.strip('\n')
    if len(txt) > 0 :
        print("kill %s" % txt )
        os.system("kill %s" % txt)          
alias_pid.close()
alias_pid = open(alias_pid_path,"w+")

for line in alias_file :
    txt = line.strip('\n')
    if len(txt) > 0 :
        print("publishing : << %s >>" % txt)
        process = Popen([command, txt])
        alias_pid.write("%s\n" % str(process.pid))    
alias_pid.close()

print("done")

Es de ninguna manera pretende ser el pináculo de programación Python, así que no dude en hacer mejoras cuando le parezca.

Uso

Si nuestro nombre de host es "servidor" y el nombre de host-avahi era "server.local", entonces podríamos llenar el archivo de texto /etc/avahi/aliases con sus nombres de host adicionales, así:

deluge.server.local
username.server.local
accounts.server.local
something-else.server.local
another.hostname.home

(pero en realidad, estoy bastante seguro de que podría tener cualquier nombre de host ahí que le proporciona se aseguró de que no existe ya en la red, por lo que me acaba de crear subdominios '' del nombre de host avahi normales)

A continuación, se corre:

sudo avahi-publish-aliases

La razón principal para configurar esto era más fácil para facilitar la simulación de Django y desarrollo web drupal en mi portátil.

Advertencias

Mi única decepción es que la aplicación de ventanas Bonjour / Avahi no soporta los alias que anuncia esta aplicación, sólo se ve el nombre de host principal avahi anunció normalmente (es decir server.local en nuestro ejemplo anterior).

Parece que airtonix implementado esto y lo puso a disposición en https://github.com/airtonix/avahi- alias

A más reciente tenedor actualizado que he probado en Ubuntu 11.04 es en https://github.com / hmalphettes / avahi-alias

Puede registrar los registros adicionales que utilizan la API de Avahi. Este ejemplo en el wiki de Avahi demuestra cómo publicar registros adicionales CNAME (alias) en Python .

Sé que esto es viejo, pero la mejor solución sería dnsmasq .

Esto se puede lograr de manera tan simple ... a través de los argumentos / config ...

  

Vuelta ipaddr para todos los hosts en los dominios especificados.

     

-A, --address=/<domain>/<ipaddr>

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top