1
август
2025
Установка сетевых принтеров в Linux - часть 2: IPP/IPPS и cups-browsed
15:12

Установка сетевых принтеров в Linux - часть 2: IPP/IPPS и cups-browsed

1 август 2025 15:12

Продолжение. См. часть 1, продолжение часть 3. окончание часть 4.

3.1.2. Протоколы печати IPP и IPPS

IPP - сокращение от "Internet Printing Protocol" и IPPS - сокращение от "Internet Printing Protocol over HTTPS". Данные протоколы являются основными для передачи заданий печати на сетевые принтеры.

Протокол IPP разработан американской фирмой Novell, которая специализируется на ПО для сетевой инфраструктуры. Фирма Novell находится в городе Прово, штате Юта, США. Основной акцент IPP сделан на безопасность и корректную реализацию. В IPP (IPPS) есть понятие "Принтера" на высоком уровне, объектов типа "Задание" и "Документ". Безопасность в IPPS: реализованы механизмы аутентификации для защищённой печати в локальной сети или через Интернет: возможна установка сертификата электронной подписи и секретного ключа на принтере, который обеспечивает защищенную шифрованием печать по протоколу IPPS, в том числе и на офисные или домашние принтеры, по сети Интернет. Протоколы IPP и IPPS очень широко распространён среди ПО для многофункциональных устройств и принтеров и поддерживается в программном обеспечении Linux CUPS. Актуальные версии протокола 2.0, 2.1 и 2.2.

Протокол IPP использует порт:

  • 80/TCP - для обнаружения, добавления и конфигурирования принтера в локальной вычислительной сети Ethernet или Wi-Fi, по протоколу ipp:// (описан в стандарте RFC 2911). Нетрудно догадаться, что порт 80 также используется для www-серверов в Интернет. Общее между IPP и HTTP протоколами - оба работают на порту 80 и являются протоколами прикладного уровня.
  • 631/TCP - для передачи заданий. Также, при обращении по HTTPS к принтеру, происходит переадресация клиента на порт 631.

Поскольку порт IPP:// 80 сопоставлен (mapped) на 631 порт, следующие записи равноценны:

ipp://host/ipp/print
http://host:631/ipp/print

Протокол IPPS использует порты:

  • 443/TCP - для обнаружения и добавления и конфигурации в локальной вычислительной сети Ethernet или Wi-Fi сетевого принтера, который поддерживает печать по протоколу ipps:// (S - secured, т.е. защищённый).
  • 631/UDP - для обнаружения принтера в локальной вычислительной сети (printer discovery).
  • 631/TCP - для передачи заданий (jobs) на печать, т.е. для передачи страниц документа на принтер. Источник RFC 7472).

Поскольку порт IPPS:// 443 сопоставлен (mapped) на 631 порт, следующие записи равноценны:

ipps://host:443/ipp/print
https://host/ipp/print

или

ipps://server.example.com/ipp/print/printer3
https://server.example.com:631/ipp/print/printer3

Из этого видно, что для печати из Интернет нужно в Wi-Fi маршрутизаторе настраивать "проброс" портов 443 и 631 на внутренний (локальный) IP-адрес принтера за маршрутизатором. По всей видимости, маршрутизатор в сети Интернет должен иметь или фиксированный "белый" IP-адрес или использовать технологию DDNS.

Преимущества IPP и IPPS:

  • IPPS гораздо более безопасный, чем AppSocket. Из-за наличия шифрования данные не могут быть перехвачены.
  • IPP и IPPS широко поддерживается производителями сетевых принтеров для работы в домашних и офисных локальных сетях
  • возможно подключение к удалённому принтеру через сеть Интернет, при вводе в параметрах принтера URL вида:
  • используются стандартные порты 80 и 443, которые скрытым образом сопоставлены порту 631. При подключении к принтеру для отправки заданий печати возможно обращение к порту IPS 443 или HTTPS.
    • ipp://printer.example.com/ipp
    • ipps://printer2.example.com:443/ipp/print
    • ipps://server.example.com/ipp/print/printer3
    • http://printer.example.com:631/ipp
    • https://printer2.example.com/ipp
    • https://server.example.com:631/ipp
  • В продвинутых вариантах установки "IPP EverywhereTM" и DNSSD, после поиска принтера в локальной сети имя принтера автоматически подставляется в форму CUPS при добавлении принтера.

