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.
In order for this to work, you will need a few things:
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.
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.
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.
These notes are mostly relevant to the Dialogic Diva BRI-2 ISDN card. Depending on your ISDN card, this may differ wildly.
[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
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
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
local lock nocrtscts 192.168.32.1:192.168.32.105 netmask 255.255.255.255 noauth proxyarp lcp-echo-failure 60
useradd -G dialout,dip,users -m -g users -s /usr/sbin/pppd dial
passwd dial
(I set it to 'up')dial * up *
net.ipv4.ip_forward=1
-A POSTROUTING -s 192.168.32.0/24 -j MASQUERADE
systemctl enable ufw
I think that's it. You should be able to dial the extension the ISDN is attached to, and it should connect.