270 lines
14 KiB
Plaintext
270 lines
14 KiB
Plaintext
|
Modem Sharing mini-HOWTO
|
|||
|
|
|||
|
Friedemann Baitinger
|
|||
|
|
|||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>fb@baiti.net
|
|||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
2001-08-22
|
|||
|
Revision History
|
|||
|
Revision v1.12 2001-08-22 Revised by: gjf
|
|||
|
Corrected author's email
|
|||
|
Revision v1.11 2001-07-12 Revised by: aeg
|
|||
|
Converted to DocBook SGML
|
|||
|
Revision v1.10 1999-09-11 Revised by: fb
|
|||
|
Added "Feedback from the Users" section
|
|||
|
Revision v1.01 1997-06-12 Revised by: fb
|
|||
|
Converted source to HTML
|
|||
|
|
|||
|
|
|||
|
Describes how to setup a Linux system to share a modem with other systems
|
|||
|
over a TCP/IP network.
|
|||
|
|
|||
|
-----------------------------------------------------------------------------
|
|||
|
Table of Contents
|
|||
|
1. Legal Notice
|
|||
|
2. The Server Side
|
|||
|
2.1. Masqdialer Installation
|
|||
|
2.2. Masqdialer Configuration
|
|||
|
|
|||
|
|
|||
|
3. The Client Side
|
|||
|
4. Security Considerations
|
|||
|
5. Examples
|
|||
|
6. Feedback From Users
|
|||
|
|
|||
|
1. Legal Notice
|
|||
|
|
|||
|
Copyright <20> 1997 Friedemann Baitinger. This document may be distributed only
|
|||
|
subject to the terms and conditions set forth in the GNU Free Documentation
|
|||
|
License at <[http://www.gnu.org/copyleft/fdl.html] http://www.gnu.org/
|
|||
|
copyleft/fdl.html>.
|
|||
|
>
|
|||
|
-----------------------------------------------------------------------------
|
|||
|
|
|||
|
2. The Server Side
|
|||
|
|
|||
|
It is assumed that the server is a Linux system with either:
|
|||
|
|
|||
|
<EFBFBD><EFBFBD>*<2A>a modem attached to a /dev/ttySx device
|
|||
|
|
|||
|
<EFBFBD><EFBFBD>*<2A>an 'isdn4linux'-emulated modem mapped to a /dev/ttyIx device
|
|||
|
|
|||
|
|
|||
|
The easiest setup I can think of uses a five lines perl script to implement a
|
|||
|
modem daemon in /usr/sbin/modemd:
|
|||
|
|
|||
|
#!/usr/bin/perl
|
|||
|
select((select(STDOUT), $| = 1)[$[]);
|
|||
|
select((select(STDIN), $| = 1)[$[]);
|
|||
|
exec 'cu -s 115200 -l /dev/ttyS1';
|
|||
|
die '$0: Cant exec cu: $!\n';
|
|||
|
|
|||
|
The modem daemon is started by the inetd process if a client connects to the
|
|||
|
appropriate port as described below. The modemd simply connects the socket
|
|||
|
handle with STDIN and STDOUT of the cu command and lets cu handle the actual
|
|||
|
modem device.
|
|||
|
|
|||
|
The existence of the modem daemon must be made known to the inetd process by
|
|||
|
updating its configuration file, usually /etc/inetd.conf like:
|
|||
|
+---------------------------------------------------------------------------+
|
|||
|
|# |
|
|||
|
|# modem daemon |
|
|||
|
|# |
|
|||
|
|modem stream tcp nowait root /usr/sbin/tcpd /usr/sbin/modemd /dev/ttyS1 |
|
|||
|
+---------------------------------------------------------------------------+
|
|||
|
|
|||
|
In order to make this work, an entry to /etc/services needs to be added like:
|
|||
|
+---------------------------------------------------------------------------+
|
|||
|
| |
|
|||
|
|modem 2006/tcp modemd |
|
|||
|
+---------------------------------------------------------------------------+
|
|||
|
|
|||
|
This associates a symbolic name with an explicit port, 2006 in the example.
|
|||
|
The portnumber could be any number not already assigned to an existing
|
|||
|
service. After these changes have been made, a signal must be sent to the
|
|||
|
inetd process in order to let inetd re-read and process its configuration
|
|||
|
file:
|
|||
|
+---------------------------------------------------------------------------+
|
|||
|
| |
|
|||
|
|bash# ps | grep inetd |
|
|||
|
|194 ? S 0:00 /usr/sbin/inetd |
|
|||
|
| |
|
|||
|
|bash# kill -HUP 194 |
|
|||
|
+---------------------------------------------------------------------------+
|
|||
|
|
|||
|
Now the server side is ready to accept requests from clients. The correct
|
|||
|
function can be verified by:
|
|||
|
+---------------------------------------------------------------------------+
|
|||
|
|bash$ telnet localhost modem |
|
|||
|
| |
|
|||
|
|Trying 127.0.0.1... |
|
|||
|
|Connected to localhost. |
|
|||
|
|Escape character is '^]'. |
|
|||
|
+---------------------------------------------------------------------------+
|
|||
|
|
|||
|
You are now connected to the modem. You can now issue AT commands in order to
|
|||
|
verify the setup:
|
|||
|
+---------------------------------------------------------------------------+
|
|||
|
| |
|
|||
|
|atz |
|
|||
|
|atz |
|
|||
|
|OK |
|
|||
|
| |
|
|||
|
|ati1 |
|
|||
|
|ati1 |
|
|||
|
|Linux ISDN |
|
|||
|
|OK |
|
|||
|
| |
|
|||
|
|^] |
|
|||
|
|telnet>quit |
|
|||
|
|bash$ |
|
|||
|
+---------------------------------------------------------------------------+
|
|||
|
|
|||
|
Instead of using the Perl script as a modem server, there is also a program
|
|||
|
named Masqdialer available at [http://w3.cpwright.com/mserver/] http://
|
|||
|
w3.cpwright.com/mserver/.
|
|||
|
|
|||
|
With Masqdialer you can export any number of modems connected to your server
|
|||
|
to any host that can connect the server via TCP/IP on a given port with a
|
|||
|
binary data stream.
|
|||
|
-----------------------------------------------------------------------------
|
|||
|
|
|||
|
2.1. Masqdialer Installation
|
|||
|
|
|||
|
Before compiling check config.h for compile time options:
|
|||
|
|
|||
|
<EFBFBD><EFBFBD>*<2A>set the path for the config file to your liking
|
|||
|
|
|||
|
<EFBFBD><EFBFBD>*<2A>set the path for the lock file to your liking
|
|||
|
|
|||
|
|
|||
|
Do make all.
|
|||
|
|
|||
|
Copy the binaries (mserver and tcpconn) into a suitable directory such as /
|
|||
|
usr/local/sbin/. Copy mserver.conf into the path that you specified in
|
|||
|
config.h.
|
|||
|
|
|||
|
Masqdialer could be started from one of your system startup scripts. A simple
|
|||
|
/usr/local/sbin/mserver will run it as a daemon.
|
|||
|
-----------------------------------------------------------------------------
|
|||
|
|
|||
|
2.2. Masqdialer Configuration
|
|||
|
|
|||
|
A line in mserver.conf could look like this:
|
|||
|
+---------------------------------------------------------------------------+
|
|||
|
|5800 /dev/ttyS1 115200,8,N,1 *.foo.org,192.168.2.1 |
|
|||
|
+---------------------------------------------------------------------------+
|
|||
|
|
|||
|
which would mean that a modem connected to /dev/ttyS1 can be connected via
|
|||
|
port 5800 from anywhere in the domain foo.org and from host 192.168.2.1. Any
|
|||
|
other hosts are rejected. Pitfall: If you don't specify hosts then ANY host
|
|||
|
will be allowed to connect. The serial line settings are fixed and cannot be
|
|||
|
changed from the client side. You can export several modems on a single port.
|
|||
|
Masqdialer only locks the modem devices by use of UUCP style lock files when
|
|||
|
they are actually in use thus allowing other programs to take advantage of
|
|||
|
them.
|
|||
|
-----------------------------------------------------------------------------
|
|||
|
|
|||
|
3. The Client Side
|
|||
|
|
|||
|
At this time, only Windows client setups are described here. On the client
|
|||
|
PC, a COM-port redirector for TCP/IP is required. The best program for this
|
|||
|
purpose I have found is DialOut/IP from Tactical Software for Windows 3.1 and
|
|||
|
Windows 95. (The Windows 3.1 version can be used under Windows NT for 16-bit
|
|||
|
applications only. A 32-bit version for Windows NT is due late summer 1997.)
|
|||
|
|
|||
|
DialOut/IP presents the shared modem on a new virtual COM port that it adds
|
|||
|
to Windows. This virtual COM port can be used by Windows programs as if the
|
|||
|
shared modem is directly connected. Most client applications (including
|
|||
|
Windows 95 dial-up networking) accept this and work as if there were a real
|
|||
|
COM port and modem, with the general exception being fax applications or any
|
|||
|
others that need access to UART control lines. DialOut/IP can be configured
|
|||
|
to provide telnet protocol processing, but that feature applies to certain
|
|||
|
modem pool products and not to the Linux setup described in this file. Note
|
|||
|
that, despite its name, DialOut/IP can be used also by applications that wait
|
|||
|
for incoming calls.
|
|||
|
|
|||
|
On [http://www.tactical-sw.com/] http://www.tactical-sw.com/ there is a page
|
|||
|
for downloading a fully functional evaluation version that times out in 1-2
|
|||
|
weeks. Installation and configuration is handled by a setup program, with
|
|||
|
installation details in the README.TXT file. When you run DialOut/IP, you
|
|||
|
enter the IP address and port number of the shared modem.
|
|||
|
|
|||
|
DialOut/IP is a commercial product that is licensed on a per-modem basis,
|
|||
|
that is, the price depends on the number of modems that you are sharing. The
|
|||
|
license states that you can install the software on any number of PC's that
|
|||
|
access the shared modems.
|
|||
|
-----------------------------------------------------------------------------
|
|||
|
|
|||
|
4. Security Considerations
|
|||
|
|
|||
|
If you have only one modem for all your hosts in your local area network,
|
|||
|
there is probably no reason to worry about security here. However, if any one
|
|||
|
or more of the hosts in your LAN are connected to the Internet by other means
|
|||
|
than using the modem we have just setup as a modem server, then security
|
|||
|
considerations are required, otherwise anybody can do a telnet your_host
|
|||
|
modem and dial out long distance or even international calls at will.
|
|||
|
|
|||
|
I suggest to install and configure tcp-wrappers in order to protect the modem
|
|||
|
server against unauthorized access.
|
|||
|
-----------------------------------------------------------------------------
|
|||
|
|
|||
|
5. Examples
|
|||
|
|
|||
|
I am using the setup as described in The Server Side and The Client Side to
|
|||
|
run Quicken on my Windows 95 ThinkPad and do home banking with the modem
|
|||
|
attached to my Linux machine. The "modem" in my case is not even a real
|
|||
|
modem, it is an emulated modem on an ISDN-So card. Quicken just sees a COM
|
|||
|
port, it doesn't know that the device attached to the COM port is actually at
|
|||
|
the other end of my Ethernet LAN, nor does it know that it is not a standard
|
|||
|
analog modem but an ISDN device which happens to understand AT commands.
|
|||
|
-----------------------------------------------------------------------------
|
|||
|
|
|||
|
6. Feedback From Users
|
|||
|
|
|||
|
Since the first release of this document in June 1997 I have received many
|
|||
|
email messages related to the subject. In most of the messages people were
|
|||
|
seeking more help to get the modem sharing configured and running.
|
|||
|
|
|||
|
Recently I received an interesting feedback from [mailto:
|
|||
|
Karsten%20Hilbert%20%3CKarsten.Hilbert@gmx.net%3E?subject=
|
|||
|
Masqdialer%20client] Karsten.Hilbert@gmx.net. Karsten pointed out that
|
|||
|
although DialOut/IP may be a good client program he'd like to have a [http://
|
|||
|
www.gnu.org/] GPL'ed client. Karsten mentioned the Software Bazaar <[http://
|
|||
|
visar.csustan.edu/bazaar/] http://visar.csustan.edu/bazaar/> and he
|
|||
|
volunteered to put in an offer. Here is what Karsen wrote:
|
|||
|
+---------------------------------------------------------------------------+
|
|||
|
| Date: Fri, 27 Aug 1999 17:46:39 +0200 (CEST) |
|
|||
|
| From: Karsten Hilbert <med94ecz@studserv.uni-leipzig.de> |
|
|||
|
| Reply-To: Karsten Hilbert <Karsten.Hilbert@gmx.net> |
|
|||
|
| To: fb@baiti.net |
|
|||
|
| Subject: Windows-Modemsharing-Howto |
|
|||
|
| |
|
|||
|
| Hi ! |
|
|||
|
| |
|
|||
|
| The howto mentions DialOut/IP as a good tool to connect Windows |
|
|||
|
| clients to a linux server sharing a modem. |
|
|||
|
| |
|
|||
|
| I agree. However, it would be more attractive to have a free, |
|
|||
|
| GPL'ed client, wouldn't it ? This I thought and decided to offer |
|
|||
|
| some money for the implementation of such a client on the |
|
|||
|
| Software Bazaar. If someone grabs the project I will pay him a |
|
|||
|
| certain amount of money if it is completed and functional. After |
|
|||
|
| that the client would be GPL'ed. |
|
|||
|
| |
|
|||
|
| Now, I can only offer so much money :) But other people could |
|
|||
|
| join in and offer some, too, thus increasing the incentive. |
|
|||
|
| Wouldn't your howto be a perfect place to mention this |
|
|||
|
| possibility ? |
|
|||
|
| |
|
|||
|
| The Bazaar can be found at: |
|
|||
|
| |
|
|||
|
| http://visar.csustan.edu/bazaar/ |
|
|||
|
| |
|
|||
|
| Thought I could mention this to you. |
|
|||
|
| |
|
|||
|
| |
|
|||
|
| Karsten |
|
|||
|
+---------------------------------------------------------------------------+
|