LINUX.ORG.RU
решено ФорумAdmin

CUPS: printer sharing

 


0

1

Всем привет!

Есть два компьютера: PC1 имеет доступ к принтеру по сети, PC2 не имеет доступа к принтеру, но находится в одной сети с PC1.

Задача: печатать с PC2 через PC1.

Что сделано: на PC1 установлен CUPS, добавлен принтер через веб интерфейс (http://PC1:631), отмечен чек-бекс «share this printer». Печать выполняется.

Вопрос: как добавить этот принтер в CUPS на PC2? По какому протоколу? Варианты на выбор

Other Network Printers:	 Backend Error Handler 
 Internet Printing Protocol (ipp) 
 LPD/LPR Host or Printer 
 AppSocket/HP JetDirect 
 Internet Printing Protocol (http) 
 Internet Printing Protocol (https) 
 Internet Printing Protocol (ipps) 
 Internet Printing Protocol (ipp14) 

Пробовал добавить по адресу lpd://PC1/PRINTER_NAME, подсовывая на PC2 ppd-файл, - не печатает тестовую страницу.

Если нужна дополнительная информация - предоставлю любой выхлоп.

★★★★★

Other Network Printers: Backend Error Handler - вот это настораживает - может, на PC2 проблемы какие-то?

а так по-разному можно, как больше нравится. я чаще всего использую ipp, реже LDP/LPR попробуй по адресу ipp://PC1/PRINTER_NAME

pkuutn
()

PC1 имеет доступ к принтеру по сети, PC2 не имеет доступа к принтеру, но находится в одной сети с PC1.

Что мешает настроить на PC1 маршрутизацию так, чтобы PC2 получил доступ к принтеру по сети?

Serge10 ★★★★★
()
Ответ на: комментарий от Serge10

Тоже вариант! Спасибо за подсказку, не подумал.

aquadon ★★★★★
() автор топика
Ответ на: комментарий от Serge10

Не подскажешь сразу по маршруту?

На PC2 делаю

$ ip route add PRINTER_IP/32 via PC2_IP
RTNETLINK answers: Network is unreachable
aquadon ★★★★★
() автор топика
Ответ на: комментарий от aquadon

Для начала расскажите, пожалуйста, про структуру Вашей сети. Насколько я понимаю, на PC1 несколько сетевых интерфейсов? Один смотрит в сеть с PC2, второй в сеть с принтером? Какие машины являются шлюзами по умолчанию в обеих сетях?

Если так, то на PC1 должен быть разрешен форвардинг пакетов.

Кроме того, нужен еще маршрут для обратных пакетов (от принтера к PC2). Задать его лучше на шлюзе по умолчанию в сети принтера.

$ ip route add PRINTER_IP/32 via PC2_IP

Почему PC2_IP? Должен быть IP машины, которая имеет доступ принтеру (PC1, насколько я понимаю).

Есть еще вариант с NAT (настроить так, чтобы PC1 натил пакеты от PC2 на принтер), но мне он нравится меньше, чем простая маршрутизация.

Serge10 ★★★★★
()
Последнее исправление: Serge10 (всего исправлений: 1)
Ответ на: комментарий от Serge10

Есть еще вариант с NAT (настроить так, чтобы PC1 натил пакеты от PC2 на принтер), но мне он нравится меньше, чем простая маршрутизация.

Именно так я и попытался сделать «по быстрому», добавив ip_forward и masquerade на PC1, но потерпел неудачу.

Для начала расскажите, пожалуйста, про структуру Вашей сети.

Сейчас приду в офис и распишу подробно. Заранее спасибо за желание помочь!

aquadon ★★★★★
() автор топика
Последнее исправление: aquadon (всего исправлений: 1)
Ответ на: комментарий от Serge10

Структура сети:

PC: 	  140.0.1.1, доступен извне
Printer:  140.0.1.2, извне не доступен
Laptop:   IP произвольный

* адреса вымышленные

PC имеет белый статический IP, доступен через интернет. Printer доступен только машинам из сети 140.0.1.0/24, роутер (шлюз) сети не пускает к нему извне и даже из другой подсети 140.0.2.0/24.

Laptop может подключаться к интернету как угодно. В офисе он получает адрес из сети 140.0.2.0/24 и принтер ему все равно не доступен.

Дополнительная информация: PC и Laptop также находятся в одной виртуальной сети (wireguard). Но я думаю, что без использования это виртуальной сети вмолне можно обойтись для данной задачи (чтобы не добавлять лишний уровень абстракции).

Мое видение решения:

На Laptop добавить маршрут к 140.0.1.2 (Printer) через 140.0.1.1 (PC). На PC добавить немного магии для пересылки пакетов от Laptop к принтеру и обратно.

aquadon ★★★★★
() автор топика
Ответ на: комментарий от Serge10

Почему PC2_IP? Должен быть IP машины, которая имеет доступ принтеру (PC1, насколько я понимаю).

Именно так, должен быть PC1_IP, опечатался.

Кроме того, нужен еще маршрут для обратных пакетов (от принтера к PC2). Задать его лучше на шлюзе по умолчанию в сети принтера.

Доступа к шлюзу я не имею.

aquadon ★★★★★
() автор топика
Ответ на: комментарий от aquadon

Доступа к шлюзу я не имею.

Это плохо. Смотрите, что происходит - PC2 (лаптоп) шлет запрос к принтеру. Благодаря маршруту, заданному на PC2, пакет идет через PC1 и достигает принтера. Принтер шлет ответ. Поскольку пакет из другой сети, а никаких дополнительных маршрутов на принтере не прописано, ответ направляется на шлюз. Но шлюз-то ничего не знает о PC2! И ответные пакеты просто отбрасываются...

PC имеет белый статический IP, доступен через интернет.
Printer доступен только машинам из сети 140.0.1.0/24

Хорошо, а если поступить по-другому - воспользоваться DNAT и пробросить необходимые для печати порты принтера через PC1?

Именно так я и попытался сделать «по быстрому», добавив ip_forward и masquerade на PC1, но потерпел неудачу.

Странно, этот способ тоже должен работать. А как именно делали?

Serge10 ★★★★★
()
Ответ на: комментарий от Serge10

Странно, этот способ тоже должен работать. А как именно делали?

Делал так:

# PC
nano /etc/sysctl.conf ... net.ipv4.ip_forward = 1
echo 1 > /proc/sys/net/ipv4/ip_forward # для немедленного включения
iptables -A FORWARD -i enp4s0 -j ACCEPT; iptables -t nat -A POSTROUTING -o enp4s0 -j MASQUERADE;

# Laptop
ip route add PRINTER_IP/32 via PC2_IP
RTNETLINK answers: Network is unreachable
aquadon ★★★★★
() автор топика
Ответ на: комментарий от aquadon

enp4s0

Напишите, какие интерфейсы куда смотрят на PC1. enp4s0 - интерфейс в сеть принтера?

via PC2_IP

Снова опечатка?

Serge10 ★★★★★
()
Ответ на: комментарий от Serge10

Снова опечатка?

Да, скопировал из предыдущего комментария с опечаткой :)

