.___.__       .__                                     .__       .___
  __| _/|__|____  |  |  __ ________   __  _  _____________|  |    __| _/
 / __ | |  \__  \ |  | |  |  \____ \  \ \/ \/ /  _ \_  __ \  |   / __ | 
/ /_/ | |  |/ __ \|  |_|  |  /  |_> >  \     (  <_> )  | \/  |__/ /_/ | 
\____ | |__(____  /____/____/|   __/  /\\/\_/ \____/|__|  |____/\____ | 
     \/         \/           |__|     \/                             \/ 
An experiment in bad ideas.

We are a dial-up ISP!

dialup.world will be down for a few weeks due to a move, we will return!

Tel: 484.820.1337
User: world
Password: dialup

Questions or comments? @famicoman, @famicoman@mastodon.sdf.org

What's all this?

Last updated: 20210716

dialup.world is (currently) a three-line dial-up ISP! Here is how it works:

The phone number is registered via voip.ms, a VoIP "bring-your-own-device" provider. Using an asterisk-based PBX (Private Branch eXchange) running on a Rasbperry Pi, I can connect to voip.ms over the SIP (Session Initiation Protocol) protocol and this will allow calls to that number to come in to my PBX. What's great is that voip.ms allows as many incoming calls on the number as you want so if multiple people call the same phone number, it will just keep sending calls to my PBX whether someone is already dialed-in or not. Basic configuration to get voip.ms and your PBX talking is outlined here, https://wiki.voip.ms/article/Asterisk_SIP.

So somehow we need to turn these digital calls into individual calls that travel over phone lines to modems. To do this I am using a Grandstream HT704, which is a four-line ATA (Analog Telephone Adapter) device. There is no reason you cannot use four 1-line ATAs, or ATAs from different brands, this is just what I used. This small gray box has one RJ-45 connection on it for ethernet that I'll plug into the same network as my Raspberry Pi, and four RJ-11 jacks for 2-wire phone cables. Connecting to this ATA is done over... SIP! So easy! Just a few more lines in the asterisk sip.conf file for each extension (one extension goes to one line on the ATA):

[ATAs](!) ; template for all ATA logins
type = peer
host = dynamic
qualify = yes
insecure = port,invite
canreinvite = no
relaxdtmf = yes
progressinband = yes

[8927181](ATAs) ; SIP login for user 8927181, repeat this block for every unique extension
defaultuser = 8927181
secret = secretpassword
authid = 8927181
callerid = "Modem 1" <8927181>
context = from-internal
directmedia = yes
call-limit = 1

On the ATA side, you basically log in with the admin panel and plug in the authid and secret password and ip address of the PBX and everything should connect up. Since we are dealing with modems, the ATA does need some special settings to work well, and where these options are in the ATA config will differ from device to device. These are shamelessly stolen from the excellent link, https://dogemicrosystems.ca/wiki/Dial_up_server.

One last bit of config on asterisk, we need to set up a hunt group in the extensions.conf file. This is a really dumb hunt group config where it will push incoming calls to the first extension, but if that number is engaged with another caller or otherwise isn't available it will go to the next extension and so on. If all extensions are in use, it'll eventually hang up.

exten => 4848201337,1,NoOP()
        same => n,Dial(SIP/8927181,100,r)
        same => n,ExecIf($["${DIALSTATUS}" != "ANSWER"]?Dial(SIP/8927182,100,r)
        same => n,ExecIf($["${DIALSTATUS}" != "ANSWER"]?Dial(SIP/8927183,100,r)
        same => n,Hangup()

Now we can connect our modems up to the ATA(s). Simply connect a phone cord between the jack on the ATA with the "line" jack on the modem. If you are using USR Sportster modems, they require 9VAC power supplies with a 2.5mm x 5.5mm jack. Nobody seems to save these but you can buy a working replacement here, https://www.amazon.com/dp/B00B886CWS?psc=1&ref=ppx_yo2_dt_b_product_details.

The computer I'm using is an old Dell Pentium 4 machine that is pretty horrible but will be fine as our ISP box. I decided to run Windows Server 2003 because I'm a masochist, and eventually I'll move things to a Linux box because I know that will work better. Dogemicrosystems has a great guide that I already linked to above. Seriously, I haven't used Windows Server since 2005 so I don't know why I thought this would be fun. Anyway, I followed Cathode Ray Dude's guide to configure a Dialup RAS here, https://gekk.info/articles/ras_2k3.html. I didn't change a thing aside from make the ONLY auth type PAP. I initially checked all the boxes for all the auth types, but it looks like Windows 3.11 THINKS it knows CHAP/MSCHAP but it doesn't actually, and PAP should work fine with everything you throw at this.

Connecting the modems to the computer is fairly simple. Your computer should have one or more DE-9 ports for serial and you just need as many DE-9 to DB-25 cables as you have ports/modems. My PC had only one DE-9 port so I bought this PCI cart to get two more DE-9 ports, https://www.amazon.com/dp/B00166RIAC?psc=1&ref=ppx_yo2_dt_b_product_details. Of course, Server 2003 doesn't know where the drivers for this are, and the included drivers disc DOES NOT COME WITH THE DRIVERS FOR THIS CARD (how) so I found them online and then it all worked as expected, MCS9865_WHQL.zip. If you can get working Server 2003 drivers for a cheaper PCI (not express) card or you can get modems to identify when plugged into a USB/Serial adapter on Server 2003, let me know! Connecting modems to your PC through the proper ports and cables and then turning them on should result in Server 2003 identifying them and automatically configuring them for the RAS. The first time you turn the modem on the Server might BSOD (mine did) but it will be fine after a restart and then I can power on/off the modem at will and no crashes. Also, DO NOT buy/use NULL MODEM adapters or cables, they are not needed here at all.

The last weird thing I did was flash Tomato firmware onto an old router and use it as a hard firewall between the PC and my Internet. On Tomato, I configured the router to be an OpenVPN client for my VPN provider so any traffic passing through this old router is pumped to Sweden for exit. Instructions for that are here, https://mullvad.net/en/help/tomato-router-and-mullvad-vpn/.

Questions or comments? Let me know!

🄯 Pinargio Pizza 2021