Vra

Ek het'n ontwikkeling webserver hosting as "myhost.plaaslike" wat gevind word met behulp van Bonjour/mDNS.Die bediener loop avahi-daemon.

Die webbediener wil ook om te hanteer enige subdomeine van die self.Bv. "kat.myhost.plaaslike" en "hond.myhost.plaaslike" en "guppy.myhost.plaaslike".

Gegewe dat myhost.plaaslike is op'n dinamiese ip-adres van dhcp, is daar nog steeds'n manier om die roete alle versoeke vir die subdomeine te myhost.plaaslike?

Ek begin om te dink dit tans nie moontlik is...

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

Jy kan dit doen met die /etc/avahi/hosts lêer.Alternatiewelik kan jy
gebruik avahi-publiseer-gasheer-naam.

Nee, hy kan nie.Sedert hy wil om te definieer'n alias, nie'n nuwe gasheernaam.I. e.hy wil net om te registreer'N RR, geen omgekeerde PTR RR.Maar as jy hou iets in /etc/avahi/leërskare dan is dit registers beide, en ontdek'n botsing as die PTR RR is nie-unieke, wat sou die geval vir'n alias.

Was dit nuttig?

Oplossing 4

Ek het dit as nie moontlik destyds, en ek het nie hersien die probleem sedert.

My huidige oplossing is om moeite te voeg elke subdomein van belang is vir die hosts lêer op die plaaslike masjien.

Ander wenke

Ek het opgelos dit as die beste as wat ek kan met die klein bedrag van die tyd het ek opgedra aan hierdie taak.

Maar ongelukkig dink ek nie die vensters implementering van avahi/msdns/bonjour ondersteun aliasse (korrek my as ek verkeerd is met voorbeelde van hoe om dit te ondersteun).

Wat ek gedoen het, was om te begin met die voorbeeld python script wat op die avahi webwerf :

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

Maak dit uitvoerbare & Vul dit met

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

Hierdie script hanteer die aankondiging van elke individuele alias, en sal bly loop totdat jy die dood van dit.(as gevolg van hierdie, ons nodig het om te skep'n ander script wat ek het hieronder getoon)

Skep teks lêer /etc/avahi/aliases

Dit is wat ons gebruik om te stoor aliasse om hierdie masjien een per lyn

Skep gids /etc/avahi/aliases.d/

Ek het nie eintlik gebruik gemaak van hierdie in enige van die skrifte ek wys hier nie, maar vir diegene wat ondernemende mense daar buite, jy kan sien wat gedoen moet word.

Die idee is dat jy kan groep aliasse in aparte teks lêers (wat sal dit meer sin maak wanneer jy gaan met die virtuele die leërskare in apache), dit is iets baie daemon aansoeke op *nix reeds voorsien (apache en bekwaam is net twee voorbeelde).

Skep /usr/bin/avahi-announce-aliases

Maak dit uitvoerbare en vul dit met

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

Dit is geensins bedoel om te wees die toppunt van die python-programmeertaal, so voel vry om te maak verbeterings waar jy sien pas.

Gebruik

As ons gasheer was "server" en die avahi-gasheernaam was "bediener.plaaslike", dan kan ons vul die /etc/avahi/aliases teks lêer met jou ekstra hostnames soos so :

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

(maar regtig, ek is redelik seker dat jy kan enige gasheernaam daar in die verskaffing van wat jy het seker gemaak dat dit nie reeds bestaan nie op die netwerk, wat is die rede waarom ek net skep 'subdomeine van die normale avahi gasheernaam)

Dan loop ons :

sudo avahi-publish-aliases

My hoof rede vir die opstel van hierdie up was te fasiliteer makliker simulasie van django & drupal webwerf-ontwikkeling op my laptop.

Protest

My enigste teleurstelling is dat die vensters implementering van Bonjour/Avahi ondersteun nie die aliasse dat hierdie implementering kondig, dit sal slegs sien die belangrikste avahi gasheernaam normaalweg aangekondig (dws bediener.plaaslike in ons voorbeeld hierbo).

Dit lyk asof airtonix hierdie geïmplementeer en het dit by https://github.com/airtonix/avahi- aliasse

'n meer onlangse opgedateer vurk dat ek op Ubuntu 11,04 het getoets is by https://github.com / hmalphettes / avahi-aliasse

Jy kan addisionele rekords met behulp van die Avahi API registreer. Hierdie voorbeeld op die Avahi wiki demonstreer hoe om bykomende CNAME (alias) rekords in Python publiseer .

Ek weet dit is oud, maar 'n beter oplossing sou wees dnsmasq .

Dit kan SO eenvoudig bereik ... via die argumente / config ...

  

Terug IpAddr vir al die leërskare in bepaalde gebiede.

     

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

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top