Недостатки:

  • при использовании в локальной сети обращение про DNS имени в псевдо-домене
    .local. Например:
    • ipps://printer_name.local/
    • ipps://Kyocera%20ECOSYS%20M2035dn._ipps._tcp.local/
  • подключение к принтеру может не работать по таким адресам как, например ipps://printer_name.local или ipp://printer_name.local. Решение: если подключение планируется по ими принтера `printer_name.local`, то нужно добавить в файл `/etc/hosts` для фиксированного IP-адреса принтера 192.168.1.123 строчку вида:
    192.168.1.123 printer_name.local
    после чего установить принтер в CUPS. Например, если имя принтера KM31DC19.local, в файл hosts добавил строку 192.168.1.123 KM31DC19.local , перешёл в администрирование CUPS:
    http://localhost:631/admin
    , где нажал кнопку "Добавить принтер", "Протокол интернет-печати (ipp) " -> "Продолжить" и ввёл строку подключения к принтеру по имени:
    ipp://KM31DC19.local/ipp -> "Продолжить", затем для установки драйвера я указал фирму Kyocera -> "Продолжить", модель принтера " M2540dn". Печать с компьютера на этот сетевой принтер заработала!

Примечание. Для установки сетевого принтера IPP или IPPS с драйвером (в отличие от варианта "driverless") нужно на последнем этапе установки принтера в CUPS указать вариант "использовать файл PPD" и выбрать файл драйвера принтера формата PPD. Он занимает около 1 МБ и его нужно заранее скачать с сайта производителя принтера. Например, для принтеров Kyocera ссылка для загрузки: KYOCERA Document Solutions - Загрузки

Определение и проверка IP-адреса принтера IPP

Если возможности принтера не известны заранее, нужно узнать его IP-адрес и выполнить проверку открытых портов IPPS у принтера. Для определения наличия технологии IPPS:

nmap 192.168.1.113 -p 80

где 192.168.1.113 - IP адрес принтера в локальной сети.

Если порт "open", откроем с помощью веб-браузера данный IP-адрес и узнаем имя устройства
Имя указано в случае Kyocera в верхнем углу. У меня имя хоста: KM31DC19.

Определение и проверка IP-адреса принтера IPPS

Если возможности принтера не известны заранее, нужно узнать его IP-адрес и выполнить проверку открытых портов IPPS у принтера. Для определения наличия технологии IPPS:

nmap 192.168.1.113 -p 443
nmap 192.168.1.113 -p 631
curl -vvI 192.168.1.113

где 192.168.1.113 - IP адрес принтера в локальной сети, 443 и 631 - порты IPPS, Команда curl -vvI ... показывает безопасность https.

Также как и в случае IPP, при IPPS узнаем имя хоста, открыв адрес принтера в веб браузере http://ip_address:

В моём случае:
KM31DC19