Напишите, какие интерфейсы куда смотрят на PC1. enp4s0 - интерфейс в сеть принтера?

На PC1 есть только один физический интерфейс. Он находится в одной сети с принтером. Но он же доступен через интернет.

aquadon ★★★★★
() автор топика
Ответ на: комментарий от aquadon

На PC1 есть только один физический интерфейс. Он находится в одной сети с принтером. Но он же доступен через интернет

2 IP на одном интерфейсе? Приведите вывод ifconfig.

Serge10 ★★★★★
()
Ответ на: комментарий от Serge10

Нет, у него один IP.

Laptop - Internet -  Router? - PC1
                             - Printer

Вопросительный знак стоит т.к. мне не известна вся структура сети.

aquadon ★★★★★
() автор топика
Ответ на: комментарий от aquadon

Нет, у него один IP.

Подождите, Вы выше писали:

PC имеет белый статический IP, доступен через интернет.
Printer доступен только машинам из сети 140.0.1.0/24

Получается, что принтер тоже имеет белый стат. IP, доступ к которому ограничен файрволом на шлюзе?

Serge10 ★★★★★
()
Ответ на: комментарий от Serge10

Получается, что принтер тоже имеет белый стат. IP, доступ к которому ограничен файрволом на шлюзе?

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

aquadon ★★★★★
() автор топика
Последнее исправление: aquadon (всего исправлений: 1)
Ответ на: комментарий от aquadon

