Scenario: Customer has a Zebra LP 2824 (or other USB Label Printer) and wants to print to the printer from a remote server over the Internet.
Customer wanted a low-cost print server, so I found the IOGear 1-Port USB 2.0 Print Server (Model: GPSU21). This handy little device creates a print server that works locally on port 515 as an LPD print server, on port 9100 as a TCP/IP raw print server, and on Port 631 as an IPP (Internet Printing Protocol) Print server.
Although port 515 and 9100 worked for me locally on the same network for some reason printing to that same port from a remote network mapped through the firewall wouldn’t work. When I called IOGear they said doing that wasn’t supported either – they only support what’s in the manual – IPP printing on port 631 – so that’s what I did.
Now in my case, I’ve got a whole bunch of printers mapped through the firewall so publishing the native port of 631 wasn’t an option. I wanted to publish a different port so using the CISCO Linksys RV042 router, I created a UPnP Service to map External Port 8109 (i.e. some random high port) to the Internal port of 631.
To do that I went to the Setup menu, chose UPnP, clicked the Service Management Button:
Entered a Service Name (doesn’t matter what you pick I put the name of the printer and the external port I was publishing: Zebra8109):
- Set Protocol to TCP
- Set the External Port to 8109
- Set the Internal Port to 631
- Click the Add to list button.
- Click the Save Settings button
Back on the UPnP tab, select the service you just created from the list. Enter the internal IP of the device (I’ve skipped the step where you ran the CD that came with the IOGear and assigned the device a fixed IP – I’m assuming you can handle that part), checked the Enable checkbox and clicked Add to List.
To test that I got the firewall rule mapped correctly, from the remote server I did a telnet test:
Telnet ExternalIPOfTheFirewall 8109
If you did your job right, then a successful connection will look like this:
and if you hit Enter you’ll see this:
<TITLE>ERROR</TITLE><H1>501 Not Implemented</H1>Method "" is not supported.
Connection to host lost.
Which is the IPP protocol’s response to your invalid command of hitting Enter.
All the above means you’ve got a good communications link inbound.
Add the printer
Now on the remote server, start the Add Printer wizard and choose the “Add a network, wireless or Bluetooth printer” option. (The screen captures are from a Windows 2008 R2 Server)
Click Stop
Click the “The printer that I want isn’t listed” option.
Enter the address:
http://(ExternalNameOrIPHere):8109/lp1
(Make sure the LP1 is in lower case: lp1)
Then click Next
then finish the wizard.
Now, when you print your test page, if the test page does not print, but DOES leave the printer queue, you may have to add an INBOUND firewall rule on the Windows 2008 R2 server.
To troubleshoot the printer data going to the printer, go to the internal IP of the print server with a web browser on the machine that is on the same network:
Click on Print Jobs on the left side of the screen.
Click View Job Log
Here you can see that the successful tests were the last ones, and they show the Protocol as IPP.
My previous attempts to get this working with other protocols like 9100 RAW, showed the job hitting the queue, but with small bytes printed (3219 bytes) – that was a Windows test page. A successful Windows printer test page done from a machine on the same network to port 9100 was 22823 bytes.
Bottom line, for me the IPP protocol worked, and now I can print labels to this printer across the Internet from a server located in a different city.
Great article but an alternative to this might be PrintNode.