web-dev-qa-db-ja.com

静的IPをavahiのエイリアスにする-解決された動的IP-正常なスキャナーの場合

申し訳ありませんが、これがすでに他の方法で尋ねられている場合、私は見つけることができず、avahiを適切に使用する方法を見つけようとしてかなりひどい経験をしました。

avahiが正常に機能しており、これを使用してWi-Fi対応のBrotherスキャナーを検出できます。発行することでIPアドレスを把握できます

avahi-browse -arp|grep -i brother

したがって、sane構成ファイルを変更できます(技術的には、saneが使用するのは兄弟構成ファイルです:/etc/opt/brother/scanner/brscan4//brsanenetdevice4.cfgそしてスキャナーのIPアドレスを追加します。

ただし、ネットワークがダウンし、スキャナーからルーターから新しいIPアドレスが与えられた場合は、このプロセスを再度実行する必要があります。だからここで私は、「これがavahiの要点ではないか?? To not IPアドレスを入力する必要があるのか​​?」と考えています。そこで、IPアドレスの代わりにavahiホスト名をファイルに追加してみます。

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はそうします。なぜならそれはavahiホスト名をうまく処理できるpingにリクエストを渡すだけだからです。 xsane(0.998)は次のように述べています。

デバイス 'brother4:net1; dev2'を開くことができませんでした:引数が無効です

だから、私の考えは、どういうわけかいくつかの内部静的IPをavahiipに「解決」するように設定することです。これを行う方法はありますか?たとえば、必要な場合:

 127.0.0.2

デバイスの(動的な)解決されたavahiIPアドレス名のエイリアスになります。 hostsファイルの逆のようなものです。これには、bindsquidなど、経験のないものが含まれる可能性があると考えているため、どこから始めればよいのかわかりません。

これはFedoraLinuxマシンです。


編集:ちなみに、これがこの方法で達成できるかどうかを知りたいので、ルーターでこれを行うことは避けたいと思います。

1
insaner

Brsanenetdevice4.cfgでは、IPアドレスの代わりにホスト名を使用できますが、構成変数の名前はNODENAMEです。

たとえば、上記のケースを変更すると、次のようになります。

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

印刷するときと同じように、avahiを使用して解決されます。

1
greenglass

わかりました。関連する質問に対する別の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として実行する必要があります。

それが誰かを助けてくれることを願っています。

0
insaner