Statische IP als Alias ​​für avahi-aufgelöste dynamische IP - für einen vernünftigen Scanner

1

Es tut mir leid, wenn dies bereits auf eine andere Weise gefragt wurde, ich konnte es nicht herausfinden und hatte ziemlich schreckliche Erfahrungen damit, herauszufinden, wie man Avahi richtig einsetzt.

ich habe avahi funktioniert einwandfrei und kann es verwenden, um mein WLAN aktiviert zu erkennen Brother Scanner. Ich kann seine IP-Adresse durch Ausgabe herausfinden

avahi-browse -arp|grep -i brother

So kann ich dann meine normale Konfigurationsdatei ändern (technisch gesehen ist es die Bruder-Konfigurationsdatei, die sane verwendet: /etc/opt/brother/scanner/brscan4//brsanenetdevice4.cfg und fügen Sie die IP-Adresse des Scanners hinzu.

Wenn jedoch das Netzwerk ausfällt und der Scanner vom Router eine neue IP-Adresse erhält, muss ich diesen Vorgang erneut durchführen. Also bin ich hier und denke: "Ist das nicht der springende Punkt von Avahi?" nicht müssen IP-Adressen eingeben? "Also versuche ich, den avahi-Hostnamen anstelle der IP-Adresse zur Datei hinzuzufügen:

DEVICE=brother-scanner-avahi , "MFC-avahi" , Unknown , IP-ADDRESS=BRNXXXXXXX.local

anstatt

DEVICE=brother-scanner-101 , "MFC-101" , Unknown , IP-ADDRESS=192.168.0.101 

Das geht aber nicht. Gut, brsaneconfig4 -p tut, weil es nur die Anfrage an übergibt ping das kann mit dem avahi hostnamen ganz gut umgehen. xsane (0.998) sagt nur:

Gerät 'brother4: net1; dev2' konnte nicht geöffnet werden: Ungültiges Argument

Also, mein Gedanke ist, irgendwie eine interne statische IP zu setzen, um die Avahi-IP "aufzulösen". Gibt es eine Möglichkeit, dies zu tun? Zum Beispiel, wenn ich wollte:

 127.0.0.2

um nur ein Alias ​​für den (dynamisch) aufgelösten Avahi-IP-Adressnamen des Geräts zu sein. Ein bisschen wie das Gegenteil von dem, was die hosts Datei tut. Ich denke, das könnte beinhalten bind oder squid oder etwas Ähnliches, mit dem ich keine Erfahrung habe, also würde ich nicht wissen, wo ich anfangen soll.

Dies ist eine Fedora-Linux-Maschine.


Edit: Ich möchte dies übrigens auf dem Router vermeiden, da ich wissen möchte, ob dies überhaupt möglich ist, um dies zu erreichen.

insaner
quelle
Sie können die Hostnamenauflösung im Formular einrichten printername.local via avahi, siehe z.B. Hier . Ich habe das nicht selbst gemacht, weil ich es vorziehen würde, den Router so zu konfigurieren, dass (a) bekannte Geräte immer die gleichen IP-Adressen erhalten und (b) die DNS-Auflösung durchgeführt wird, sodass ich keine Details angeben oder Fehler beheben kann besondere Probleme.
dirkt
@dirkt ja dieser teil funktioniert schon. Ich möchte, dass xsane entweder den Avahi-Namen (scanner.local) akzeptiert oder eine Möglichkeit findet, diesen Avahi-Namen einer statischen, internen IP-Adresse zuzuordnen, die sich nicht ändert, sodass ich dies in der Konfigurationsdatei angeben kann
insaner
Also entweder (a) sicherstellen, dass xsane den Resolver richtig verwendet (Code lesen und ein Patch senden, falls erforderlich), oder (b) sicherstellen, dass der Scanner immer die gleiche IP-Adresse erhält (was bedeutet, dass der DHCP-Server im Router konfiguriert wird). Wie sollte es überhaupt funktionieren, einen Avahi-Namen einer statischen IP zuzuordnen?
dirkt
Ein Freund hat mir einen Link zu einer möglichen Lösung geschickt, wollte aber hier keine Antwort schreiben. Sobald ich es ausprobiert habe und sehe, ob es funktioniert, werde ich es veröffentlichen. Bis dahin warte ich auf die Veröffentlichung einer Lösung.
insaner

Antworten:

1

In brsanenetdevice4.cfg können Sie anstelle einer IP-Adresse einen Hostnamen verwenden, der Name der Konfigurationsvariablen lautet jedoch NODENAME.

Wenn Sie beispielsweise Ihren obigen Fall ändern, würden Sie Folgendes verwenden:

DEVICE=brother-scanner-avahi , "MFC-avahi" , Unknown , NODENAME=BRNXXXXXXX.local

und es wird mit avahi genauso gelöst wie beim Drucken.

greenglass
quelle
0

Ok, auf den Hinweis eines Freundes, der auf eine andere SU-Antwort auf eine verwandte Frage hinwies ( IP-Adresse mit iptables umleiten ) und einige Experimente und Versuche und Irrtümer, ich habe es herausgefunden. Hier ist es, falls es auch jemandem hilft:

Der Trick ist zu verwenden iptables NAT . Zuerst wählen wir unsere (nicht zugewiesene / verfügbare) IP als Alias ​​aus. So etwas wie 192.168.0.201 (etwas, von dem Sie wissen, dass der Router es nicht verwendet). HINWEIS: tun nicht Verwenden Sie den Bereich 127.0.0.x, da dies nicht funktioniert!

Dann addierst du das zum sane Definition für den Scanner. In meinem Fall ist die Datei /etc/opt/brother/scanner/brscan4/brsanenetdevice4.cfg. Also habe ich diese Zeile hinzugefügt:

DEVICE=brother-scanner-avahi-alias , "MFC-avahi-alias" , Unknown , IP-ADDRESS=192.168.0.201

Ich habe dann ein Skript erstellt, das Folgendes enthält:

ALIAS_IP=192.168.0.201
BROTHER_UNIQ_STR=MFC-YOUR-MODEL-HERE
BROTHER_SCANNER_IP=`avahi-browse -rpt _ipp._tcp|grep $BROTHER_UNIQ_STR|awk 'BEGIN {FS=";"} /^=/ { print  $8}'`
# $7 is the .local hostname
# avahi-browse -rpt _ipp._tcp|grep $BROTHER_UNIQ_STR|awk 'BEGIN {FS=";"} /^=/ { print $7, $8}'


# to complete this: iptables-save >/somepath/iptables.save Add to cron upon start up iptables-restore </somepath/iptables.save

########  
echo Brother scanner IP: \'$BROTHER_SCANNER_IP\'
if [[ $BROTHER_SCANNER_IP =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
    # enable IP forwarding in kernel:
    sysctl net.ipv4.ip_forward=1
    # To make it permanent, edit /etc/sysctl.conf and ensure that the line "net.ipv4.ip_forward = 1" is there and not commented out.

    iptables -t nat -A OUTPUT -d $ALIAS_IP -j DNAT --to-destination $BROTHER_SCANNER_IP

    # Print the OUTPUT rules after our changes:
    # iptables -t nat -L
    iptables -t nat -L OUTPUT

    # If you really mess up, or want to get rid of all your rules (careful with this command!!)
    # TO DELETE ALL RULES ("F"lush) run: iptables -t nat -F OUTPUT
else
    echo 
    echo "ERROR: bad ip address"
    echo 
    exit 1
fi

Führen Sie das Skript aus und jetzt sane sollte in der Lage sein, Ihren Scanner über die Alias-IP-Adresse zu erkennen. Sie können das Skript dann einem Cron-Job oder einem Boot-Skript (Autostart oder was auch immer Ihr System verwendet) hinzufügen, und das erledigt jedes Mal die Dinge für Sie.

Das Skript muss als Superuser (root) oder sudo ausgeführt werden.

Hoffe das hilft jemandem da draußen.

insaner
quelle