Получить статический IP-адрес в качестве псевдонима для динамического IP-адреса с разрешением avahi - для нормального сканера

676
insaner

Извините, если это уже было задано каким-то другим способом, я не смог узнать, и у меня были довольно ужасные переживания, пытаясь понять, как правильно использовать avahi.

Я avahiработаю правильно и могу использовать его для обнаружения моего Brotherсканера с поддержкой Wi-Fi . Я могу выяснить его IP-адрес, выдав

avahi-browse -arp|grep -i brother 

Таким образом, я могу затем изменить свой файл конфигурации в здравом уме (технически это файл конфигурации брата, который использует здравый смысл: /etc/opt/brother/scanner/brscan4//brsanenetdevice4.cfg и добавить IP-адрес сканера.

Однако, если сеть выходит из строя, и сканер получает маршрутизатором новый IP-адрес, это означает, что мне придется снова пройти этот процесс. Итак, вот я и думаю: «Разве это не весь смысл avahi ?? Чтобы не вводить IP-адреса?» Поэтому я пытаюсь добавить имя хоста avahi в файл вместо IP-адреса:

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

вместо

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

Но это не работает. Что ж, brsaneconfig4 -pделает, потому что он просто pingотвечает на запрос, который может нормально обрабатывать имя хоста avahi. xsane(0.998) просто говорит:

Не удалось открыть устройство 'brother4: net1; dev2': неверный аргумент

Итак, я подумал о том, чтобы как-то установить внутренний статический IP-адрес для «разрешения» на avahi ip. Есть ли способ сделать это? Например, если бы я хотел:

 127.0.0.2 

быть просто псевдонимом для (динамического) разрешенного имени IP-адреса устройства. Вроде как обратное тому, что hostsделает файл. Я думаю, что это может включать bindили squidчто-то еще, как те, с которыми у меня нет опыта, поэтому я не знаю, с чего начать.

Это машина Fedora Linux.


Изменить: Кстати, я хотел бы избежать этого на маршрутизаторе, поскольку я хочу знать, возможно ли это сделать таким образом.

1
Вы можете настроить разрешение имени хоста в форме `printername.local` через avahi, см., Например, [здесь] (https://wiki.archlinux.org/index.php/avahi). Я сам этого не делал, потому что я предпочитаю настроить маршрутизатор так, чтобы (а) всегда выдавать одни и те же IP-адреса общеизвестному устройству и (б) выполнять разрешение DNS, поэтому я не могу давать подробности или отлаживать любые особые проблемы. dirkt 6 лет назад 0
@dirkt да эта часть уже работает. Я хочу, чтобы xsane принял имя avahi (scanner.local) или нашел способ сопоставить это имя avahi со статическим внутренним ip, который не изменяется, поэтому я могу указать это в файле конфигурации insaner 6 лет назад 0
Поэтому (а) убедитесь, что xsane правильно использует распознаватель (необходимо прочитать код и отправить патч), или (б) убедитесь, что сканер всегда получает один и тот же IP-адрес (что означает настройку DHCP-сервера в маршрутизаторе). Как должно работать «отображение имени avahi на статический IP»? dirkt 6 лет назад 0
Друг прислал мне ссылку на потенциальное решение, но не хотел писать здесь ответ. Как только я попробую это и посмотрю, работает ли это, я опубликую это. До тех пор я жду решения, которое будет опубликовано. insaner 6 лет назад 0

2 ответа на вопрос

1
greenglass

В brsanenetdevice4.cfg вы можете использовать имя хоста вместо IP-адреса, но имя переменной конфигурации - NODENAME.

Например, изменяя ваш случай выше, вы будете использовать:

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

и это будет решено с помощью avahi, как при печати.

0
insaner

Хорошо, на подсказку друга, который указал другой ответ SU на связанный вопрос ( Использование iptables для перенаправления IP-адреса ), а также некоторые эксперименты, проб и ошибок, я понял это. Вот, на случай, если это кому-нибудь тоже поможет:

Хитрость заключается в использовании iptables NAT . Сначала мы выбираем наш (неназначенный / доступный) IP для использования в качестве нашего псевдонима. Что-то вроде 192.168.0.201 (то, что вы знаете, маршрутизатор не будет использовать). ПРИМЕЧАНИЕ: не используйте диапазон 127.0.0.x, потому что он не будет работать!

Затем вы добавляете это в saneопределение для сканера. В моем случае файл есть /etc/opt/brother/scanner/brscan4/brsanenetdevice4.cfg. Поэтому я добавил эту строку:

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

Затем я создал скрипт, содержащий следующее:

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 

Запустите этот скрипт, и теперь saneон сможет обнаружить ваш сканер по псевдониму IP-адреса. Затем вы можете добавить сценарий в задание cron или загрузочный сценарий (автозапуск или все, что использует ваша система), и он будет заботиться о вас каждый раз.

Скрипт должен запускаться от имени суперпользователя (root) или sudo.

Надеюсь, это поможет кому-то там.

Похожие вопросы