Obter IP estático como alias para IP dinâmico resolvido por avah - para scanner sane

1

Desculpe se isso já foi perguntado de alguma outra forma, não consegui descobrir e tive experiências terríveis tentando descobrir como usar corretamente o avahi.

Eu tenho avahi funcionando corretamente e posso usá-lo para detectar meu scanner Brother habilitado para Wi-Fi. Eu posso descobrir o seu endereço IP, emitindo

avahi-browse -arp|grep -i brother

Então, eu posso modificar meu arquivo de configuração sã (tecnicamente é o arquivo de configuração irmão que usa são: /etc/opt/brother/scanner/brscan4//brsanenetdevice4.cfg e adicione o endereço IP do scanner.

No entanto, se a rede ficar inativa e o scanner receber um novo endereço IP pelo roteador, isso significa que preciso passar por esse processo novamente. Então, aqui estou eu, pensando: "não é este o ponto inteiro de avahi ?? Para não tem que digitar endereços IP?" Então, tento adicionar o nome do host avahi ao arquivo em vez do endereço IP:

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

em vez de

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

Mas isso não funciona. Bem, brsaneconfig4 -p faz, porque ele apenas entrega o pedido para ping , que pode lidar com o nome do host avahi muito bem. xsane (0.998) apenas diz:

Failed to open device 'brother4:net1;dev2': Invalid argument

Então, meu pensamento é de alguma forma definir algum IP estático interno para "resolver" para o avahi ip. Existe alguma maneira de fazer isso? Por exemplo, se eu quisesse:

 127.0.0.2

para ser apenas um alias para o nome do endereço IP avahi (dinâmico) resolvido do dispositivo. Como o reverso do que o arquivo hosts faz. Eu estou pensando que isso pode envolver bind ou squid ou algo parecido com esses, com os quais eu não tenho experiência, então eu não saberia por onde começar.

Esta é uma máquina fedora linux.

Edit: Eu gostaria de evitar fazer isso no roteador, a propósito, como eu quero saber se isso é possível até mesmo conseguir isso.

    
por insaner 01.08.2017 / 08:37

2 respostas

1

No brsanenetdevice4.cfg você pode usar um nome de host em vez de um endereço IP, mas o nome da variável de configuração é NODENAME.

Por exemplo, modificando seu caso acima, você usaria:

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

e será resolvido usando avahi como quando você imprime.

    
por 24.01.2018 / 16:09
0

Ok, na dica de um amigo que apontou outra resposta SU para uma pergunta relacionada ( Usando o iptables para redirecionar o endereço IP ), e algumas experimentações e tentativas e erros, eu descobri. Aqui está, no caso de ajudar alguém a sair também:

O truque é usar iptables NAT . Primeiro, escolhemos nosso IP (não atribuído / disponível) para usar como nosso alias. Algo como 192.168.0.201 (algo que você sabe que o roteador não estará usando). NOTA: não usa o intervalo 127.0.0.x porque não funcionará!

Depois, você adiciona isso à definição sane do scanner. No meu caso, o arquivo é /etc/opt/brother/scanner/brscan4/brsanenetdevice4.cfg . Então eu adicionei esta linha:

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

Eu criei um script contendo o seguinte:

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

Execute esse script e, agora, sane poderá detectar seu scanner por meio do endereço IP do alias. Você pode adicionar o script a uma tarefa cron ou a um script de inicialização (autostart ou o que seu sistema usar), e isso cuidará de tudo para você sempre.

O script deve ser executado como superusuário (root) ou sudo.

Espero que ajude alguém lá fora.

    
por 23.10.2017 / 07:31

Tags