Option 1 cheaper? probably: buy from a local computer shop a pc case and stuff it with hard drives and then get the FreeNAS OS installed and configured. For this you need someone with some medium knowledge of unix based OS.
Also, be sure to get the fastest harddrive you can...above 7500rpm...ideally would be a 10k rpm if you guys need fast access and transfer speed from withing the HQ network.

Option 2 smarter: buy a dedicated NAS Storage like the ones from QNAP or Synology of WD and many others. I dont know about the others, but the Synology NAS's have a build-in software called CloudStation which lets you create your own dropbox like storage (with some limitations like files above 10Gb wont get synced). I personally have a Synology DS1813+ at home and it's more then i asked for having my own cloudbased system that runs on android, linux and windows is great. Also, you can set it up a backup server, webdav server, caldav server, email server, DLNA server...basicaly anything you guys should need for the forseeable future.

Now, as for the internet bandwith, that'll be tricky, you need to start doing some math.
For example:
for 10 users - each user has a 1Mbit bandwith at home or on the road. not everyone is going to upload with 1Mbps to your NAS but there may be situations in which it might happen...in this case i sugest you upgrade you internet connection to a at least asyncronious 10 Mbps download/5 Mbps upload OR a syncronious one of 10/10 Download/Upload. In any case, the internet conectivity will be affected if you dont upgrade the internet bandwith. But you could set up speed limits in transfers on the NAS (talking here about the synology and PROBABLY the others also). Yes, every NAS system can let you set up permissions known as ACL Access Control Lists, to limit users from accessing classified data.

A VPN is the best idea, it help you encrypt the traffic between the client and the server - in this case the remote staff and the equipment that accepts VPN connections. BUT this would not be absolutely necessary in the following situation: with a synology NAS buy a SSL Certificate (or create one for free - search google for startssl.com) and setup the NAS to use that certificate encrypting this way all the traffic to and from the NAS.

For the local bandwith things get a little expensive (if they havent got there yet). To get the most of you NAS (either beeing a dedicated NAS or a home build one - assuming the home build one has a network card of 10/100/1000) you need Gigabit LAN connections. This means every switch from the computer that wants to transfer data to/from the NAS has to have gigabit capabilities. You can find out just by looking at the switch...it usualy has a sticker or some decal placed on it that says "Gigabit"

Hope i shed some light :)
Good luck!
Dont forget to come back if you have any other questions :)

LINKS:

FreeNAS OS - http://www.freenas.org/

Synology DS1813+ - http://www.synology.com/products/product.php?product_name=DS1813%2B&amp;lang=enu

Setting up a storage server to replace Dropbox
Ok, so I've been using NSLog in objective-C for awhile now to debug and I know it's supposed to print to the terminal whatever I put in the parentheses. For some reason, it just stopped printing to the terminal and I'm not sure how to fix this error. I was wondering what other people would suggest doing to fix this problem. I've only included part of my code because I don't want to scare away someone from answering this simple (or at least I hope it's simple to fix) problem. When I run the code, the only two statements that print are "serverButton - Stage 1" and "serverButton - Stage 2 - Complete" but nothing else in between. FYI -(void)startServer is in another class called "Server" and I have made "server" a pointer to that said class.

-(IBAction)serverButton {
NSLog(@"serverButton - Stage 1");
[server startServer];
NSLog(@"serverButton - Stage 2 - Complete");
}

-(void)startServer {
    NSLog(@"serverButton - Stage 1");

    memset(&amp;hints, 0, sizeof hints);
    hints.ai_family = AF_UNSPEC; // set to AF_INET to force IPv4
    hints.ai_socktype = SOCK_DGRAM;
    hints.ai_flags = AI_PASSIVE; // use my IP

    if ((rv = getaddrinfo(NULL, MYPORT, &amp;hints, &amp;servinfo)) != 0) {
    	NSLog(@"ERROR: serverButton - Stage 1");
    	fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv));
    	serverError = 1;
    	NSLog(@"Error");
    }

