Jonathan Lam

Core Developer @ Hudson River Trading


Computer networking ramp-up projects

On 10/15/2021, 3:39:19 PM

Return to blog

The following was written for a mechanical engineering underclassman who was interested in basic networking/server administation. The following suggestions are general to anyone who is interested in the field. Networking is not my specialty but it is certainly an interest, and these are my suggestinos for how to get started.

If you're interested in setting up your own networking/servers/VPNs/etc., here are a few things to try (go in order of bullet points). You wouldn't normally be taught these in most classes at Cooper (unless you take Computer Networking), and it's also a lot more fun to play around with these on your own over winter break (highly recommended time) and set up cool stuff for yourself. There are a ton of tutorials out there as well; video tutorials are great for learning this kind of thing.

Note: if you're not familiar with the terminology "server" and "client," all this means are two computers connected over a network. A client usually sends a request to the server, and the server does something (e.g., retrieves a file, does some processing, etc.) and sends a response. Usually, the client and server aren't anything special in terms of hardware; they can be most ordinary general-purpose computers that are running the correct client and server software. In most cases I'll assume your client is something like your mobile laptop and the server is a dedicated computer you have running at home, always on and listening to requests. But your server can be a Raspberry Pi or even an Arduino and the client may be your Apple Watch, if the correct software is written for them.

  1. Get a second computer that's available on your network to act as the "server" -- this could be a fileserver, a webserver, a computation server, etc. (Not the cooper network -- it prevents you from seeing other devices on the same network.) Better to try this at home. If you don't have a second computer, you can set up a virtual machine on your main computer (make sure the networking is in "bridged" mode so it appears like any other computer on the network). Preferably a Linux server, but I'm sure there's plenty of good networking software for Windows. (Mac less so.)
  2. Install some sort of server software on the second computer. E.g., you can install ftp (file server/transfer), ssh (remote terminal), apache (webserver), samba (file server), plex (media/streaming server), minecraft server, etc. You can write custom server software that listens to requests and triggers some action (e.g., turns on the microwave when you tell it to). Again, a lot of the common servers may be easier to set up on Linux or some specialized server OS (e.g., FreeNAS), but it's up to you what OS/software you install on the server. (The client tends to be more flexible with regard to software.)
  3. Try to remote into the server (ssh) or access its services from your client on the same network. Even if you're on the same network, it may still be difficult to do so due to default firewalls/other permissions issues! But this is a good first step.
  4. If you want to access your network from outside, it's a good time to check out VPN's! Find some good VPN software (e.g., Wireguard or OpenVPN). You can install it on the server so that you can remote into your server, or you can set it up on your home network if your router supports such a function. (If your router doesn't support it, you can set up a "router server" using standard routing software like ripd for your home network and implement firewalls/logging/vpn/dns/custom routing services on it!) The main concern here is security, especially if the server is on your home network. You don't want to get your family/roommates DDoS'd or the server compromised. But if you set it up correctly, it can be very versatile and secure (after all, many if not most companies nowadays use VPN services for work-from-home). You may also need to set up port forwarding to access the server from outside your home network. Test this by accessing your server from outside home.
  5. Once the software base is solid, look at the hardware. (This is best done after prototying with software because this is probably more expensive and you need to have a good idea of what you want to do already, IMO. Using old server hardware is good for costs and reliability). For a fileserver, what are your speed/storage requirements? Do you want hardware or software RAID (almost no one cares about hardware RAID anymore)? How much RAM do you need to effectively run your server (fileservers need a lot of RAM to cache files to serve them quickly). If you are really extreme with number of HDD's, you need custom hardware to spin up disks gradually, so you don't get a power surge when turning on your computer. The same goes for other servers -- how much computational CPU/GPU power and memory do you need? What are the bottlenecks in the networking system?
  6. Go crazy. Play around with Tor for ultimate secrecy. Experiment with AWS or Azure to scale up your applications or offload your hardware to a cloud provider for cheap (this allows you to not worry about buying hardware yourself, and probably getting more computational power at a much cheaper price than if you financed your own hardware). Make everything remotely controllable and connected. (And then break down when an IoT hacker hacks everything you own. And then become an ethical hacker to fuel your thirst for revenge.)

© Copyright 2023 Jonathan Lam