либо сам принтер отклоняет запросы не из своей сети.

В этом случае NAT - единственный вариант.

Serge10 ★★★★★
()
Ответ на: комментарий от aquadon

Попробуйте тогда такой вариант:

На PC1:

iptables -P FORWARD ACCEPT

Это на время экспериментов, потом можно будет ограничить доступ только для лаптопа.

iptables -t nat -A POSTROUTING -s LAPTOP_VPN_IP -d PRINTER_IP -o enp4s0 -j MASQUERADE

На лаптопе маршрут к принтеру (через VPN):

ip route add PRINTER_IP/32 via PC1_VPN_IP

И с помощью tcpdump посмотрите, что будет с пакетами на интерфейсах VPN и enp4s0 на PC1 при попытке пинга принтера с лаптопа.

Serge10 ★★★★★
()
Последнее исправление: Serge10 (всего исправлений: 2)
Ответ на: комментарий от Serge10

И с помощью tcpdump посмотрите, что будет с пакетами на интерфейсах VPN и enp4s0 на PC1 при попытке пинга принтера с лаптопа.

Все работает :) Уже подключил принтер.

Это на время экспериментов, потом можно будет ограничить доступ только для лаптопа.

Какие дальнейшие действия?

aquadon ★★★★★
() автор топика
Ответ на: комментарий от aquadon

Все работает :) Уже подключил принтер.

Отлично!

Какие дальнейшие действия?

iptables -P FORWARD DROP
iptables -A FORWARD -i PC1_VPN_IP -s LAPTOP_VPN_IP -j ACCEPT
iptables -A FORWARD -i enp4s0 -d LAPTOP_VPN_IP -j ACCEPT
Serge10 ★★★★★
()
Ответ на: комментарий от aquadon

А вот так перестало работать.

Тогда попробуйте убрать ключи -i в обеих командах. Если не поможет, будем завтра разбираться, на свежую голову :).

Serge10 ★★★★★
()
Ответ на: комментарий от Serge10

Возможно, дело в настройках Wireguard. Завтра напишу схему VPN. Сегодня голова уже не варит. Спасибо за помощь!

aquadon ★★★★★
() автор топика
Ответ на: комментарий от Serge10

Тогда попробуйте убрать ключи -i в обеих командах.

Работает :)

aquadon ★★★★★
() автор топика
Ответ на: комментарий от Serge10

На данный момент я вполне доволен, поставленная задача выполнена. Позже, при наличии свободного времени, я хотел бы вернуться и обдумать другие варианты решения задачи (это связано не только с печатью но и с другим сетевым взаимодействием моих машин).

Если вы не против, я бы призвал вас в тему позже.

aquadon ★★★★★
() автор топика
Ответ на: комментарий от aquadon

Если вы не против, я бы призвал вас в тему позже.

Ok, не вопрос :).

Serge10 ★★★★★
()
Ответ на: комментарий от Serge10

Немного критики заказывали?

iptables -A FORWARD -i PC1_VPN_IP -s LAPTOP_VPN_IP -j ACCEPT

Мы же подразумеваем что PC1_VPN_IP - это IP адрес? Намек понятен?

anc ★★★★★
()
Ответ на: комментарий от anc

Немного критики заказывали?

Спасибо.

Мы же подразумеваем что PC1_VPN_IP - это IP адрес? Намек понятен?

Я догадался, поэтому и посоветовал убрать ключ -i :). Сколько раз говорил себе, не давать советов на несвежую голову, и вот опять :(.

Да и вообще, если подумать, зачем тут ограничение по интерфейсу, если речь идет о туннеле, которым пользуется ровно один клиент?

Serge10 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.