我有一台定义了两个打印队列的 CUPS 服务器。定义完成后,同一子网上的所有 CUPS 客户端都可以自动看到这两个打印队列,没有问题。
现在,我在一个单独的子网上有一组机器,可以通过路由器从第一个子网访问。
如何在第二组机器上启用 CUPS 浏览,以便它们可以看到第一组机器上定义的打印队列?
我们将服务器称为 ABC7。第一个子网是 ABC0/24。第二个子网是 ABD0/24,并且两个网络上都有一个带臂的路由器。
答案1
“原生”方式是在每个子网上都安装一个 CUPS 服务器(它们不需要打印机,只需要 CUPS 软件),并将这些服务器配置为浏览中继服务器。配置如下
BrowsePoll a.b.c.7
BrowseRelay CUPS
然后,运行 CUPS 的服务器将使用远程服务器响应子网本地浏览请求。
还有一种方法可以通过多播和服务定位协议来实现,但是它并没有很好的记录下来。
答案2
cups 1.6 使用了 dnssd。此多播到 224.0.0.251 端口 5353。由于路由器不允许转发 224.0.0.251,因此数据包被卡在网关边界上。
您可以在网关上使用 avahi-daemon mDNS 反射器功能。
注意:如果您在网关处进行 nat,则需要为来自父网络的传入数据包设置 NONAT。在 shorewall/masq 文件中:
<external_interface> <parent_net_ip_range> NONAT
<external_interface> 224.0.0.0/4 NONAT
<external_interface>:!<parent_net_ip_range>,224.0.0.0/4 <subnet_ip_range> detect
路由器上的 avahi-daemon.conf
[reflector]
enable-reflector=yes
avahi-daemon will reflect incoming mDNS requests to all local network interfaces, effectively allowing clients to browse mDNS/DNS-SD services on all networks connected to the gateway.
Make sure to not run multiple reflectors between the same networks, this might cause them to play Ping Pong with mDNS packets.
PS:可能需要对数据包进行处理以增加生存时间。这是一个需要进一步调查的主题,但这里有 shorewall/start、原始 iptables 调整:
/sbin/iptables -t mangle -A PREROUTING -p all -s 224.0.0.0/4 -j TTL --ttl-inc <ttl_inc>
/sbin/iptables -t mangle -A PREROUTING -p all -d 224.0.0.0/4 -j TTL --ttl-inc <ttl_inc>
/sbin/iptables -t mangle -A PREROUTING -p all -s <parent_net_ip_range> -j TTL --ttl-inc <ttl_inc>
/sbin/iptables -t mangle -A PREROUTING -p all -d <parent_net_ip_range> -j TTL --ttl-inc <ttl_inc>
ttl_inc:从 1 开始的任何数字。虽然这不是一成不变的,但我本地使用的是 20。主要取决于打印机和客户端站之间交叉的路由器数量。
Gnome 控制中心的“打印机”在这里发送 ttl f 255(最大值),因此不是必需的。
答案3
据我所知,没有办法自动将其提供给不在同一子网上的其他客户端。CUPS 使用多播 DNS 数据包宣布自己。您仍然可以从另一个子网使用打印机(如果访问控制正确),但您必须通过其 IP 地址手动添加它。