1

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

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

avahi-browse -arp|grep -i brother

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

Однако, если сеть выходит из строя, и сканер получает маршрутизатором новый IP-адрес, это означает, что мне придется снова пройти этот процесс. Итак, вот я и думаю:«Разве не в этом весь смысл авахи?» Чтобы не приходилось вводить 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.


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

2 ответа2

1

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

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

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

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

0

Хорошо, на подсказку друга, который указал другой ответ 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 {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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .