The following is one way to set up a FreeBSD machine for SLIP on a static host
network. For dynamic hostname assignments (your address changes each time you dial up),
you probably need to have a more complex setup.
First, determine which serial port your modem is connected to. Many people set up a
symbolic link, such as /dev/modem, to point to the real device
name, /dev/cuadN. This allows you to abstract the actual device
name should you ever need to move the modem to a different port. It can become quite
cumbersome when you need to fix a bunch of files in /etc and
.kermrc files all over the system!
Note:/dev/cuad0 is COM1,
cuad1 is COM2, etc.
Make sure you have the following in your kernel configuration file:
device sl
It is included in the GENERIC kernel, so this should not be
a problem unless you have deleted it.
Make sure you have hosts before bind
in your /etc/host.conf on FreeBSD versions prior to 5.0. Since
FreeBSD 5.0, the system uses the file /etc/nsswitch.conf
instead, make sure you have files before dns in the hosts line of this file.
Without these parameters funny things may happen.
Edit the /etc/rc.conf file.
Set your hostname by editing the line that says:
hostname="myname.my.domain"
Your machine's full Internet hostname should be placed here.
Designate the default router by changing the line:
Dial up, type slip at the prompt, enter your machine name and
password. What is required to be entered depends on your environment. If you use Kermit, you can try a script like this:
# kermit setup
set modem hayes
set line /dev/modem
set speed 115200
set parity none
set flow rts/cts
set terminal bytesize 8
set file type binary
# The next macro will dial up and login
define slip dial 643-9600, input 10 =>, if failure stop, -
output slip\x0d, input 10 Username:, if failure stop, -
output silvia\x0d, input 10 Password:, if failure stop, -
output ***\x0d, echo \x0aCONNECTED\x0a
Of course, you have to change the username and password to fit yours. After doing so,
you can just type slip from the Kermit prompt to connect.
Note: Leaving your password in plain text anywhere in the filesystem is
generally a bad idea. Do it at your
own risk.
Leave the Kermit there (you can suspend it by Ctrl-z) and as root,
type:
#slattach -h -c -s 115200 /dev/modem
If you are able to ping hosts on the other side of the
router, you are connected! If it does not work, you might want to try -a instead of -c as an argument to slattach.
to kill slattach. Keep in mind you must be root to do the above. Then go back to kermit (by running fg if you suspended it)
and exit from it (q).
The slattach(8) manual
page says you have to use ifconfig sl0 down to mark the
interface down, but this does not seem to make any difference. (ifconfig sl0 reports the same thing.)
Some times, your modem might refuse to drop the carrier. In that case, simply start
kermit and quit it again. It usually goes out on the second
try.
If you get “no route to host” messages from ping(8), there may be
a problem with your routing table. You can use the netstat -r
command to display the current routes :
This document provides suggestions for setting up SLIP Server services on a FreeBSD
system, which typically means configuring your system to automatically start up
connections upon login for remote SLIP clients.
This section is very technical in nature, so background knowledge is required. It is
assumed that you are familiar with the TCP/IP network protocol, and in particular,
network and node addressing, network address masks, subnetting, routing, and routing
protocols, such as RIP. Configuring SLIP services on a dial-up server requires a
knowledge of these concepts, and if you are not familiar with them, please read a copy of
either Craig Hunt's TCP/IP Network
Administration published by O'Reilly & Associates, Inc. (ISBN Number
0-937175-82-X), or Douglas Comer's books on the TCP/IP protocol.
It is further assumed that you have already set up your modem(s) and configured the
appropriate system files to allow logins through your modems. If you have not prepared
your system for this yet, please see Section 24.4 for details
on dialup services configuration. You may also want to check the manual pages for sio(4) for information
on the serial port device driver and ttys(5), gettytab(5), getty(8), & init(8) for
information relevant to configuring the system to accept logins on modems, and perhaps stty(1) for
information on setting serial port parameters (such as clocal
for directly-connected serial interfaces).
In its typical configuration, using FreeBSD as a SLIP server works as follows: a SLIP
user dials up your FreeBSD SLIP Server system and logs in with a special SLIP login ID
that uses /usr/sbin/sliplogin as the special user's shell. The
sliplogin program browses the file /etc/sliphome/slip.hosts to find a matching line for the special
user, and if it finds a match, connects the serial line to an available SLIP interface
and then runs the shell script /etc/sliphome/slip.login to
configure the SLIP interface.
When Shelmerg logs in, sliplogin
will search /etc/sliphome/slip.hosts for a line that had a
matching user ID; for example, there may be a line in /etc/sliphome/slip.hosts that reads:
Shelmerg dc-slip sl-helmer 0xfffffc00 autocomp
sliplogin will find that matching line, hook the serial line
into the next available SLIP interface, and then execute /etc/sliphome/slip.login like this:
If all goes well, /etc/sliphome/slip.login will issue an ifconfig for the SLIP interface to which sliplogin attached itself (SLIP interface 0, in the above example,
which was the first parameter in the list given to slip.login)
to set the local IP address (dc-slip), remote IP address (sl-helmer), network mask for the SLIP interface (0xfffffc00), and any additional flags (autocomp). If something goes wrong, sliplogin usually logs good informational messages via the syslogd daemon facility, which usually logs to /var/log/messages (see the manual pages for syslogd(8) and syslog.conf(5) and
perhaps check /etc/syslog.conf to see to what syslogd is logging and where it is logging to).
FreeBSD's default kernel (GENERIC) comes with SLIP (sl(4)) support; in
case of a custom kernel, you have to add the following line to your kernel configuration
file:
device sl
By default, your FreeBSD machine will not forward packets. If you want your FreeBSD
SLIP Server to act as a router, you will have to edit the /etc/rc.conf file and change the setting of the gateway_enable variable to YES.
You will then need to reboot for the new settings to take effect.
Please refer to Chapter 8 on Configuring the FreeBSD
Kernel for help in reconfiguring your kernel.
As mentioned earlier, there are three files in the /etc/sliphome directory that are part of the configuration for /usr/sbin/sliplogin (see sliplogin(8) for the
actual manual page for sliplogin): slip.hosts, which defines the SLIP users and their associated IP
addresses; slip.login, which usually just configures the SLIP
interface; and (optionally) slip.logout, which undoes slip.login's effects when the serial connection is terminated.
/etc/sliphome/slip.hosts contains lines which have at least
four items separated by whitespace:
SLIP user's login ID
Local address (local to the SLIP server) of the SLIP link
Remote address of the SLIP link
Network mask
The local and remote addresses may be host names (resolved to IP addresses by /etc/hosts or by the domain name service, depending on your
specifications in the file /etc/nsswitch.conf), and the network
mask may be a name that can be resolved by a lookup into /etc/networks. On a sample system, /etc/sliphome/slip.hosts looks like this:
At the end of the line is one or more of the options:
normal -- no header compression
compress -- compress headers
autocomp -- compress headers if the remote end allows
it
noicmp -- disable ICMP packets (so any “ping”
packets will be dropped instead of using up your bandwidth)
Your choice of local and remote addresses for your SLIP links depends on whether you
are going to dedicate a TCP/IP subnet or if you are going to use “proxy ARP”
on your SLIP server (it is not “true” proxy ARP, but that is the terminology
used in this section to describe it). If you are not sure which method to select or how
to assign IP addresses, please refer to the TCP/IP books referenced in the SLIP
Prerequisites (Section 25.7.2.1) and/or consult
your IP network manager.
If you are going to use a separate subnet for your SLIP clients, you will need to
allocate the subnet number out of your assigned IP network number and assign each of your
SLIP client's IP numbers out of that subnet. Then, you will probably need to configure a
static route to the SLIP subnet via your SLIP server on your nearest IP router.
Otherwise, if you will use the “proxy ARP” method, you will need to assign
your SLIP client's IP addresses out of your SLIP server's Ethernet subnet, and you will
also need to adjust your /etc/sliphome/slip.login and /etc/sliphome/slip.logout scripts to use arp(8) to manage the
proxy-ARP entries in the SLIP server's ARP table.
The typical /etc/sliphome/slip.login file looks like
this:
#!/bin/sh -
#
# @(#)slip.login 5.1 (Berkeley) 7/1/90
#
# generic login file for a slip line. sliplogin invokes this with
# the parameters:
# 1 2 3 4 5 6 7-n
# slipunit ttyspeed loginname local-addr remote-addr mask opt-args
#
/sbin/ifconfig sl$1 inet $4 $5 netmask $6
This slip.login file merely runs ifconfig for the appropriate SLIP interface with the local and
remote addresses and network mask of the SLIP interface.
If you have decided to use the “proxy ARP” method (instead of using a
separate subnet for your SLIP clients), your /etc/sliphome/slip.login file will need to look something like
this:
#!/bin/sh -
#
# @(#)slip.login 5.1 (Berkeley) 7/1/90
#
# generic login file for a slip line. sliplogin invokes this with
# the parameters:
# 1 2 3 4 5 6 7-n
# slipunit ttyspeed loginname local-addr remote-addr mask opt-args
#
/sbin/ifconfig sl$1 inet $4 $5 netmask $6
# Answer ARP requests for the SLIP client with our Ethernet addr
/usr/sbin/arp -s $5 00:11:22:33:44:55 pub
The additional line in this slip.login, arp -s $5 00:11:22:33:44:55 pub, creates an ARP entry in the SLIP
server's ARP table. This ARP entry causes the SLIP server to respond with the SLIP
server's Ethernet MAC address whenever another IP node on the Ethernet asks to speak to
the SLIP client's IP address.
When using the example above, be sure to replace the Ethernet MAC address (00:11:22:33:44:55) with the MAC address of your system's Ethernet
card, or your “proxy ARP” will definitely not work! You can discover your
SLIP server's Ethernet MAC address by looking at the results of running netstat -i; the second line of the output should look something
like:
This indicates that this particular system's Ethernet MAC address is 00:02:c1:28:5f:4a -- the periods in the Ethernet MAC address given by
netstat -i must be changed to colons and leading zeros should be
added to each single-digit hexadecimal number to convert the address into the form that
arp(8) desires; see
the manual page on arp(8) for complete
information on usage.
Note: When you create /etc/sliphome/slip.login and
/etc/sliphome/slip.logout, the “execute” bit (i.e.,
chmod 755 /etc/sliphome/slip.login /etc/sliphome/slip.logout)
must be set, or sliplogin will be unable to execute it.
/etc/sliphome/slip.logout is not strictly needed (unless you
are implementing “proxy ARP”), but if you decide to create it, this is an
example of a basic slip.logout script:
#!/bin/sh -
#
# slip.logout
#
# logout file for a slip line. sliplogin invokes this with
# the parameters:
# 1 2 3 4 5 6 7-n
# slipunit ttyspeed loginname local-addr remote-addr mask opt-args
#
/sbin/ifconfig sl$1 down
If you are using “proxy ARP”, you will want to have /etc/sliphome/slip.logout remove the ARP entry for the SLIP
client:
#!/bin/sh -
#
# @(#)slip.logout
#
# logout file for a slip line. sliplogin invokes this with
# the parameters:
# 1 2 3 4 5 6 7-n
# slipunit ttyspeed loginname local-addr remote-addr mask opt-args
#
/sbin/ifconfig sl$1 down
# Quit answering ARP requests for the SLIP client
/usr/sbin/arp -d $5
The arp -d $5 removes the ARP entry that the “proxy
ARP” slip.login added when the SLIP client logged in.
It bears repeating: make sure /etc/sliphome/slip.logout has
the execute bit set after you create it (i.e., chmod 755
/etc/sliphome/slip.logout).
If you are not using the “proxy ARP” method for routing packets between
your SLIP clients and the rest of your network (and perhaps the Internet), you will
probably have to add static routes to your closest default router(s) to route your SLIP
clients subnet via your SLIP server.
Adding static routes to your nearest default routers can be troublesome (or impossible
if you do not have authority to do so...). If you have a multiple-router network in your
organization, some routers, such as those made by Cisco and Proteon, may not only need to
be configured with the static route to the SLIP subnet, but also need to be told which
static routes to tell other routers about, so some expertise and troubleshooting/tweaking
may be necessary to get static-route-based routing to work.
Note:GateD is
proprietary software now and will not be available as source code to the public anymore
(more info on the GateD website). This section only exists to ensure backwards
compatibility for those that are still using an older version.
An alternative to the headaches of static routes is to install GateD on your FreeBSD SLIP server
and configure it to use the appropriate routing protocols (RIP/OSPF/BGP/EGP) to tell
other routers about your SLIP subnet. You will need to write a /etc/gated.conf file to configure your GateD; here is a sample, similar to what the author used on
a FreeBSD SLIP server:
#
# gated configuration file for dc.dsu.edu; for gated version 3.5alpha5
# Only broadcast RIP information for xxx.xxx.yy out the ed Ethernet interface
#
#
# tracing options
#
traceoptions "/var/tmp/gated.output" replace size 100k files 2 general ;
rip yes {
interface sl noripout noripin ;
interface ed ripin ripout version 1 ;
traceoptions route ;
} ;
#
# Turn on a bunch of tracing info for the interface to the kernel:
kernel {
traceoptions remnants request routes info interface ;
} ;
#
# Propagate the route to xxx.xxx.yy out the Ethernet interface via RIP
#
export proto rip interface ed {
proto direct {
xxx.xxx.yy mask 255.255.252.0 metric 1; # SLIP connections
} ;
} ;
#
# Accept routes from RIP via ed Ethernet interfaces
import proto rip interface ed {
all ;
} ;
The above sample gated.conf file broadcasts routing
information regarding the SLIP subnet xxx.xxx.yy via
RIP onto the Ethernet; if you are using a different Ethernet driver than the ed driver, you will need to change the references to the ed interface appropriately. This sample file also sets up tracing
to /var/tmp/gated.output for debugging GateD's activity; you can
certainly turn off the tracing options if GateD works correctly for you. You will need to change the
xxx.xxx.yy's into the network address of your own
SLIP subnet (be sure to change the net mask in the proto direct
clause as well).
Once you have installed and configured GateD on your system, you will need to tell the FreeBSD
startup scripts to run GateD in
place of routed. The easiest way to accomplish this is to set
the router and router_flags
variables in /etc/rc.conf. Please see the manual page for GateD for information on
command-line parameters.