USB NAS and print server
I assume you have a compatible router with usb ports with the Teddy Bear mod Tomato firmware installed.
These instructions show that the USB NAS portion is quite easy. Once the hard drives are connected, they are automatically mounted in the router's Linux OS. A computer on the same network can connect to the router's hostname/ip via the samba protocol or ftp (if enabled).
Printserver was less obvious since I wasn't familiar with it. Tomato uses p910nd printer daemon. By default, only 1 instance is running on Tomato on port 9100. If you plan on connecting multiple printers (eg, adding through a USB hub), then you will need to run additional instances of p910nd in the startup script of the Tomato firmware:
/usr/sbin/p910nd -b -f /dev/usb/lp1 1
Continue to add 2, 3, …, if more printers are required. Reboot the router, and another instance is added to port 9101, etc. Note: the ordering is based on the proximity of the USB ports. Check the USB page on the router config site to determine the ordering.
To add a printer on a Windows machine, you will have to add it MANUALLY (auto-detect of any kind will not work). Following copied in case those links die:
HOW TO SET UP A PRINTER WITH TOMATO
I installed the printer the same exact way I do most USB print servers
GO TO ADD PRINTER
ADD A NETWORK PRINTER
SKIP AUTO DETECTION AND DO IT MANUALLY
ADD A PRINTER USING A TCP/IP ADDRESS…
DEVICE TYPE: TCP/IP DEVICE
HOSTNAME/IP: Your_Router_IP (ex: 192.168.1.1, mine is different), PORT NAME: let it auto-populate
UNCHECK the "Query the printer…"
Detection should fail…
On bottom, DEVICE TYPE click on CUSTOM, then SETTINGS
Leave all default ports and settings and click OKAY
Finish everything and print a test page.
On my Ubuntu, searching the printer on the router's hostname/ip works. However, on all machines, you will have to select the type of printer manually.