Create your own 56K Dialup ISP

Please note: This guide is very rough, and probably doesn't result in a wholly secure configuration. I accept no responsibility for anything that happens as a consequence of using or following this guide. You have been warned.

This is a first pass at this document, and it will require refinement when I find time.

If you've got an old computer with a modem, or just fancy some silly retro fun, I'm hoping these notes will be useful. However, I'm not going to lie, you need a certain amount of Linux and telephony knowledge for this to make any sense.

There's already Paul Rickards' excellent WiFi232 which emulates a modem allowing you to connect to BBSes and the like via your existing Wifi. You may also be interested in this guide by @DogeMicrosys to build a Dialup ISP at home.

However - I always want just a little bit more. The guide by @DogeMicrosys allows the lower speeds of dialup (around the 33k mark), because that's all a normal modem can do when doing point-to-point RAS type stuff. I had a very powerful inkling that if you dialled from a 56K modem to an ISDN connection, you could get v.90 speeds. Turns out my memory wasn't messing with me, and I was right.

Equipment

In order for this to work, you will need a few things:

  • A computer with a 56K modem - v.90 is best, but 56KFlex and X2 might work. It'll need all the usual Dialup Networking stuff installed.
  • A modern computer to be the 'ISP' server. It'll run pretty much everything and provide the connectivity to the internet or network.
  • A PBX with analogue lines, and ISDN (BRI or PRI)
  • An ISDN board for your server. This needs be a telephony card, and not a Terminal Adaptor.

The PBX

There might be another way to do this, but this seemed the simplest way to me. You need a way to convert the analogue modem line to the digital ISDN. To my mind the simple way was to use a small PBX. I got a Panasonic KX-TDA15 which includes two ISDN BRI ports, and four hybrid ports capable of supporting Panasonic digital phones, or analogue lines with an adapter. I got mine on eBay quite cheaply, and there are numerous other PBXes from other vendors going for next to nothing.

I configured it to use the ISDN ports as extensions, and then configured a number on one of the ISDN interfaces. So basically it treats whatever is on the end of it as a phone - dial it from an analogue line, and it rings. For completeness I got fancy and actually configured a hunt group so I can use both ISDN channels from one number, and the PBX would pick whichever was free. This also allows me to make two dialup connections concurrently (although I've not tried that). I really wanted to configure a translation so I can dial a full number (the number I had in mind was a defunct ISP called Globalnet), to get that full dialup experience. However, this PBX doesn't seem to allow it.

ISDN Adapter and server

There's two types of ISDN adapter - Terminal Adapters, and telephony/server adapters. A Terminal Adapter (TA) is no use here. It's basically a dumb card used by a computer dialling IN to an ISP. It can talk ISDN, and nothing else. However, the telephony/server adapters are much smarter. They include codecs, DACs, and all sorts of smarts to allow them to serve as a dial-in server. They can also sometimes be used in Asterisk boxes and the like.

In my case I got a Dialogic Diva BRI-2 PCI v2 card (again, eBay). Make sure it matches your PBX ISDN Ports - BRI to BRI, or PRI to PRI. BRI gives you two channels per interface; PRI gives you 24 or 30 depending where in the world you are. PRI kit tends to come with a much higher price though. When selecting a card, DO YOUR RESEARCH! Look up the manufacturer specs, and check it supports the v.90 codec, data modem, CAPI, and if it mentions it, RAS.

I got a PCI board, so I've put it into an ITX-based PC with a PCI slot. It's an Intel Atom 330 motherboard, so you really don't need anything special. I installed Ubuntu 16.04 on it as it was compatible with the drivers for my card.

Connecting it up

In my case, I've got a 486 with Windows 95, and an external US Robotics 56K modem. This is connected to the PBX on one of the analogue ports. One of the ISDN ports is then attached to the ISDN interface of my server. Finally, the network of the server is attached to my LAN.

Configuring the Server

These notes are mostly relevant to the Dialogic Diva BRI-2 ISDN card. Depending on your ISDN card, this may differ wildly.

  1. Set up your hardware as specified above.
  2. Upgrade the Linux OS so it is fully patched
  3. sudo apt-get install build-essential
  4. Install the DivaLogic drivers as per their instructions
  5. Create the two mgetty service files, /lib/systemd/system/mgetty1.service, and /lib/systemd/system/mgetty2.service with the following content (obviously change the ttyds01 line accordingly):
    [Unit]
    Description=External Modem
    Documentation=man:mgetty(8)
    Requires=systemd-udev-settle.service
    After=systemd-udev-settle.service
    
    [Service]
    Type=simple
    ExecStart=/sbin/mgetty ttyds01
    Restart=always
    PIDFile=/var/run/mgetty.pid.ttyds01
    
    [Install]
    WantedBy=multi-user.target
  6. sudo apt-get install ppp mgetty
  7. Edit the file /etc/mgetty/mgetty.config and amend it with the following
    modem-type data
    modem-check-time 0
    answer-chat-timeout 180
    
    port ttyds01
     port-owner root
     port-group dialout
     port-mode 0660
     data-only yes
     ignore-carrier no
     toggle-dtr no
     rings 1
     autobauding yes
    
    port ttyds02
     port-owner root
     port-group dialout
     port-mode 0660
     data-only yes
     ignore-carrier no
     toggle-dtr no
     rings 1
     autobauding yes
  8. Enable the services and start them with systemctl enable mgetty1.service and systemctl start mgetty1.service
  9. Next modify /etc/ppp/options with the following making sure to adjust it for your local DNS:
    ms-dns 192.168.0.1
    
    asyncmap 0
    
    auth
    
    crtscts
    
    lock
    
    show-password
    
    modem
    
    netmask 255.255.255.255
    
    +pap
    
    +chap
    
    debug
    
    proxyarp
    
    lcp-echo-interval 30
    
    lcp-echo-failure 4
    
    noipx
  10. Create a /etc/ppp/options.ttyds1 (and 2) file with the following content again adjusting for your local IP ranges. I'm using 192.168.32.0/24 for the dialup clients to avoid conflict with my local LAN:
    local
    lock
    nocrtscts
    192.168.32.1:192.168.32.105
    netmask 255.255.255.255
    noauth
    proxyarp
    lcp-echo-failure 60
  11. Create a user to dialup with useradd -G dialout,dip,users -m -g users -s /usr/sbin/pppd dial
  12. Set the password passwd dial (I set it to 'up')
  13. Modify /etc/ppp/pap-secrets and add the line dial * up *
  14. Enable packet forwarding for IP4 by editing /etc/sysctl.conf: net.ipv4.ip_forward=1
  15. Modify the firewall to NAT the traffic by adding the following line to the POSTROUTING section -A POSTROUTING -s 192.168.32.0/24 -j MASQUERADE
  16. Enable the firewall systemctl enable ufw
  17. Reboot

I think that's it. You should be able to dial the extension the ISDN is attached to, and it should connect.