I have the following predicament. I find myself becoming more and more used (albeit paid) as the "computer guy" in the neighborhood for "fixing" common "issues." Being a hacker, I've thought of providing as a service to my clients remote assistance via SSH/VNC. Conceptually, this is great, but there are a few implementation details I'm wrestling with.
Determining each customer's router's IP address. This can be done usually with Dynamic DNS, but I've thought of writing a small program which will send the current IP address of the router to my server, so I can keep on top of things. Dynamic DNS is, of course, easier, but it could get complicated if I'm using an external service. I'm a cheapskate, so the less I have to pay, the better, and it wouldn't be ideal to have to set up a new account for each customer's router. Here are my options for Dynamic DNS:
- I could pay monthly for hosting for a nameserver, and create a domain hierarchy that makes sense and implement dynamic DNS.
- I could buy a low-spec server and host BIND and do everything locally, but as above.
- I could charge clients per month (!?!) for "Dynamic DNS hosting fees" and use the proceeds to pay for a nice account from DynDNS.org or something.
Supporting multiple computers beyond their router. For this, I also have options:
- Implement OpenVPN where possible and simply use the remote VPN to access the computers as I would if they were local machines on the network. (That's how VPNs work right? I would essentially show up to the router as just another IP address and I'd have full access to all machines in the network, correct?)
- Implement some reverse connection hack to have them connect to me and then have me establish the SSH connection with them.
- The icky, port-forwarding way. This involves keeping a database of each customer and each customer's machine's port number for SSH on the router. Yuck.
Being able to support laptops remotely. Say my customer is at a coffee shop in another state and something goes wrong. Since many of the solutions above deal with router-based solutions, everything goes out the window. It doesn't matter too much to be able to do this up front, as it's kind of an edge case, but still.
Can someone recommend the best way to 1. find the public IP address of each machine, 2. establish a connection with it, and 3. possibly provide remote*remote service if they're "roaming?"