Erhalten Sie statische IP-Adressen als Aliasnamen für avahi-aufgelöste dynamische IP-Adressen - für einen Scan-Scanner

742
insaner

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

Ich habe avahiordnungsgemäß gearbeitet und kann damit meinen WLAN-fähigen BrotherScanner erkennen. Ich kann seine IP-Adresse durch Ausgabe herausfinden

avahi-browse -arp|grep -i brother 

So kann ich meine Sane-Konfigurationsdatei ändern (technisch ist es die Bruder-Konfigurationsdatei, die Sane verwendet: /etc/opt/brother/scanner/brscan4//brsanenetdevice4.cfg und die IP-Adresse des Scanners hinzufügen.

Wenn jedoch das Netzwerk ausfällt und der Scanner vom Router eine neue IP-Adresse erhält, muss ich diesen Vorgang erneut durchlaufen. Also hier bin ich und denke: "Ist das nicht der Sinn von Avahi? Um keine IP-Adressen eingeben zu müssen?" Ich versuche also, den avahi-Hostnamen der Datei anstelle der IP-Adresse 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. Na ja, brsaneconfig4 -pweil es die Anfrage pingeinfach weitergibt, an die sich der avahi-Hostname gut halten kann. xsane(0.998) sagt gerade:

Fehler beim Öffnen des Geräts 'brother4: net1; dev2': Ungültiges Argument

Mein Gedanke ist also, 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 (dynamischen) aufgelösten avahi-IP-Namen des Geräts zu sein. Ein bisschen wie das Gegenteil von dem, was die hostsDatei macht. Ich denke, dies könnte bedeuten bindoder squidoder etwas anderes wie diejenigen, mit denen ich keine Erfahrung haben, so dass ich wüsste nicht, wo man 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.

1
Sie können die Hostnamenauflösung in der Form `printername.local 'über avahi einrichten, siehe zB [hier] (https://wiki.archlinux.org/index.php/avahi). Ich habe das nicht selbst gemacht, weil ich es vorziehen sollte, den Router so zu konfigurieren, dass (a) immer die gleichen IP-Adressen an bekannte Geräte ausgegeben werden und (b) die DNS-Auflösung ausgeführt wird, sodass ich keine Details angeben oder debuggen kann besondere Probleme. dirkt vor 6 Jahren 0
@dirkt ja dieser Teil funktioniert schon. Was ich tun möchte, ist, entweder xsane den Avahi-Namen (scanner.local) akzeptieren zu lassen oder einen Weg zu finden, diesen Avahi-Namen einer statischen, internen IP zuzuordnen, die sich nicht ändert. Daher kann ich dies in der Konfigurationsdatei angeben insaner vor 6 Jahren 0
Vergewissern Sie sich entweder (a), ob xsane den Resolver ordnungsgemäß verwendet (Code lesen und ein Patch senden, falls erforderlich), oder (b) sicherstellen, dass der Scanner immer dieselbe IP-Adresse erhält (dh, der DHCP-Server muss im Router konfiguriert werden). Wie sollte "das Zuordnen eines Avahi-Namens zu einer statischen IP" überhaupt funktionieren? dirkt vor 6 Jahren 0
Ein Freund hat mir einen Link zu einer möglichen Lösung geschickt, wollte hier aber keine Antwort schreiben. Sobald ich es ausprobiere und sehe, ob es funktioniert, werde ich das posten. Bis dahin erwarte ich eine Lösung, die veröffentlicht wird. insaner vor 6 Jahren 0

2 Antworten auf die Frage

1
greenglass

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

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

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

und es wird wie beim Drucken mit avahi behoben.

0
insaner

Ok, auf den Hinweis eines Freundes hin, der auf eine andere SU-Antwort auf eine verwandte Frage ( IP-Adresse mit IP-Adressen umleiten ) und einige Experimente und Versuch und Irrtum hingewiesen hat, habe ich es herausgefunden. Hier ist es, falls es auch jemandem hilft:

Der Trick besteht darin, iptables NAT zu verwenden . Zuerst wählen wir unsere (nicht zugewiesene / verfügbare) IP als Alias. So etwas wie 192.168.0.201 (etwas, das der Router nicht verwendet). HINWEIS: Verwenden Sie nicht den Bereich 127.0.0.x, da er nicht funktioniert!

Dann fügen Sie das der saneDefinition für den Scanner hinzu. 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 /^=/ { print $8}'` # $7 is the .local hostname # avahi-browse -rpt _ipp._tcp|grep $BROTHER_UNIQ_STR|awk 'BEGIN /^=/ { 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]\.[0-9]\.[0-9]\.[0-9]$ ]]; 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 dieses Skript aus und sanesollten Ihren Scanner jetzt über die Alias-IP-Adresse erkennen können. Sie können das Skript dann zu einem Cron-Job oder einem Boot-Skript (Autostart oder was auch immer Ihr System verwendet) hinzufügen, und dies wird sich jedes Mal um Sie kümmern.

Das Skript muss als Superuser (Root) oder Sudo ausgeführt werden.

Hoffe, dass jemand da draußen hilft.