Frage

Ich habe einen Entwicklungs-Webserver, der als „myhost.local“ gehostet wird und über Bonjour/mDNS gefunden wird.Auf dem Server wird der Avahi-Daemon ausgeführt.

Der Webserver möchte auch alle Subdomains von sich selbst verwalten.ZB „cat.myhost.local“ und „dog.myhost.local“ und „guppy.myhost.local“.

Gibt es angesichts der Tatsache, dass sich myhost.local auf einer dynamischen IP-Adresse von DHCP befindet, immer noch eine Möglichkeit, alle Anfragen für die Subdomains an myhost.local weiterzuleiten?

Ich fange an zu glauben, dass es derzeit nicht möglich ist ...

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

Sie können dies mit der Datei /etc/avahi/hosts tun.Alternativ können Sie
Verwenden Sie avahi-publish-host-name.

Nein, er kann nicht.Da er einen Alias definieren will, keinen neuen Rechnername.D.h.Er möchte nur eine A RR registrieren, keine umgekehrte PTR RR.Aber... wenn du etwas in /etc/avahi/hosts steckst, dann registriert es beide, und erkennt eine Kollision, wenn die PTR RR nicht eindeutig ist, was die Beispiel für einen Aliasnamen.

War es hilfreich?

Lösung 4

Ich habe es sich als nicht möglich, zu der Zeit, und ich habe nicht das Problem, da.

revisited

Meine aktuelle Lösung ist mühsam jede Sub-Domain von Interesse in den die Gastgeber auf dem lokalen Rechner Datei.

Andere Tipps

Ich habe das so gut wie möglich mit der geringen Zeit, die ich dieser Aufgabe gewidmet habe, gelöst.

Aber leider glaube ich nicht, dass die Windows-Implementierung von avahi/msdns/bonjour Aliase unterstützt (korrigieren Sie mich, wenn ich mit Beispielen zur Unterstützung falsch liege).

Ich habe mit dem Beispiel-Python-Skript begonnen, das auf der Avahi-Website bereitgestellt wird:

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

Machen Sie es ausführbar und füllen Sie es mit

#! /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"

Dieses Skript verwaltet die Ankündigung jedes einzelnen Alias ​​und bleibt so lange aktiv, bis Sie es beenden.(Aus diesem Grund müssen wir ein weiteres Skript erstellen, das ich unten gezeigt habe.)

Textdatei erstellen /etc/avahi/aliases

Dies verwenden wir, um einen Alias ​​pro Zeile für diesen Computer zu speichern

Verzeichnis erstellen /etc/avahi/aliases.d/

Ich habe dies in keinem der hier gezeigten Skripte tatsächlich genutzt, aber für die unternehmungslustigen Menschen da draußen ist klar, was getan werden muss.

Die Idee ist, dass Sie Aliase in separaten Textdateien gruppieren können (was sinnvoller ist, wenn Sie mit virtuellen Hosts in Apache arbeiten). Dies ist etwas, was viele Daemon-Anwendungen auf *nix bereits bieten (Apache und Apt sind nur zwei Beispiele).

Erstellen /usr/bin/avahi-announce-aliases

Machen Sie es ausführbar und füllen Sie es mit

#!/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 soll keineswegs der Höhepunkt der Python-Programmierung sein, Sie können also gerne Verbesserungen vornehmen, wo Sie es für richtig halten.

Verwendung

Wenn unser Hostname „server“ und der Avahi-Hostname „server.local“ wäre, könnten wir das ausfüllen /etc/avahi/aliases Textdatei mit Ihren zusätzlichen Hostnamen wie folgt:

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

(Aber ich bin mir wirklich ziemlich sicher, dass Sie dort einen beliebigen Hostnamen haben könnten, vorausgesetzt, Sie haben sichergestellt, dass er nicht bereits im Netzwerk existiert. Deshalb erstelle ich einfach „Subdomains“ des normalen Avahi-Hostnamens.)

Dann führen wir aus:

sudo avahi-publish-aliases

Mein Hauptgrund für die Einrichtung war die einfachere Simulation der Django- und Drupal-Website-Entwicklung auf meinem Laptop.

Vorbehalte

Meine einzige Enttäuschung ist, dass die Windows-Implementierung von Bonjour/Avahi die Aliase, die diese Implementierung ankündigt, nicht unterstützt. Es wird nur der normalerweise angekündigte Haupt-Avahi-Hostname angezeigt (z. B. server.local in unserem Beispiel oben).

Sieht aus wie airtonix dies umgesetzt und zugänglich gemacht unter https://github.com/airtonix/avahi- Aliase

Eine neuere aktualisierte Gabel, die ich auf Ubuntu getestet habe 11,04 ist unter https://github.com / hmalphettes / avahi-Aliase

Sie können zusätzliche Datensätze registrieren die Avahi-API. Dieses Beispiel auf dem Avahi Wiki zeigt, wie zusätzliche CNAME Datensätze (Alias) in Python veröffentlichen .

Ich weiß, das ist alt, aber eine bessere Lösung wäre dnsmasq .

Dies wird erreicht werden kann, so einfach ... über die Argumente / config ...

  

Zurück ipaddr für alle Hosts in bestimmten Bereichen.

     

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top