This section applies and is valid only for FreeBSD 7.X.
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/cuad
.
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 N
/etc
and
.kermrc
files all over the system!
/dev/cuad0
is COM1
, /dev/cuad1
is
COM2
, etc.
Make sure you have the following in your kernel configuration file:
It is included in the GENERIC
kernel,
so this should not be a problem unless you have deleted
it.
Add your home machine, the gateway and nameservers
to your /etc/hosts
file. Ours
looks like this:
Make sure you have files
before
dns
in the hosts:
section of your /etc/nsswitch.conf
file. Without these parameters funny things may
happen.
Edit the /etc/rc.conf
file.
Make a file /etc/resolv.conf
which contains:
As you can see, these set up the nameserver hosts. Of course, the actual domain names and addresses depend on your environment.
Set the password for root
and
toor
(and any other
accounts that do not have a password).
Reboot your machine and make sure it comes up with the correct hostname.
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:
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.
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
.
Do the following:
#
kill -INT `cat /var/run/slattach.modem.pid`
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 it does not work, feel free to ask on freebsd-net mailing list. The things that people tripped over so far:
Not using -c
or -a
in slattach
(This should not be
fatal, but some users have reported that this solves
their problems.)
Using s10
instead of
sl0
(might be hard to see the
difference on some fonts).
Try ifconfig sl0
to see your
interface status. For example, you might get:
#
ifconfig sl0
sl0: flags=10<POINTOPOINT>
inet 136.152.64.181 --> 136.152.64.1 netmask ffffff00If 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 :
#
netstat -r
Routing tables
Destination Gateway Flags Refs Use IfaceMTU Rtt Netmasks:
(root node)
(root node)
Route Tree for Protocol Family inet:
(root node) =>
default inr-3.Example.EDU UG 8 224515 sl0 - -
localhost.Exampl localhost.Example. UH 5 42127 lo0 - 0.438
inr-3.Example.ED water.CS.Example.E UH 1 0 sl0 - -
water.CS.Example localhost.Example. UGH 34 47641234 lo0 - 0.438
(root node)The preceding examples are from a relatively busy system. The numbers on your system will vary depending on network activity.
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 26.4, “Dial-in Service” for details on dialup services
configuration. You may also want to check the manual pages
or 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.
For example, if a SLIP user ID were
Shelmerg
,
Shelmerg
's entry in
/etc/master.passwd
would look
something like this:
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:
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:
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
. This will make sure that setting the
routing option will be persistent after a reboot.
To apply the settings immediately you can execute the
following command as root
:
#
service routing startPlease refer to Chapter 9, Configuring the FreeBSD Kernel 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 27.7.2.1, “Prerequisites”) 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:
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:
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.
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:
If you are using “proxy ARP”, you will
want to have
/etc/sliphome/slip.logout
remove the
ARP entry for the SLIP client:
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.
All FreeBSD documents are available for download at http://ftp.FreeBSD.org/pub/FreeBSD/doc/
Questions that are not answered by the
documentation may be
sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.