The first time my company gave me a virtual development server to test my apps in, I was hooked. I can install stuff on it! Run three different web servers! Git deploy my apps! (I haven’t tried any of those since it’s not my server, but it’s what I’d do if it was) Screw web hosting, I want a VPS! But, of course, with great power comes great fees, and I can’t afford to rent one. Er, actually, I can, but if I do that, it’ll earn me the title “Financially Irresponsible.”
Then the other day, I got an idea. What if I just set up my own server here, in my own home? I already have a non-stop DSL connection here, so what’s left is just getting myself a server and a whole lotta configuration. Problem is, how can I make things as cheap as possible? I mean, I’m just going to use it for fun, not for business or anything even remotely serious.
My answer is: Home connection + Raspberry Pi + No-IP.
First, here’s a check list of how to make a homegrown server (as far as I know):
- A machine to use as the server
- Internet connection with Static IP at home
- A domain
Problem number one, the server: Purchasing a server PC that can cost tens of millions of Rupiah is totally out of the question. Fortunately, I have an unused laptop at home, and I can turn it into a server, but leaving it on for too long will be kinda costly to my electricity bill.
Problem number two, the static IP: Telkom is my ISP and I went with the cheapest internet plan. My plan is expensive enough, so there’s no way I’d put a bigger hole on my bank account by upgrading to a plan with static IP.
Problem number three, the domain: Compared to the other two, this one is probably the easiest to overcome. Some domains go as cheap as Rp15.000 a year, but if I want to look cool like everyone else, the .com domain only costs around Rp125.000. Still, I’d rather not pay anything.
Here’s how I answer those problems:
Raspberry Pi costs around half a million Rupiah, which is pretty expensive considering I’ll be using it as nothing but a toy, but I still consider it a pretty good solution. It’s also only powered by a 5V 2A charger, so it shouldn’t be too costly to let it run for hours everyday.
No-IP answers both the second and third problems: it lets me reserve a subdomain in their domain, and it will point to my home connection’s dynamic IP address.
Now, before purchasing myself a Raspberry Pi, I’d like to test No-IP and see if it’ll work with my router. After all, I don’t want to waste my money on that mini-machine and then have my dreams fall apart because my router can’t be used with No-IP.
So I went and tested it with my PC, and it worked. To confirm that it actually worked I tried to access it using three connections: my XL Axiata mobile data, my friend’s home connection, and a web proxy. It’s all positive.
Then, as a note to myself in the future and to help people who stumbled here, I’ll detail the steps on how to configure Telkom’s Zyxel router so that it works with No-IP.
The router that I have is the black Zyxel one with four RJ-45 ports and two antennas. I’m too lazy to snap a picture of it, so just go have a look at my screen shot of the configuration page.
As you can see, my router’s default local address is 192.168.1.254. To access the settings, you have to login by clicking that blue “Login” hyperlink on the top right of the page and put in the credentials, which is both admin for username and password by default.
After logging in, there will be three icons on the bottom of the page, and you’ll have to click the “settings” one (the cog image) to reach the actual configuration panel.
The first thing I suggest you do is give the server a static IP. That way, whenever the server connects to this router, it will be given the same IP every time. Actually, the router seems to “remember” stuff and gives returning devices the same IP they were given last time, but we want to be sure, don’t we? So go click on that LAN option.
Here, you see that I have set up a few static IP addresses to give out to certain MAC addresses. To add a new entry, click on the Add button and fill in the details: the MAC address of the server’s Wi-Fi card and the IP address you want the router to give it every time. Host name can be left blank. Then click Save to save your changes and then Apply to… apply it, I guess.
Now, when you click the save button, it might throw out an error. From what happened to me, there are two kinds of them: Illegal IP Address and Duplicate IP Address. Illegal IP Address happens when you assign it an IP that’s outside of the DHCP’s starting and end IP address, while Duplicate IP Address happens when the server is still connected to the router, which means it already has an IP Address, but you’re trying to assign it another one; the answer to this is that you should disconnect your server, restart the router, and then assign the static IP. It should work now.
After you’ve applied your changes, press Back on the top left of the page and go to Port Forwarding.
Here is why the entire internet can access your local server: because the router opens up ports for outside access.
Like before, press Add to add a new entry, put in the details, Save, and Apply. Let me explain the fields:
- You can fill Application with anything, and as you can see, I filled it with “noipserver” because why not;
- Start and End is the ports that you will forward, and because I only need the server to serve web pages, I set them both to 80;
- The protocol can be either ALL, TCP, or UDP, and I’m pretty sure web uses TCP, but I used ALL because I’m not really sure;
- And you have to tick Enable for it to work.
After you’re done, go Back again and click on our last one, DDNS.
- First, set DDNS to Others since I couldn’t find No-IP as an option.
- Fill Username and Password with your No-IP Username and Password.
- Fill Hostname with the No-IP hostname that you want to assign to this router. So I guess this means one router = one hostname, but I’m not sure.
- Fill E-mail Address with the e-mail address you registered your No-IP account with.
- Set Wildcard support to Yes since it works that way.
- Press Apply.
That’s it. Update your target IP address and it should display your server’s web page, unless you haven’t installed a web server program on it. The Raspberry Pi configuration part will have to wait, since I don’t have the money to buy one right now. Time to save.