437 lines
23 KiB
Plaintext
437 lines
23 KiB
Plaintext
|
Serial Laplink HOWTO
|
|||
|
|
|||
|
Willem J. Atsma
|
|||
|
|
|||
|
Revision History
|
|||
|
Revision v2.1 2001-07-20 Revised by: wja
|
|||
|
|
|||
|
|
|||
|
How to create a serial connection between two computers? This document
|
|||
|
details how to setup a "laplink" connection between two computers. Having had
|
|||
|
a bit of trouble getting the information to get this to work myself, this
|
|||
|
document should make it easy for you.
|
|||
|
|
|||
|
-----------------------------------------------------------------------------
|
|||
|
Table of Contents
|
|||
|
1. Introduction
|
|||
|
2. On the server side
|
|||
|
2.1. Configure pppd
|
|||
|
2.2. A getty-like installation of pppd
|
|||
|
2.3. Start the server when needed
|
|||
|
2.4. Serving MS Windows clients
|
|||
|
|
|||
|
|
|||
|
3. On the client side
|
|||
|
3.1. Start the client
|
|||
|
3.2. Connecting to an MS Windows server
|
|||
|
3.3. Setting up an MS Windows (95) client
|
|||
|
3.4. Oddly enough...
|
|||
|
|
|||
|
|
|||
|
4. Connecting...
|
|||
|
5. Internet through the serial port
|
|||
|
6. Other useful documents
|
|||
|
7. License
|
|||
|
8. Credits
|
|||
|
|
|||
|
1. Introduction
|
|||
|
|
|||
|
This very brief document describes how to set up a serial "laplink"
|
|||
|
connection between two Linux machines or a Linux and a Windows machine. The
|
|||
|
serial link consists of a "null-modem" cable and a communication protocol:
|
|||
|
PPP. I use such a setup to send files to and from my laptop; it can also
|
|||
|
quite nicely be used to install new software from a cd-rom when a laptop
|
|||
|
doesn't have one. I had more trouble than I should have had when setting up
|
|||
|
my serial laplink. Hopefully this document will solve your problems in one go
|
|||
|
(the ones to do with the serial cable at any rate).
|
|||
|
|
|||
|
Both server and client side of the setup I will describe could be either a
|
|||
|
Linux machine or a different operating system, as long as it supports the PPP
|
|||
|
protocol on a null-modem. The MS Windows implementation, as it turns out, is
|
|||
|
slightly different from standard, requiring some special attention. This
|
|||
|
document has two main sections. The first describes how to setup the server
|
|||
|
side. This is the main station with a serial port dedicated to a PPP
|
|||
|
connection. Alternatively the connection can be started when needed from the
|
|||
|
command line. The second part describes the configuration of the client that
|
|||
|
connects to the server to retrieve or upload files.
|
|||
|
|
|||
|
This documentation was prepared for pppd version 2.4.0, on a version 2.4.2
|
|||
|
kernel.
|
|||
|
|
|||
|
Please let me know if you are having any particular difficulties and
|
|||
|
suggestions for improvements on this document; my email address is listed at
|
|||
|
the bottom.
|
|||
|
-----------------------------------------------------------------------------
|
|||
|
|
|||
|
2. On the server side
|
|||
|
|
|||
|
2.1. Configure pppd
|
|||
|
|
|||
|
The communication will be through a serial port. On the server we will
|
|||
|
connect through the "/dev/ttyS1" (COM2 in DOS/Windows) device. On your
|
|||
|
computer this may be different and you should modify the examples below
|
|||
|
accordingly. I force authentication because I use the configuration to
|
|||
|
provide a way to access files on a file server for a group of people. After
|
|||
|
logon they can use the Samba file shares to copy files to and from a laptop.
|
|||
|
If you are not concerned with security you can comment out the relevant
|
|||
|
options.
|
|||
|
|
|||
|
PPP (Point-to-Point Protocol) communication provides TCP/IP across a serial
|
|||
|
link. In other words: when you want to do internet-based browsing through a
|
|||
|
modem, you are likely to be using it. In Linux PPP is implemented by the PPP
|
|||
|
daemon "pppd". Its configuration is done through files in the "/etc/ppp/"
|
|||
|
directory. We will be using the following files:
|
|||
|
|
|||
|
/etc/ppp/options contains all general options for PPP connections
|
|||
|
|
|||
|
/etc/ppp/options.ttyS1
|
|||
|
contains PPP options specific to connections through "/dev/ttyS1"
|
|||
|
|
|||
|
/etc/ppp/pap-secrets
|
|||
|
contains authentication information
|
|||
|
|
|||
|
/etc/inittab
|
|||
|
starts initial system services
|
|||
|
|
|||
|
|
|||
|
The "/etc/ppp/options" file should look more or less like this:
|
|||
|
#/etc/ppp/options
|
|||
|
lock
|
|||
|
#auth forces authorization from peer
|
|||
|
#login makes authentication use the system password file
|
|||
|
#NOTE: my pap-secrets allows anyone access, so if this is not specified
|
|||
|
# anyone could connect! If this is a machine on which you dial out
|
|||
|
# as well, then comment auth and login out and move them to
|
|||
|
# /etc/options.ttySn
|
|||
|
auth
|
|||
|
login
|
|||
|
|
|||
|
|
|||
|
The lines starting with a "#" are comments. The "lock" parameter indicates
|
|||
|
that a lock file will be created to ensure exclusive access to the serial
|
|||
|
device, the "auth" parameter indicates that the client will need to
|
|||
|
authenticate itself, and "login" tells pppd to use the system user names and
|
|||
|
passwords for authentication.
|
|||
|
|
|||
|
Note that pppd will still check the "/etc/ppp/pap-secrets" file for user name
|
|||
|
and password information. A special, single line entry makes that pppd will
|
|||
|
only use the system's user information. The "/etc/ppp/pap-secrets" file looks
|
|||
|
as follows:
|
|||
|
#/etc/ppp/pap-secrets
|
|||
|
# Secrets for authentication using PAP
|
|||
|
# client server secret IP addresses
|
|||
|
* * "" ppp_laplink_client
|
|||
|
|
|||
|
|
|||
|
This allows any machine with the IP address "ppp_laplink_client" to connect
|
|||
|
to the server, without using a password (you can see why it is handy to have
|
|||
|
the ppp_laplink entries in your /etc/hosts file). The "login" parameter in
|
|||
|
the "/etc/ppp/options" file, however, makes that the user name and password
|
|||
|
supplied by the client for authorization have to match the "/etc/ppp/
|
|||
|
pap-secrets" file as well as the system user name and password, so the
|
|||
|
connection will only succeed after a valid user name and password are
|
|||
|
provided.
|
|||
|
|
|||
|
Options specific to the serial line you are connecting with are placed in "/
|
|||
|
etc/ppp/options.ttySn", where n is the number of the serial device. My server
|
|||
|
uses "/dev/ttyS1", so the options go into... "/etc/ppp/options.ttyS1".
|
|||
|
#/etc/ppp/options.ttyS1
|
|||
|
asyncmap 0
|
|||
|
crtscts
|
|||
|
#local indicates that modem lines are not used
|
|||
|
local
|
|||
|
#silent causes pppd to wait until a connection is made from the other side
|
|||
|
silent
|
|||
|
#these are entries that exist in the /etc/hosts file
|
|||
|
#the link does not work if this is at the end of this file - order matters!
|
|||
|
ppp_laplink_server:ppp_laplink_client
|
|||
|
#auth forces authorization from peer
|
|||
|
#login makes authentication use the system password file
|
|||
|
#NOTE: my pap-secrets allows anyone access, so if this is not specified
|
|||
|
# anyone could connect! If this is a server that will never use ppp
|
|||
|
# for dialing out, you should move auth and login to /etc/ppp/options
|
|||
|
#auth
|
|||
|
#login
|
|||
|
#use PAP, not CHAP for authentication
|
|||
|
require-pap
|
|||
|
115200
|
|||
|
|
|||
|
|
|||
|
All these options are well described in the pppd man page; a few of the key
|
|||
|
ones are explained with comments in the file. The "crtscts" parameter tells
|
|||
|
pppd to use hardware flow control. This is recommended because it is the
|
|||
|
fastest. Alternatively you could specify "xonxoff" to use software-based flow
|
|||
|
control - you would specify this if your null modem cable doesn't connect the
|
|||
|
RTS/CTS lines (unlikely if you bought your cable in the store). "115200"
|
|||
|
specifies the data transmission rate - if you have trouble connecting you
|
|||
|
might want to try with a lower speed. You can find valid speed settings in
|
|||
|
the termios manual page, although your hardware will limit the baud rate.
|
|||
|
Choosing an invalid speed setting will elicit an error message from the pppd
|
|||
|
daemon and apparently it then reverts to some default value.
|
|||
|
|
|||
|
Note that "auth" and "login" options are commented out here, because they
|
|||
|
were specified in the general options file. If you also use your computer to
|
|||
|
dial into an ISP, you will want to specify them here rather than in "/etc/ppp
|
|||
|
/options", or you will be asking your ISP to authorize itself when you dial
|
|||
|
in and that probably won't succeed. The reason why they are not specified in
|
|||
|
this file by default is because if you have other incoming PPP connections
|
|||
|
now or in the future, you want to make sure they are always authenticated.
|
|||
|
Remember that the "pap-secrets" as presented here gives zero protection.
|
|||
|
|
|||
|
Finally, the "ppp_laplink_server:ppp_laplink_client" entry specifies the
|
|||
|
local and remote IP address after the link is up. You can use actual IP
|
|||
|
numbers here (e.g. 192.168.0.1:192.168.1.1), or entries from the "/etc/hosts"
|
|||
|
file, like I have done. The nice thing of doing the latter is that you can
|
|||
|
use the names to refer to these links later. I also recommend you use IP
|
|||
|
numbers like the ones I used (192.168.0.1:192.168.1.1). These addresses are
|
|||
|
set aside for local networks and don't exist on the internet, so you are
|
|||
|
avoiding possible conflicts. After the link is up, the client can refer to
|
|||
|
the server with the IP address of ppp_laplink_server (192.168.0.1) and the
|
|||
|
server refers to the client with ppp_laplink_client (192.168.1.1).
|
|||
|
|
|||
|
You could use different entries in "/etc/ppp/pap-secrets" to only allow
|
|||
|
select users access. I am using the PAP protocol for authentication; you
|
|||
|
could use CHAP if you'd like - the setup is much the same, using the
|
|||
|
"chap-secrets" file. For these and other options you can consult the man
|
|||
|
pages and the documentation mentioned at the bottom.
|
|||
|
-----------------------------------------------------------------------------
|
|||
|
|
|||
|
2.2. A getty-like installation of pppd
|
|||
|
|
|||
|
You can have the PPP daemon (pppd) start when you boot the system and have it
|
|||
|
monitor the serial line of your choice. An elegant way of achieving this is
|
|||
|
to edit the "/etc/inittab" file. This file contains information for
|
|||
|
initializing the system. Add the following to this file:
|
|||
|
# Start pppd for the serial laplink.
|
|||
|
pd:2345:respawn:/usr/sbin/pppd /dev/ttyS1 nodetach
|
|||
|
|
|||
|
|
|||
|
This reads as follows: for runlevels 2, 3, 4 and 5 start "/usr/sbin/pppd /dev
|
|||
|
/ttyS1 nodetach" and if it dies (at the end of a connection) respawn (start a
|
|||
|
new one). The "nodetach" option makes that pppd stays connected to the
|
|||
|
terminal that started it, rather than forking and exiting. This option is
|
|||
|
necessary because the "init" process would respawn a new one immediately
|
|||
|
otherwise. Other entries in the inittab file specify getty processes to run
|
|||
|
on serial terminals (tty's); their initialization looks a lot like this one.
|
|||
|
|
|||
|
To activate this new configuration type:
|
|||
|
[root@griis /root]# /sbin/init q
|
|||
|
|
|||
|
-----------------------------------------------------------------------------
|
|||
|
|
|||
|
2.3. Start the server when needed
|
|||
|
|
|||
|
If it is only occasionally that you want to connect to your server, you might
|
|||
|
prefer to start the connection manually. All the settings remain the same;
|
|||
|
you can start the server by simply typing:
|
|||
|
/usr/sbin/pppd /dev/ttyS1 nodetach
|
|||
|
|
|||
|
|
|||
|
at the command line. The "nodetach" option is not really necessary, but it
|
|||
|
makes it easy to kill the connection by pressing "ctrl-c".
|
|||
|
-----------------------------------------------------------------------------
|
|||
|
|
|||
|
2.4. Serving MS Windows clients
|
|||
|
|
|||
|
Unfortunately the MS Windows implementation is not quite standard. Before
|
|||
|
initiating the PPP connection it requires the exchange of the text strings
|
|||
|
"CLIENT" (from the client) and "CLIENTSERVER" (from the server). To
|
|||
|
accommodate a Windows client the following line has to be added to the "/etc/
|
|||
|
ppp/options.ttyS1" file:
|
|||
|
connect 'chat -v -f /etc/ppp/scripts/winclient.chat'
|
|||
|
|
|||
|
|
|||
|
Then create the scripts directory and the chat file "/etc/ppp/scripts/
|
|||
|
winclient.chat":
|
|||
|
TIMEOUT 3600
|
|||
|
CLIENT CLIENTSERVER\c
|
|||
|
|
|||
|
|
|||
|
The connect option allows you to specify a program to deal with the string
|
|||
|
exchange before the connection. Usually the "chat" program is used for this;
|
|||
|
check the manual for more details. The given script deals with the Windows
|
|||
|
connection issue. You don't need it when connecting a Linux box.
|
|||
|
-----------------------------------------------------------------------------
|
|||
|
|
|||
|
3. On the client side
|
|||
|
|
|||
|
After having configured the server, the client is easy. The "/etc/ppp/
|
|||
|
options" file has a single entry:
|
|||
|
#/etc/ppp/options
|
|||
|
lock
|
|||
|
|
|||
|
|
|||
|
The serial port on my client is "/dev/ttyS0" (COM1), so I also have to create
|
|||
|
a "/etc/ppp/options.ttyS0" file:
|
|||
|
#/etc/ppp/options.ttyS0
|
|||
|
115200
|
|||
|
crtscts
|
|||
|
local
|
|||
|
user zaphod
|
|||
|
noauth
|
|||
|
|
|||
|
|
|||
|
Only a few new options in this file. Note that the speed on server and client
|
|||
|
has to be the same (here it is 115200). With "user zaphod" the client user
|
|||
|
name is specified. This user name has to correspond to an entry in the "/etc/
|
|||
|
ppp/pap-secrets" file of the client and has to be a valid user name on the
|
|||
|
server. The "noauth" option specifies that the peer (server) does not have to
|
|||
|
authenticate itself to the client.
|
|||
|
|
|||
|
The last bit: setting the client name (user name) and its secret (password)
|
|||
|
in the "/etc/ppp/pap-secrets" file:
|
|||
|
#/etc/ppp/pap-secrets
|
|||
|
# Secrets for authentication using PAP
|
|||
|
# client server secret IP addresses
|
|||
|
zaphod * gargleBlaster
|
|||
|
|
|||
|
|
|||
|
So user "zaphod" uses a password "gargleBlaster", which should get him into
|
|||
|
the system. Note that these files contain sensitive information, make sure
|
|||
|
you set the permissions on them correctly.
|
|||
|
-----------------------------------------------------------------------------
|
|||
|
|
|||
|
3.1. Start the client
|
|||
|
|
|||
|
On the command line, type:
|
|||
|
/usr/sbin/pppd /dev/ttyS0 nodetach
|
|||
|
|
|||
|
-----------------------------------------------------------------------------
|
|||
|
|
|||
|
3.2. Connecting to an MS Windows server
|
|||
|
|
|||
|
What if you want to make a connection to a Windows server? Again we'll need
|
|||
|
the "connect" option and a chat script. Add the following line to your "/etc/
|
|||
|
ppp/options.ttyS0" file:
|
|||
|
connect chat -v -f /etc/ppp/scripts/winserver.chat
|
|||
|
|
|||
|
|
|||
|
Also create the chat script "/etc/ppp/script/winserver.chat":
|
|||
|
TIMEOUT 10
|
|||
|
'' CLIENT\c
|
|||
|
|
|||
|
|
|||
|
This makes the client send the "CLIENT" string before trying to start the PPP
|
|||
|
connection.
|
|||
|
-----------------------------------------------------------------------------
|
|||
|
|
|||
|
3.3. Setting up an MS Windows (95) client
|
|||
|
|
|||
|
To connect to the server using windows, you use the Direct Cable Connection
|
|||
|
program, and set it up as "guest". In order for the windows client to connect
|
|||
|
at full speed (or at all), you will have to change the communication speed of
|
|||
|
direct cable connection. To do this, go to Control Panel->System->Device
|
|||
|
Manager->Modems and select the serial cable. Proceed to the 'modem' option
|
|||
|
and select a maximum speed of 115200 or whatever your linux computer is set
|
|||
|
to. Now, it is important that you reboot at this stage, or it WILL NOT WORK
|
|||
|
(at least with Microsoft windows 95 version A), I am not sure about others.
|
|||
|
-----------------------------------------------------------------------------
|
|||
|
|
|||
|
3.4. Oddly enough...
|
|||
|
|
|||
|
Oddly enough I created a Linux server that has to connect to both Linux and
|
|||
|
Windows computers, so I found myself with the odd situation of having to
|
|||
|
setup both Linux systems such that they would connect to Windows servers and
|
|||
|
clients!
|
|||
|
-----------------------------------------------------------------------------
|
|||
|
|
|||
|
4. Connecting...
|
|||
|
|
|||
|
The moment of truth: connect the computers with the null modem cable, first
|
|||
|
start the server side (if you are using the "/etc/inittab" approach it should
|
|||
|
be up already), then start the client side. You should see something like
|
|||
|
this on the server:
|
|||
|
[root@griis /root]# pppd /dev/ttyS1 nodetach
|
|||
|
Using interface ppp0
|
|||
|
Connect: ppp0 <--> /dev/ttyS1
|
|||
|
user zaphod logged in
|
|||
|
Deflate (15) compression enabled
|
|||
|
local IP address 192.168.0.1
|
|||
|
remote IP address 192.168.1.1
|
|||
|
|
|||
|
|
|||
|
Note that if you started pppd from the "/etc/inittab" file these messages
|
|||
|
will appear in "/var/log/messages". On the client side you should see
|
|||
|
something like this:
|
|||
|
[root@wylg /root]# pppd /dev/ttyS0 nodetach
|
|||
|
Using interface ppp0
|
|||
|
Connect: ppp0 <--> /dev/ttyS0
|
|||
|
Remote message: Success
|
|||
|
Deflate (15) compression enabled
|
|||
|
local IP address 192.168.1.1
|
|||
|
remote IP address 192.168.0.1
|
|||
|
|
|||
|
|
|||
|
On either side you can ping the other computer to see if the connection is
|
|||
|
active:
|
|||
|
[zaphod@wylg zaphod]$ ping 192.168.0.1
|
|||
|
PING 192.168.0.1 (192.168.0.1) from 192.168.1.1 : 56(84) bytes of data.
|
|||
|
64 bytes from 192.168.0.1: icmp_seq=0 ttl=255 time=31.7 ms
|
|||
|
64 bytes from 192.168.0.1: icmp_seq=1 ttl=255 time=20.3 ms
|
|||
|
64 bytes from 192.168.0.1: icmp_seq=2 ttl=255 time=19.2 ms
|
|||
|
64 bytes from 192.168.0.1: icmp_seq=3 ttl=255 time=20.3 ms
|
|||
|
|
|||
|
--- 192.168.0.1 ping statistics ---
|
|||
|
4 packets transmitted, 4 packets received, 0% packet loss
|
|||
|
round-trip min/avg/max = 19.2/22.8/31.7 ms
|
|||
|
|
|||
|
|
|||
|
You can now access the server through any TCP/IP services it might have
|
|||
|
available, such as FTP, HTTP, TELNET and SAMBA.
|
|||
|
-----------------------------------------------------------------------------
|
|||
|
|
|||
|
5. Internet through the serial port
|
|||
|
|
|||
|
Suppose you have a laptop and you want to access the internet occasionally.
|
|||
|
Also suppose you have a machine that has an ethernet connection and a serial
|
|||
|
port. You can set the laptop up as a client, the other machine as a server,
|
|||
|
and use IP masquerading to connect to the internet through the null modem
|
|||
|
cable. Check the IP-Masquerading-Howto for help on how to do this.
|
|||
|
-----------------------------------------------------------------------------
|
|||
|
|
|||
|
6. Other useful documents
|
|||
|
|
|||
|
<EFBFBD><EFBFBD>*<2A>The pppd and chat manual pages
|
|||
|
|
|||
|
<EFBFBD><EFBFBD>*<2A>PPP-HOWTO
|
|||
|
|
|||
|
<EFBFBD><EFBFBD>*<2A>How to hook up PPP (http://axion.physics.ubc.ca/ppp-linux.html)
|
|||
|
|
|||
|
<EFBFBD><EFBFBD>*<2A>Modem-HOWTO
|
|||
|
|
|||
|
<EFBFBD><EFBFBD>*<2A>Serial-HOWTO
|
|||
|
|
|||
|
<EFBFBD><EFBFBD>*<2A>IP-Masquerade-HOWTO
|
|||
|
|
|||
|
|
|||
|
-----------------------------------------------------------------------------
|
|||
|
7. License
|
|||
|
|
|||
|
Copyright (c) 2000, 2001 by Willem J. Atsma
|
|||
|
|
|||
|
This document is covered by the Gnu Free Document License (http://www.gnu.org
|
|||
|
/copyleft/fdl.html). Please freely copy and distribute (sell or give away)
|
|||
|
this document in any format. It's requested that corrections and/or comments
|
|||
|
be fowarded to the document maintainer. You may create a derivative work and
|
|||
|
distribute it provided that you:
|
|||
|
|
|||
|
<EFBFBD><EFBFBD>*<2A>Send your derivative work (in the most suitable format such as sgml) to
|
|||
|
the LDP (Linux Documentation Project) or the like for posting on the
|
|||
|
Internet.
|
|||
|
|
|||
|
<EFBFBD><EFBFBD>*<2A>License the derivative work with this same license or use GPL. Include a
|
|||
|
copyright notice and at least a pointer to the license used.
|
|||
|
|
|||
|
<EFBFBD><EFBFBD>*<2A>Give due credit to previous authors and major contributors.
|
|||
|
|
|||
|
|
|||
|
If you're considering making a derived work other than a translation, it's
|
|||
|
requested that you discuss your plans with the current maintainer.
|
|||
|
-----------------------------------------------------------------------------
|
|||
|
|
|||
|
8. Credits
|
|||
|
|
|||
|
I have received a nice amount of helpful feedback, specifically from J.M. and
|
|||
|
B.S., and some of it was incorporated in this new version, thanks! author:
|
|||
|
W.J. Atsma email: watsma@mech.ubc.ca revision: 29jul2001
|