Имеем - Keenetic Ultra (KN-1810). До этого много лет были самый первый (белый Keenetic), потом Giga II (черный).
До вчерашнего дня не имел каких-либо проблем со сканером (saned + xinetd + sanetwain.ozuzo.net).
Вчера внезапно все перестало работать. Из изменений в Keenetic: несколько дней назад была обновлена прошивка (3.3.16 -> 3.4.3), и вчера был установлен php7-cgi.
Что удалось понять: проблема в том, что saned не пускает клиента. Просто отказывает ему в доступе.
Лог при прямом запуске из консоли:
Код: Выделить всё
~ # saned -led128
[saned] read_config: searching for config file
[saned] read_config: done reading config
[saned] saned (AF-indep+IPv6) from sane-backends 1.0.29 starting up
[saned] do_bindings: trying to get port for service "sane-port" (getaddrinfo)
[saned] do_bindings: " sane-port " service unknown on your host; you should add
[saned] do_bindings: sane-port 6566/tcp saned # SANE network scanner daemon
[saned] do_bindings: to your /etc/services file (or equivalent). Proceeding anyway.
[saned] do_bindings: [1] socket () using IPv6
[saned] do_bindings: [1] setsockopt ()
[saned] do_bindings: [1] bind () to port 6566
[saned] do_bindings: [1] listen ()
[saned] do_bindings: [0] socket () using IPv4
[saned] do_bindings: [0] setsockopt ()
[saned] do_bindings: [0] bind () to port 6566
[saned] do_bindings: [0] bind failed: Address already in use
[saned] run_standalone: waiting for control connection
[saned] handle_client: spawning child process
[saned] handle_connection: processing client connection
[saned] check_host: detected an IPv4-mapped address
[saned] check_host: access by remote host: ::ffff:192.168.1.48
[saned] check_host: remote host is not IN_LOOPBACK nor IN6_LOOPBACK
[saned] check_host: local hostname: Keenetic_Ultra
[saned] check_host: getaddrinfo for local hostname failed: Temporary failure in name resolution
[saned] init: access by host ::ffff:192.168.1.48 denied
[saned] quit: exiting
Лог при запуске через xinetd:
Код: Выделить всё
saned (AF-indep+IPv6) from sane-backends 1.0.29 starting up
check_host: access by remote host: 192.168.1.48
check_host: getaddrinfo for local hostname failed: Temporary failure in name resolution
init: access by host 192.168.1.48 denied
saned exiting
В файле конфигурации saned.conf IP явно разрешен.
В итоге танцев с бубном проблему удалось решить следующим путем: идем в админку кинетика -> "Общие настройки", находим блок "Параметры системы", меняем в поле "Имя системы" буквенное название на IP адрес. При чем, любой IP адрес. Но лучше все же поставить "192.168.1.1".
Смысл в том, что по какой-то неведомой причине saned отказывает в доступе клиенту (даже если IP клиента разрешен в конфиге), если ему не удается по имени кинетика установить IP адрес кинетика. Имя задается в поле "Имя системы" в админке кинетика. Там можно указать цифры с точками и тогда, видимо, saned удовлетворяется этим и работает дальше. При этом ему не важно, какой именно там IP указан. Прикол в том, что можно любые цифры там написать, главное, чтобы не было букв.
Почему saned прекращает работу если не удалось получить IP по имени - загадка, так как IP клиента у него есть, как и есть белый список. А IP кинетика ему нужен только для того, чтобы понять, не пришел ли запрос от локального клиента, запущенного на самом кинетике.
В общем, такая штука. Если есть возможность внутри saned поправить такое поведение - будет здорово!