Как настроить сетевой принтер по протоколу IPP (старый принтер или без использования IPP Everywhere)

  1. Перейдите на персональном компьютере с ОС Linux в настройки CUPS - в веб браузере нужно ввести в строку адреса: http://localhost:631/.
  2. На веб странице CUPS выбрать пункт меню Администрирование - Добавить принтер
  3. Затем "другие сетевые принтеры" - "IPP ", Нажмите Продолжить
  4. Введите вручную ipp://KM31DC19.local/ipp (без косой черты в конце!) - замените KM31DC19 на реальное имя хоста принтера. Нажмите Продолжить
  5. заполните поле "Наименование" - без пробелов. Например. Kyocera_IPP (имя не должно содержать пробелов, знак подчёркивания _ допустим) Нажмите Продолжить
  6. в поле "создать" укажите производителя, например Kyocera. Нажмите Продолжить
  7. в верхнем списке укажите драйвер принтера, соответствующий модели, указанной на задней панели МФУ (принтера) или на упаковке. Например, для модели многофункционального устройства Kyocera M2540dn можно выбрать драйвер Kyocera ECOSYS M2540dn (KPDL), driverless, cups-filters или укажите драйвер: "использовать файл PPD" и выберите файл *.ppd, загруженный ранее с сайта производителя принтера.. Нажмите "Добавить принтер".
  8. Укажите размер бумаги (A4), лоток (Automatic или Tray 1), Media type (Automatic), 2-side printing (On Portrait)/Off), выход бумаги Output Tray: Top, Print scaling: Automatic. На закладке Policies проверьте "retry-printer".
  9. Нажмите Сохранить параметры. Принтер добавлен.
  10. Проверьте, что принтер доступен в сети по имени
    ping KM31DC19.local
    Если ошибка выполнения "ping: KM31DC19.local: Неизвестное имя или служба", добавьте в файл hosts запись вида:
    192.168.1.115 KM31DC19.local
    где 192.168.1.115 - IP-адрес принтера. Сохраните файл hosts.
  11. Теперь нужно разрешить принтер и сделать "по умолчанию":

Пуск - Администрирование - Принтеры - Имя принтера - щелкнуть правой кнопкой мыши и установить "Активен" и "Назначить общесистемным принтером по умолчанию".

Если задание уходит ("Printing"), но принтер не печатает (в Пуск - Администрирование - Принтеры - Имя принтера - "Просмотр очереди печати" состояние "Render complete" или "Отложено", "Paused" и т.д.) - такое бывает при использовании заправленного или неоригинального картриджа с подключением по IPP://. так как невозможно определить уровень порошка тонера или чернил. С другим принтером ipp://Pantum-4AF471.local/ipp такой проблемы нет. Также нет проблемы с Kyocera при использовании режима IPPS (см. следующий параграф).

 

Как настроить сетевой принтер по протоколу IPPS (старый принтер или без использования IPP Everywhere)

  1. Перейдите на персональном компьютере с ОС Linux в настройки CUPS - в веб браузере нужно ввести в строку адреса: http://localhost:631/.
  2. На веб странице CUPS выбрать пункт меню Администрирование - Добавить принтер
  3. Затем "другие сетевые принтеры" - "IPP ", Нажмите Продолжить
  4. Введите вручную http://KM31DC19.local:631/ipp (без косой черты в конце!) - замените KM31DC19 на реальное имя хоста принтера. Нажмите Продолжить
  5. заполните поле "Наименование" - без пробелов. Например. Kyocera_IPPS (имя не должно содержать пробелов, знак подчёркивания _ допустим). Нажмите Продолжить
  6. в поле "создать" укажите производителя, например "Kyocera". Нажмите Продолжить
  7. в верхнем списке укажите драйвер принтера, соответствующий модели, указанной на задней панели МФУ (принтера) или на упаковке. Например, Kyocera ECOSYS M2540dn (KPDL), driverless, cups-filters или укажите драйвер: "использовать файл PPD" и выберите файл *.ppd, загруженный ранее с сайта производителя принтера. Нажмите "Добавить принтер".
  8. Укажите размер бумаги (A4), лоток (Automatic или Tray 1), Media type (Automatic), 2-side printing (On Portrait)/Off), выход бумаги Output Tray: Top, Print scaling: Automatic. На закладке Policies проверьте параметр "Политика ошибок" - значение "retry-job".
  9. Нажмите Сохранить параметры. Принтер добавлен.
  10. Проверьте, что проходит проверка ping принтера по сетевому имени.

    ping KM31DC19.local
    Если ошибка выполнения "ping: KM31DC19.local: Неизвестное имя или служба", добавьте в файл hosts запись вида:
    192.168.1.115 KM31DC19.local
    где 192.168.1.115 - IP-адрес принтера. Сохраните файл hosts.

  11. Теперь нужно разрешить принтер как Активный и сделать для печати по умолчанию:

Пуск - Администрирование - Принтеры - Имя принтера - щелкнуть правой кнопкой мыши и установить флажок "Активен", в пункте меню "Использовать по умолчанию" - "Назначить общесистемным принтером по умолчанию" или "Назначить в качестве принтера по умолчанию для текущего пользователя".


Как настроить сетевой принтер по протоколу IPPS (новый принтер с использованием IPP EverywhereTM)

  1. Перейдите на персональном компьютере с ОС Linux в настройки CUPS - в веб браузере нужно ввести в строку адреса: http://localhost:631/.
  2. На веб странице CUPS выбрать пункт меню Администрирование - Найти принтер или "Добавить принтер".
  3. Затем выберите принтер с упоминанием печати без драйверов "(driverless)". Например, "Kyocera ECOSYS M2540dn (KPDL) (driverless) (Kyocera ECOSYS M2540dn (KPDL))". Нажмите Продолжить
  4. На следующем экране будут показаны параметры подключения, где полное DNS-имя содержит "._ipps._tcp.local/" нажмите Продолжить.
  5. Исправьте поле "Наименование" - без пробелов. Например. Kyocera_IPP_Everywhere (имя не должно содержать пробелов, знак подчёркивания _ допустим). Нажмите Продолжить
  6. выберите первую строку списка - модель принтера с упоминанием IPP EverywhereTM и нажмите внизу "Добавить принтер".
  7. Нажмите Сохранить параметры. Принтер добавлен.

3.1.3 - печать IPP/IPPS с использованием обнаруженных принтеров службой cups-browsed

Служба cups-browsed ищет сетевые принтеры и многофункциональные устройства (МФУ) с поддержкой IPP/IPPS при запуске компьютера. В дальнейшем найденные принтеры видны при обращении к меню "Файл" - "Печать". Список принтеров получается динамическим, время обнаружения принтеров может составлять несколько секунд.

Служба cups-browsed разработана группами разработчиков OpenPrinting и PWG (Printing Working Group) из США. одного из проектов, являющихся частью операционной системы Linux. Авторы cups-browsed: Till Kamppeter, Deepak Patankar. Лицензия Apache License v2.0.

Настройка подключения вручную не требуется, она автоматическая, при выборе принтера.
Протокол подключения cups-browsed следующий: implicitclass://printer_name/ Таким образом. подключение к принтеру осуществляется через программную прослойку, что в наибольшей степени облегчает настройку и печать на принтер. Обратной стороной медали, как сказано выше, является небольшая задержка при использовании cups-browsed и повышение нагрузки на центральный процессор.

Преимущества cups-browsed:

  • настройка принтера в привычном понимании не требуется. Нужно только выбрать нужный обнаруженный сетевой принтер.

  • после подключения используется протокол ipps, но его подробности скрыты от пользователя.

  • безразлична к фиксированным или динамическим IP адресам (DHCP).

Недостатки cups-browsed:

  • задержка открытия меню Файл - Печать (например, в Linux Mint или Linux Green), требуемая для обнаружения сетевых принтеров.
  • уязвимости, т.к. наружу открыт порт 631. Злоумышленники могут отправлять произвольные UDP пакеты на порт 631, что в лучшем случае приводит к поломке службы, а в худшем к перехвату управления компьютером.

Чтобы избавиться от задержки, нужно установить принтер вручную и отключить службу

sudo systemctl stop cups-browsed
sudo systemctl disable cups-browsed
sudo systemctl restart cups

Включить службу обратно, если хотим обнаруживать принтеры автоматически:

sudo systemctl enable cups-browsed
sudo systemctl start cups-browsed

Заблокировать порт 631 на брандмауэре извне (решение проблемы с уязвимостью).

sudo apt install ufw
sudo ufw enable
sudo ufw deny 631 #  block port
sudo ufw status numbered
sudo ufw reload

Дистрибутив Linux, использующий Cups-Browsed "из коробки" описан в 4 части данной серии статей.




Похожие публикации