![]() | ![]() |
|
Linux Networking HOWTOJoshua DrakeCopyright © 2000 by Commandprompt, Inc This is a LinuxPorts.Com Document for the Linux Documentation Project. It has been sponsored in part by the Open Source Documentation Fund. The current version is v1.7.0 is a minor update with some grammar fixes.
Chapter 1. How can I help?We will try to provide comprehensive coverage for all Linux Networking implementations. However, time is of the essence, and this document is not a revenue maker. We provide this information in the hope that it will be useful to both the Linux Community and to newly converted Linux users. We are always interested in feedback! We will implement every relevant topic possible in this HOWTO document. 1.1. Assisting with the Net-HOWTOIf you would like to assist with this document, there are two primary avenues that are extremely helpful.
Chapter 2. Document HistoryThe original NET-FAQ was written by Matt Welsh and Terry Dawson. NET-FAQ answered frequently asked questions about networking for Linux (at a time before the Linux Documentation Project had formally started). This document covered the very early development versions of the Linux Networking Kernel. The NET-2-HOWTO superseded the NET-FAQ, and it was one of the original LDP HOWTO documents. It covered what was called "version 2" (and subsequently "version 3") of the Linux kernel Networking software. NET-2_HOWTO in turn superseded it, and relates only to version 4 of the Linux Networking Kernel (ie: kernel releases 2.x and 2.2.x. ). Previous versions of this document became quite large because of the enormous amount of material that fell within its scope. To help reduce this problem, a number of HOWTOs dealing with specific networking topics have been produced. This document will provide pointers to them where relevant, and it will cover those areas not yet reviewed by other documents. 2.1. FeedbackWe are always interested in feedback. Please contact us at: poet@linuxports.com. If you find anything erroneous, or if you feel that something should be added, please contact us. Chapter 3. How to use this HOWTO.This document is organized top-down. The first sections include informative material, and it can be skipped if you are not interested; what follows is a generic discussion of networking issues, and you must ensure you understand this before proceeding to more specific parts. The ``technology specific'' information is grouped into three main sections: Ethernet and IP-related information, technologies pertaining to widespread PC hardware, and seldom-used technologies. The suggested path through this document is as follows:
3.1. Conventions used in this documentNo special conventions are used here, but you must be warned about the way commands are shown. This howto follows the classic Unix documentation: any command you type to your shell is prefixed by a prompt. It shows "user%" as the prompt for commands that do not require superuser privileges, and "root#" as the prompt for commands that need to run as root. I chose to use "root#" instead of a plain "#" to prevent confusion with snapshots from shell scripts (where the hash mark is used to define comment lines). When ``Kernel Compile Options'' are shown, they are represented in the format used by menuconfig. They should be understandable even if you (like me) are not used to menuconfig. If you are in doubt about the options' nesting, then running the program once can always help. Was this section helpful? Why not Donate $2.50? Chapter 4. General Information about Linux Networking.4.1. Linux Networking Resources.There are a number of places where you can find good information about Linux networking. There are a wealth of Consultants available to assist you. A search able listing can be found at: http://www.linuxports.com/. Alan Cox, the current maintainer of the Linux kernel networking code, maintains a world wide web page containing highlights of current and new developments in Linux Networking: www.uk.linux.org. There is a newsgroup in the Linux news hierarchy dedicated to networking and related matters at this location: comp.os.linux.networking You can also subscribe to a mailing list where you may ask questions relating to Linux networking. Send an email message for a subscription to:
Please remember to include as much relevant detail about the problem as possible. You should specify the versions of software that you are using (especially the kernel version), the version of tools such as pppd/ or dip , and the exact nature of the problem(s) that you are experiencing. This means you should take notes of both the exact syntax of error message(s) you receive, and of any commands that you are issuing. Was this section helpful? Why not Donate $2.50? 4.2. Sources of non-linux-specific network information.If you are after some basic tutorial information on tcp/ip networking, then I recommend you take a look at the following documents:
If you are after some more detailed information on tcp/ip networking, then I highly recommend: "Inter networking with TCP/IP, Volume 1: Principles, Protocols and Architecture, by Douglas E. Comer, ISBN 0-13-227836-7, Prentice Hall publications, Third Edition, 1995." If you are wanting to learn about how to write network applications in a Unix compatible environment, then I recommend: "Unix Network Programming, by W. Richard Stevens, ISBN 0-13-949876-1, Prentice Hall Publications, 1990." A second edition of this book is appearing on the bookshelves. The new book is made up of three volumes. Check Prenice-Hall's web site for further details. You might also try the comp.protocols.tcp-ip newsgroup. RFCs are an important source of specific technical information relating to the Internet and the tcp/ip suite of protocols. RFC is an acronym for `Request For Comment' and it is the standard means of submitting and documenting Internet protocol standards. There are many RFC repositories. Many of these sites are ftp sites. Others provide World Wide Web access (with an associated search engine) that allows you to search the RFC database for particular keywords. One possible source for RFCs is at Nexor RFC database. Was this section helpful? Why not Donate $2.50? Chapter 5. Generic Network Configuration Information.You will pretty much need to know and understand the following subsections before you actually try to configure your network. They are fundamental principles that apply regardless of the exact nature of the network you wish to deploy. 5.1. What do I need to start ?Before you start building or configuring your network, you will need certain items. The most important of these are: 5.1.1. Current Kernel source(Optional).Please note: The majority of current distributions come with networking enabled. It may not be required to recompile the kernel. If you are running well known hardware you should be fine. For example: 3COM NIC, NE2000 NIC, or an Intel NIC. However, if you find yourself in the position that you do need to update the kernel, the following information is provided. Because the kernel you are running now might not yet have support for the network types or cards that you wish to use, you will probably need the kernel source to recompile the kernel with the appropriate options. For users of the major distributions such as Redhat, Caldera, Debian, or Suse, this no longer holds true. As long as you stay within the mainstream of hardware, there should be no need to recompile your kernel (unless there is a very specific feature that you need). You can always obtain the latest kernel source from ftp.cdrom.com. This is not the official site, but they have LOTS of bandwidth and capacity. The official site is kernel.org, however, please use the above URL if you can. Please remember that ftp.kernel.org is seriously overloaded. Use a mirror. Normally the kernel source will be untarred into the /usr/src/linux directory. For information on how to apply patches and build the kernel, you should read the Kernel-HOWTO. For information on how to configure kernel modules, you should read the ``Modules mini-HOWTO''. The README file found in the kernel sources and the Documentation directory are very informative: for the brave reader! Unless specifically stated, I recommend you stick with the standard kernel release (the one with the even number as the second digit in the version number). Development release kernels (the ones with the odd second digit) may have structural or other changes that may cause problems working with other software on your system. If you are uncertain that you could resolve those sorts of problems, then don't use Development release kernels. 5.1.2. IP Addresses: an Explanation.Internet Protocol Addresses are composed of four bytes. The convention is to write addresses in what is called `dotted decimal notation'. In this form, each byte is converted to a decimal number, (0-255). It drops any leading zeros (unless the number is zero) and written with each byte separated by a `.' character. By convention, each interface of a host or router has an IP address. It is legal for the same IP address to be used on each interface of a single machine, but usually each interface will have its own address. Internet Protocol Networks are contiguous sequences of IP addresses. All addresses within a network have a number of digits within the address in common. The portion of the address that is common amongst all addresses within the network is called the `network portion' of the address. The remaining digits are called the `host portion'. The number of bits that are shared by all addresses within a network is called the netmask. It is the role of the netmask to determine which addresses belong to the network it is applied to and which don't belong. For example, consider the following:
Any address that is 'bitwise anded' with its netmask will reveal the address of the network that it belongs to. The network address is therefore always the lowest numbered address within the range of addresses on the network, and it always has the host portion of the address coded in all zeroes. The broadcast address is a special address that every host on the network listens to (in addition to its own unique address). This address is the one that datagrams are sent to if every host on the network is meant to receive it. Certain types of data, like routing information and warning messages, are transmitted to the broadcast address so that every host on the network can receive it simultaneously. There are two commonly used standards for the broadcast address. The most widely accepted one is to use the highest possible address on the network as the broadcast address. In the above example, this would be 192.168.110.255. For some reason other sites have adopted the convention of using the network address as the broadcast address. In practice it doesn't matter very much which you use, but you must make sure that every host on the network is configured with the same broadcast address. For administrative reasons (some time early in the development of the IP protocol), some arbitrary groups of addresses were formed into networks. These networks were grouped into what are called classes. Classes provide a number of standard size networks that could be allocated. The ranges allocated are:
What addresses you should use depends on exactly what it is that you are doing. You may have to use a combination of the following activities to get all the addresses you need:
5.2. Where should I put the configuration commands ?There are a few different approaches to Linux system boot procedures. After the kernel boots, it always executes a program called `init'. The init program then reads its configuration file called /etc/inittab and commences the boot process. There are a few different flavors of init Everyone now seems to be gravitating to the System V (Five) flavor, developed by Miguel van Smoorenburg. Despite the fact that the init program is always the same, the setup of system boot is organized in a different way by each distribution. Usually the /etc/inittab file contains an entry looking something like:
This line specifies the name of the shell script file that actually manages the boot sequence. This file is somewhat equivalent to the AUTOEXEC.BAT file in MS-DOS. There are usually other scripts that are called by the boot script, and often the network is configured within one of these scripts. The following table may be used as a guide for your system:
Note that Debian and Red Hat use a whole directory to host scripts that fire up system services (and usually information does not lie within these files: for example, Red Hat systems store all of system configuration in files under /etc/sysconfig, where it is retrieved by boot scripts). If you want to grasp the details of the boot process, my suggestion is to check /etc/inittab and the documentation that accompanies init. Linux Journal is also going to publish an article about system initialization, and this document will point to it as soon as it is available on the web. Most modern distributions include a program that will allow you to configure many of the common sorts of network interfaces. If you have one of these, you should see if it will do what you want before attempting a manual configuration.
5.3. Creating your network interfaces.In many Unix operating systems, the network devices have appearances in the /dev directory. This is not so in Linux. In Linux, the network devices are created dynamically in software, and they do not require device files to be present. In the majority of cases, the network device is automatically created by the device driver (while it is initializing and locating your hardware). For example, the Ethernet device driver creates eth[0..n] interfaces sequentially as it locates your Ethernet hardware. The first Ethernet card found becomes eth0, the second eth1 etc. In some cases though, notably with slip and ppp, the network devices are created through the action of some user program. The same sequential device numbering applies, but the devices are not created automatically at boot time. The reason for this is that unlike Ethernet devices, the number of active slip or ppp devices may vary during the uptime of the machine. These cases will be covered in more detail in later sections. Was this section helpful? Why not Donate $2.50? 5.4. Configuring a network interface. Kernels 2.0 and 2.2When you have all of the programs you need (and your address and network information), you can configure your network interfaces. When we talk about configuring a network interface, we are talking about two items. One is the process of assigning appropriate addresses to a network device. The second is setting the appropriate values for other configurable parameters of a network device. The program most commonly used to do this is the ifconfig (interface configure) command. Typically you would use a command similar to the following:
In this example, I'm configuring an Ethernet interface `eth0' with the IP address `192.168.0.1' and a network mask of `255.255.255.0'. The `up' that trails the command tells the interface that it should become active (but can usually be omitted) since it is the default. To shutdown an interface, you can just call ``ifconfig eth0 down''. The kernel assumes certain defaults when you are configuring interfaces. For example, you may specify the network address and broadcast address for an interface. If you don't (as in my example above), then the kernel will make reasonable guesses as to what these addresses should be. If you don't supply a netmask then on the network class of the IP address is auto-configured. In my example, the kernel would assume that it is a class-C network that is being configured on the interface. It would thus configure a network address of `192.168.0.0' ,and a broadcast address of `192.168.0.255' for the interface. There are many other options to the ifconfig command. The most important of these are:
With the release of Kernel 2.2, there are a number of options available that are not listed above. Some of the most interesting ones are tunneling and IPV6. The ifconfig parameters for kernel 2.2 are listed below.
5.5. Configuring your Name Resolver.The `Name Resolver' is a part of the linux standard library. Its prime function is to provide a service to convert human-friendly hostnames (like `ftp.funet.fi' ) into machine friendly IP addresses (such as 128.214.248.6). 5.5.1. What's in a name ?You will probably be familiar with the appearance of Internet host names, but you may not understand how they are constructed or de-constructed. Internet domain names are hierarchical in nature. In other words, they have a tree-like structure. A `domain' is a family, or group, of names. A `domain' may be broken down into a `subdomain'. A `top level domain' is a domain that is not a subdomain. The Top Level Domains are specified in RFC-920. Some examples of the most common top level domains are:
For historical reasons, most domains belonging to one of the non-country based top level domains were used by organizations within the United States (even though the United States also has its own country code `.us'). This is not true any more for .com and .org domains, which are commonly used by non-us companies. Each of these top level domains has subdomains. The top level domains based on country name are often next broken down into subdomains based on the com, edu, gov, mil and org domains. So for example you end up with: com.au and gov.au for commercial and government organizations in Australia; note that this is not a general rule, as actual policies depend on the naming authority for each domain. The next level of division usually represents the name of the organization. Further subdomains vary in nature. Often the next level of subdomain is based on the departmental structure of the organization. It can, however, be based on any criterion considered reasonable and meaningful by the network administrators of the organization. The very left-most portion of the name is always the unique name assigned to the host machine. It is called the `hostname'. The portion of the name to the right of the hostname is called the `domainname' and the complete name is called the `Fully Qualified Domain Name'. To use Terrys host as an example, the fully qualified domain name is `perf.no.itg.telstra.com.au'. This means that the host name is `perf' and the domain name is `no.itg.telstra.com.au'. The domain name is based on a top level domain (based on his country Australia). And since his email address belongs to a commercial organization, `.com' is positioned as the next level domain. The name of the company is (was) `Telstra' . Their internal naming structure is based on organizational structure. In this case, the machine belongs to the Information Technology Group (Network Operations section). Usually, the names are much shorter. For example, my ISP is called ``systemy.it'' . My non-profit organization is called ``linux.it'', without any com and org subdomain. My own host is just called ``morgana.systemy.it'' : rubini@linux.it is a valid email address. Note that the owner of a domain has the rights to register hostnames as well as subdomains. For example, the LUG I belongs to uses the domain pluto.linux.it, because the owners of linux.it agreed to open a subdomain for the LUG. 5.5.2. What information you will need.You will need to know what domain your hosts name will belong to. The name resolver software provides this name translation service by making requests to a `Domain Name Server'. You will need to know the IP address of a local name server that you can use. There are three files you need to edit. I'll cover each of these in turn. 5.5.3. /etc/resolv.confThe /etc/resolv.conf is the main configuration file for the name resolver code. Its format is quite simple. It is a text file that has one keyword per line. There are three keywords typically used by the file. These keywords are:
An example /etc/resolv.conf might look something like:
This example specifies that the default domain name to append to unqualified names (ie hostnames supplied without a domain) is maths.wu.edu.au . If the host is not found in that domain, it will also try the wu.edu.au domain directly. Two name server entries are supplied. These entries may be called upon by the name resolver code to resolve the name. 5.5.4. /etc/host.confThe /etc/host.conf file is where you configure some items that govern the behavior of the name resolver code. The format of this file is described in detail in the `resolv+' man page. In nearly all circumstances, the following example will work for you:
This configuration tells the name resolver to check the /etc/hosts file before attempting to query a name server. It also tells the resolver to return all valid addresses for a host found in the /etc/hosts file (instead of just the first address). 5.5.5. /etc/hostsThe /etc/hosts file is where you put the name and IP address of local hosts. If you place a host in this file, then you do not need to query the domain name server to get its IP Address. The disadvantage of doing this is that if the IP address for that host changes, you must keep this file up to date yourself . In a well managed system, the only hostnames that usually appear in this file are an entry for the loopback interface, and also the local hosts name.
You may specify more than one host name per line (as demonstrated by the first entry), which is a standard entry for the loopback interface. 5.5.6. Running a name serverIf you want to run a local name server, you can do it easily. Please refer to the DNS-HOWTO and to any documents included in your version of BIND (Berkeley Internet Name Domain). 5.6. Configuring your loopback interface.The `loopback' interface is a special type of interface that allows you to make connections to yourself. There are various reasons why you might want to do this. For example, you may wish to test some network software without interfering with anybody else on your network. By convention, the IP address `127.0.0.1' has been assigned specifically for loopback. No matter what machine you go to, if you open a telnet connection to 127.0.0.1 you will always reach the local host. Configuring the loopback interface is simple, and it must be done (but note that this task is usually performed by the standard initialization scripts).
We'll talk more about the route command in the next section. Was this section helpful? Why not Donate $2.50? 5.7. Routing.Routing is a big topic. It is easily possible to write large volumes of text about the subject. Most of you will have fairly simple routing requirements; some of you will not. I will cover some basic fundamentals of routing only. If you are interested in more detailed information, then I suggest you refer to the references provided at the start of this document. Let's start with a definition. What is IP routing? Here is one that I'm using: "IP Routing is the process by which a host with multiple network connections decides where to deliver the IP datagrams that it has received." It might be useful to illustrate this with an example. Imagine a typical office router. It might have a PPP link off the Internet, a number of Ethernet segments feeding the workstations, and another PPP link off to another office. When the router receives a datagram on any of its network connections, it uses the routing mechanism to determine which interface it should send the datagram to next. Simple hosts also need to route. All Internet hosts have two network devices, one is the loopback interface described above, and the other is the one it uses to talk to the rest of the network (perhaps an Ethernet, perhaps a PPP, or an SLIP serial interface). Ok, so how does routing work ? Each host keeps a special list of routing rules called a "routing table". This table contains rows which typically contain at least three fields: the first is a destination address, the second is the name of the interface where the datagram is to be routed, and the third is optionally the IP address of another machine that carries the datagram on its next step through the network. You can see this table in linux by using the following command:
or by using either of the following commands:
The routing process is fairly simple. The incoming datagram is received, the destination address (who it is for) is examined, and then it is compared with each entry in the table. The entry that best matches that address is selected, and the datagram is forwarded to the specified interface. If the gateway field is filled, then the datagram is forwarded to that host via the specified interface. The destination address is otherwise assumed to be on the network supported by the interface. To manipulate this table, a special command is used. This command takes command line arguments and converts them into kernel system calls. These calls request the kernel to add, delete, or modify entries in the routing table. The command is called `route'. Here is a simple example. Imagine you have an Ethernet network. You've been told it is a class-C network with an address of 192.168.1.0. You've been supplied with an IP address of 192.168.1.10 for your use, and you have been told that 192.168.1.1 is a router connected to the Internet. The first step is to configure the interface as described earlier. You would use a command similar to the following:
You now need to add an entry into the routing table to tell the kernel that datagrams for all hosts with addresses that match 192.168.1.* should be sent to the ethernet device. You would use a command similar to:
Note the use of the `-net' argument to tell the route program that this entry is a network route. Your other choice here is a `-host' route, which is a route that is specific to one IP address. This route will enable you to establish IP connections with all of the hosts on your ethernet segment. But what about all of the IP hosts that aren't on your ethernet segment? It would be a very difficult job to have to add routes to every possible destination network. There is a special trick that is used to simplify this task. The trick is called the `default' route. The default route matches every possible destination (but poorly). If any other entry exists that matches the required address, it will be used instead of the default route. The idea of the default route is simply to enable you to say in effect: "and everything else should go here". In this example you would use an entry like:
The `gw' argument tells the route command that the next argument is the IP address, or name, of a gateway or router machine. This machine is where all datagrams matching the entry should be directed to for further routing. on them So, your complete configuration would look like:
If you take a close look at your network `rc' files, you will find that at least one of them looks very similar to this configuration (a very common one). Let's now look at a slightly more complicated routing configuration. Let's imagine we are configuring the router we looked at earlier (the one supporting the PPP link to the Internet, and the lan segments feeding the workstations in the office). Lets imagine the router has three ethernet segments, and it also has one PPP link. Our routing configuration would look something like the fEthernet:
Each of the workstations would use the simpler form presented above. Only the router needs to specify each of the network routes separately. The default route for the workstations mechanism will capture all of them, letting the router worry about splitting them up appropriately. You may be wondering why the default route presented doesn't specify a `gw'. The reason for this is simple: serial link protocols such as PPP and SLIP only have two hosts on their network (one at each end). To specify the host at the other end of the link as the gateway is both pointless and redundant. You do not need to specify a gateway for these types of network connections as there is no other choice. Other network types, such as ethernet, arcnet, or token ring, do actually require the gateway to be specified (as these networks support Ethernetmbers of hosts ). 5.7.1. So what does the routed program do ?The routing configuration described above is best suited for simple network arrangements where there are only single possible paths to destinations. When you have a more complex network arrangement, things get a little more complicated. Fortunately for most of you this won't be an issue. The big problem with `manual routing' or `static routing' is that if a machine or link fails in your network, the only way to re-direct your datagrams (if another way in fact exists) is by manually intervening and executing the appropriate commands. Naturally this is clumsy, slow, impractical, and hazard prone. Various techniques have been developed to automatically adjust routing tables in the event of network failures (where there are alternate routes). All of these techniques are loosely grouped by the term `dynamic routing protocols'. You may have heard of some of the more common dynamic routing protocols. The most common are probably RIP (Routing Information Protocol) and OSPF (Open Shortest Path First Protocol). The Routing Information Protocol is very common on small networks (such as small-medium sized corporate networks or building networks). OSPF is more modern. It is more capable at handling large network configurations, and it is better suited to environments where there is a large number of possible paths through the network. Common implementations of these protocols are: `routed' - RIP and `gated' - RIP, OSPF and others. The `routed' program is normally supplied with your Linux distribution, or it is included in the `NetKit' package detailed above. An example of where and how you might use a dynamic routing protocol might look something like the following:
We have three routers A, B and C. Each router supports one ethernet segment with a Class C IP network (netmask 255.255.255.0). Each one also has a PPP link to each of tEthernet routers. The network ultimately forms a triangle. It should be clear that the routing table at router A could look like the following:
This would work just fine until the link between router A and B fails. Hosts on the ethernet segment of A (see above diagram) could not reach hosts on the ethernet segment on B: their datagramEthernete directed to router As ppp0 link (which in this example is broEthernetey could still continue to talk to hosts on the ethernet segment of C. And hosts on CCsethernet segment could still talk to hosts on BBsethernet segment. TheEthernetnications can still occur because the link between B and C is still intact. If A can talk to C, and C can still talk to B, why shouldn't A route its datagrams for B via C (and let C send them to B) ? This is exactly the sort of problem that dynamic routing protocols like RIP were designed to solve. If each of the routers A, B and C were running a routing daemon, then their routing tables would be automatically adjusted to reflect the new state of the network (should any one of the links in the network fail). To configure such a network is simple: at each router you need only do two things. In this case for Router A:
The `routed' routing daemon automatically finds all active network ports (when it sends and listens for messages on each of the network devices) to allow it to both determine and update the routing table on the host. This has been a very brief explanation of dynamic routing. If you would like more information, please refer to the suggested references listed at the top of this document. The important points relating to dynamic routing are:
5.8. Configuring your network servers and services.Network servers and services are programs that allow a remote user to make use of your Linux machine. Server programs listen on network ports. Network ports are a means of addressing a particular service on any particular host. They are how a server knows the difference between an incoming telnet connection and an incoming ftp connection. The remote user establishes a network connection to your machine. The server program (the network daemon program) listening on that port accepts the connection and then executes. There are two ways that network daemons may operate. Both are commonly employed in practice. The two ways are:
There are two important files that need to be configured. They are the /etc/services file (which assigns names to port numbers), and the /etc/inetd.conf file (the configuration file for the inetd network daemon). 5.8.1. /etc/servicesThe /etc/services file is a simple database that associates a human friendly name to a machine friendly service port. Its format is quite simple. The file is a text file where each line represents and entry in the database. Each entry is comprised of three fields separated by any number of whitespace (tab or space) characters. The fields are: name port/protocol aliases # comment
Any text appearing in a line after a `#' character is ignored, and it is treated as a comment. 5.8.1.1. An example /etc/services file.All modern linux distributions provide a good /etc/services file. Just in case you happen to be building a machine from the ground up, here is a copy of the /etc/services file supplied with an old Debian distribution:
In the real world, the actual file is always growing as new services are being created. If you fear your own copy is incomplete, I'd suggest to copy a new /etc/services from a recent distribution. 5.8.2. /etc/inetd.confThe /etc/inetd.conf file is the configuration file for the inetd server daemon. Its function is to tell inetd what to do when it receives a connection request for a particular service. For each service that you wish to accept connections, you must tell inetd what network server daemon to run (and how to run it). Its format is also fairly simple. It is a text file with each line describing a service that you wish to provide. Any text in a line following a `#' is both ignored, and it is considered a comment. Each line contains seven fields separated by any number of whitespace (tab or space) characters. The general format is as follows:
5.8.2.1. An example /etc/inetd.confAs for the /etc/services file all modern distributions will include a good /etc/inetd.conf file for you to work with. Here is the /etc/inetd.conf file from the Debian distribution.
5.9. Other miscellaneous network related configuration files.There are a number of miscellaneous files relating to network configuration under linux that might be of interest. You may never have to modify these files, but it is worth describing them so you know what they contain and why they are used. 5.9.1. /etc/protocolsThe /etc/protocols file is a database that maps protocol id numbers against protocol names. This is used by programmers to allow them to specify protocols by name in their programs. The file is also used by some programs such as tcpdump to allow them to display names instead of numbers in their output. The general syntax of the file is:
The /etc/protocols file supplied with the Debian distribution is as follows:
5.9.2. /etc/networksThe /etc/networks file has a similar function to that of the /etc/hosts file.This file provides a simple database of network names against network addresses. Its format differs in that there may be only two fields per line, and that the fields are coded as:
An example might look like:
You will get a display of the network name (NOT its address) while using a command like route in the following instance: the destination is a network, and that network has an entry in the /etc/networks file. 5.10. Network Security and access control.Let me start this section by warning you that securing your machine and network against malicious attack is a complex art. I do not consider myself an expert in this field. The following mechanisms I describe will help. If you are serious about security, then I recommend you do some research of your own into the subject. There are many good references on the Internet relating to the security, including the Security-HOWTO An important rule of thumb is: `Don't run servers you don't intend to use'. Many distributions come configured with all sorts of services that are configured and automatically started. To ensure even a minimum level of safety, you should go through your /etc/inetd.conf file. Comment out (place a `#' at the start of the line) any entries for services you don't intend to use. Good candidates are services such as: shell, login, exec, uucp, ftp and informational services such as finger, netstat and systat. There are all sorts of security and access control mechanisms. I'll now describe the most elementary: 5.10.1. /etc/ftpusersThe /etc/ftpusers file is a simple mechanism that allows you to deny certain users from logging into your machine via ftp. When an incoming ftp connection is received, the /etc/ftpusers file is read by the ftp daemon program (ftpd). The file is a simple list of those users who are not allowed login. It might look something like:
5.10.2. /etc/securettyThe /etc/securetty file allows you to specify which tty devices root are allowed for login. The /etc/securetty file is read by the login program (usually /bin/login). Its format is a list of the tty devices names allowed: on all others root login is disallowed:
5.10.3. The tcpd hosts access control mechanism.The tcpd program listed in the samone /etc/inetd.conf provides logging and access control mechanisms to services. It is configured to protect. When it is invoked by the inetd program, it reads two files containing access rules. It will then either alallow oreny access to the server it is protecting. It will search the rules files until the first match is found. If no match is found, then it assumes that access should be allowed to anyone. The files it searches in sequence are: /etc/hosts.allow, /etc/hosts.deny. I'll describe each of these in turn. For a complete description of this facility, you should refer to the appropriate man pages (hosts_access(5) is a good starting point). 5.10.3.1. /etc/hosts.allowThe /etc/hosts.allow file is a configuration file of the /usr/sbin/tcpd program. The hosts.allow file contains rules describing which hosts are allowed access to a service on your machine. The file format is quite simple:
An example:
5.10.3.2. /etc/hosts.denyThe /etc/hosts.deny file is a configuration file of the /usr/sbin/tcpd program. The hosts.deny file contains rules describing which hosts are disallowed access to a service on your machine. A simple sample would look something like this:
The PARANOID entry is redundant because the other entry traps everything in any case. Either of these entries would make a reasonable default (depending on your particular requirement). Having an ALL: ALL default in the /etc/hosts.deny and then specifically enabling on those services and hosts that you want in the /etc/hosts.allow file is the safest configuration. 5.10.4. /etc/hosts.equivThe hosts.equiv file is used to grant certain hosts and users access rights to accounts on your machine without having to supply a password. This is useful in a secure environment where you control all machines, but is otherwise a security hazard . Your machine is only as secure as the least secure of the trusted hosts. To maximize security, don't use this mechanism. Encourage your users not to use the .rhosts file as well. 5.10.5. Configure your ftp daemon properly.Many sites will be interested in running an anonymous ftp server to allow other people to upload and download files without requiring a specific userid. If you decide to offer this facility, make sure you configure the ftp daemon properly for anonymous access. Most man pages for ftpd(8) describe in some length the proper procedures. You should always ensure that you follow these instructions. An important tip is to not use a copy of your /etc/passwd file in the anonymous account /etc directory. Make sure you strip out all account details (except those that you must have), otherwise you will be vulnerable to brute force password cracking techniques. 5.10.6. Network Firewalling.Not allowing datagrams to even reach your machine (or servers) is an excellent means of security. This is covered in depth in the Firewall-HOWTO, and (more concisely) in a later section of this document. 5.10.7. Other suggestions.Here are some other (potentially religious) suggestions for you to consider:
Chapter 6. Ethernet InformationThis section covers information specific to Ethernet, and it also covers the configuring of Ethernet Cards. 6.1. Supported Ethernet Cards6.1.1. 3Com
6.1.2. AMD, ATT, Allied Telesis, Ansel, Apricot
6.1.4. Danpex, DEC, Digi, DLink
6.1.5. Fujitsu, HP, ICL, Intel
6.1.6. KTI, Macromate, NCR NE2000/1000, Netgear, New Media
6.1.7. PureData, SEEQ, SMC
6.1.8. Sun Lance, Sun Intel, Schneider, WD, Zenith, IBM, Enyx
6.2. General Ethernet InformationEthernet devices names are `eth0', `eth1', `eth2' etc. The first card detected by the kernel is assigned `eth0', and the rest are assigned sequentially in the order in which they are detected. Once you have your kernel properly built to support your ethernet card, configuration of the card is easy. Typically you would use something like (which most distributions already do for you, if you configured them to support your ethernet):
Most of the ethernet drivers were developed by Donald Becker Was this section helpful? Why not Donate $2.50? 6.3. Using 2 or more Ethernet Cards in the same machine6.3.1. If your driver is a module (Normal with newer distros)The module will typically can detect all of the installed cards. Information from the detection is stored in the file: /etc/conf.modules. Consider that a user has 3 NE2000 cards, one at 0x300 one at 0x240, and one at 0x220. You would add the following lines to the /etc/conf.modules file:
What this does is tell the program modprobe to look for 3 NE based cards at the following addresses. It also states in which order they should be found and the device they should be assigned. Most ISA modules can take multiple comma separated I/O values. For example:
The -o option allows for a unique name to be assigned to each module. The reason for this is that you can not have two copies of the same module loaded. The irq= option is used to specify the hardware IRQ, and the io= to specify the different io ports. By default, the Linux kernel only probes for one Ethernet device. You need to pass command line arguments to the kernel in order to force detection of furter boards. To learn how furthere your ethernet card(s) work under Linux, you should refer to the Ethernet-HOWTO. Chapter 7. IP Related InformationThis section covers information specific to IP. 7.1. Kernel Level OptionsThis section includes information on setting IP options within the kernel at boot time. An example of these options are ip_forward or ip_bootp_agent. These options are used by setting the value to a file in the
For example, to set ip_forward enabled, you would type
7.1.1. General IP option listing
7.2. EQL - multiple line traffic equaliserThe EQL device name is `eql'. With the standard kernel source, you may have only one EQL device per machine. EQL provides a means of utilizing multiple Point-to-Point lines such as PPP, slip, or plip as a single logical link to carry tcp/ip. Often it is cheaper to use multiple lower speed lines than to have one high speed line installed. Kernel Compile Options:
To support this mechanism, the machine at the other end of the lines must also support EQL. Linux, Livingstone Portmasters and newer dial-in servers support compatible facilities. To configure EQL you will need the eql tools which are available from: metalab.unc.edu. Configuration is fairly straightforward. You start by configuring the eql interface. The eql interface is just like any other network device. You configure the IP address and mtu using the ifconfig utility. Here is an example:
Next, you need to manually initiate each of the lines you will use. These may be any combination of Point-to-Point network devices. How you initiate the connections will depend on what sort of link they are. Refer to the appropriate sections for further information. Lastly you need to associate the serial link with the EQL device. This is called `enslaving' : it is done with the eql_enslave command as shown:
The `estimated speed' parameter you supply eql_enslave doesn't do anything directly. It is used by the EQL driver to determine what share of the datagrams that device should receive. You can then fine tune the balancing of the lines by playing with this value. To disassociate a line from an EQL device, use the eql_emancipate command as shown:
You add routing as you would for any other Point-to-Point link, except that your routes should refer to the eql device rather than the actual serial devices. You would typically use:
The EQL driver was developed by Simon Janes simon@ncm.com. 7.3. IP Accounting (for Linux-2.0)The IP accounting features of the Linux kernel allow you to collect and analyze some network usage data. The data collected comprises the number of packets and the number of bytes accumulated since the figures were last reset. You may specify a variety of rules to categorize the figures to suit your purpose. This option has been removed in kernel 2.1.102 because the old ipfwadm-based firewalling was replaced by ``ipfwchains''. Kernel Compile Options:
After you have compiled and installed the kernel, you need to use the ipfwadm command to configure IP accounting. There are many different ways of breaking down the accounting information. I've picked a simple example of what might be useful. You should read the ipfwadm man page for more information. Scenario: You have a ethernet network that is linked to the Internet via a PPP link. On the ethernet, you have a machine that offers a number of services. You are interested in knowing how much traffic is generated by each of ftp (and world wide web traffic), as well as total tcp and udp traffic. You might use a command set that looks like the following (shown as a shell script):
The names ``ftp-data'' and ``www'' refer to lines in /etc/services. The last command lists each of the Accounting rules and displays the collected totals. An important point to note when analyzing IP accounting is that totals for all rules that match will be incremented. To obtain differential figures, you need to perform appropriate maths. For example, if I wanted to know how much data was not ftp or www, I would subtract the individual totals from the rule that matches all ports.
7.3.1. IP Accounting (for Linux-2.2)The new accounting code is accessed via ``IP Firewall Chains''. See the IP chains home page for more information. You'll now need to use ipchains instead of ipfwadm to configure your filters. (From Documentation/Changes in the latest kernel sources). 7.4. IP AliasingThere are some applications where being able to configure multiple IP addresses to a single network device is useful. Internet Service Providers often use this facility to provide a "customized" feature to their World Wide Web and ftp offerings for their customers. You can refer to the ``IP-Alias mini-HOWTO'' for more information. Kernel Compile Options:
After compiling and installing your kernel with IP_Alias support, configuration is very simple. The aliases are added to virtual network devices associated with the actual network device. A simple naming convention applies to these devices being <devname>:<virtual dev num>, e.g. eth0:0, ppp0:10 etc. Note that the the ifname:number device can only be configured after the main interface has been set up. For example, assume you have an ethernet network that supports two different IP subnetworks simultaneously. You also wish your machine to have direct access to both. You could use something like:
To delete an alias, add a `-' to the end of its name, then refer to it. It is as simple as:
All routes associated with that alias will also be deleted automatically. Was this section helpful? Why not Donate $2.50? 7.5. IP Firewall (for Linux-2.0)IP Firewall and Firewalling issues are covered in more depth in the Firewall-HOWTO. IP Firewalling allows you to secure your machine against unauthorized network access by filtering or allowing datagrams from or to IP addresses that you nominate. There are three different classes of rules; incoming filtering, outgoing filtering, and forwarding filtering. Incoming rules are applied to datagrams that are received by a network device. Outgoing rules are applied to datagrams that are to be transmitted by a network device. Forwarding rules are applied to datagrams that are received and are not for this machine (ie. datagrams that would be routed). Kernel Compile Options:
Configuration of the IP firewall rules is performed using the ipfwadm command. As I mentioned earlier, I am not a security expert. I will present an example you can use. You should, however, do your own research and develop your own rules. Using your linux machine as a router and firewall gateway to protect your local network from unauthorized access (from outside your network) is probably the most common use of an IP firewall. The following configuration is based on a contribution from Arnt Gulbrandsen: <agulbra@troll.no>. The example describes the configuration of the firewall rules on the Linux firewall/router machine illustrated below:
The following commands would normally be placed in an rc file. They would be automatically started each time the system boots. For maximum security, they would be performed after the network interfaces are configured (but before the interfaces are actually brought up) to prevent anyone gaining access while the firewall machine is rebooting.
Good firewall configurations are a little tricky. This example should be a reasonable starting point for you. The ipfwadm manual page offers some assistance in how to use the tool. If you intend to configure a firewall, be sure to ask around and get as much advice from sources you consider reliable. Get someone to test/sanity check your configuration from the outside. 7.5.1. IP Firewall (for Linux-2.2)The new firewalling code is accessed via ``IP Firewall Chains''. See the IP chanins home page for more information. Among other things, you'll now need to use ipchains instead of ipfwadm to configure your filters (From Documentation/Changes in the latest kernel sources). We are aware that this is a sorely out of date statement. We are currently working on getting this section current. You can expect a newer version sometime this year. 7.6. IPIP EncapsulationWhy would you want to encapsulate IP datagrams within IP datagrams? It must seem odd if you've never seen a working application. Two common places where it is used are in Mobile-IP and IP-Multicast. Amateur Radio is perhaps the most widely spread (and least known) useage. Kernel Compile Options:
IP tunnel devices are called `tunl0', `tunl1' etc. "But why ?". Ok, ok. Conventional IP routing rules mandate that an IP network comprises a network address and a network mask. This produces a series of contiguous addresses that may all be routed via a single routing entry. This is very convenient. It means that you may use any particular IP address while you are connected to its piece of the network. In most instances this is ok. If you are a mobile netizen, however, then you may not be able to stay connected to the one place all the time. IP/IP encapsulation (IP tunneling) allows you to overcome this restriction by allowing datagrams destined for your IP address to be wrapped up and redirected to another IP address. If you know that you're going to be operating from another IP network, you can set up a machine on your home network to accept datagrams to your IP address. You can then redirect these datagrams to the address that you will be temporarily using. 7.6.1. A tunneled network configuration.
The diagram illustrates another possible reason to use IPIP encapsulation; virtual private networking. This example presupposes that you have two machines, each with a simple dial up Internet connection. Each host is allocated just a single IP address. Behind each of these machines are some private local area networks. These LANs are configured with reserved IP network addresses. Suppose that you want to allow any host on network A to connect to any host on network B (just as if they were properly connected to the Internet with a network route). IPIP encapsulation will allow you to do this configuration. Note: encapsulation does not solve the problem of how you get the hosts on networks A and B to talk to any other on the Internet. You will still need to use tricks like IP Masquerade. Encapsulation is normally performed by machines functioning as routers. Linux router `A' would be configured with a script like the following:
Linux router `B' would be configured with a similar script:
The command:
reads: `Send any datagrams destined for 192.168.1.0/24 inside an IPIP encap datagram with a destination address of aaa.bbb.ccc.ddd'. Note that the configurations are reciprocated at either end. The tunnel device uses the `gw' in the route as the destination of the IP datagram (where it will place the datagram it has received to route). That machine must know how to decapsulate IPIP datagrams. In other words, it must also be configured with a tunnel device. 7.6.2. A tunneled host configuration.You do not have to be routing a whole network. You could, for example, route just a single IP address. In that instance you might configure the tunl device on the `remote' machine with its home IP address. At the A end would have a host route (and Proxy Arp) rather than a network route via the tunnel device. Let's redraw and modify our configuration appropriately. Now we have just host `B' which you want to act and behave as if it is both fully connected to the Internet, and also part of the remote network supported by host `A':
Linux router `A' would be configured with:
Linux host `B' would be configured with:
This sort of configuration is more typical of a Mobile-IP application: a single host wants to roam around the Internet and maintain a single usable IP address the whole time. You should refer to the Mobile-IP section for more information on how this is handled in practice. 7.7. IP MasqueradeMany people have a simple dialup account to connect to the Internet. Nearly everybody using this sort of configuration is allocated a single IP address by the Internet Service Provider. This is normally enough to allow only one host full access to the network. IP Masquerade is a clever trick that enables you to have many machines make use of that one IP address. It causes the other hosts to look like the machine supporting the dial-up connection. This is where the term masquerade applies. There is a small caveat: the masquerade function usually works only in one direction. That is, the masqueraded hosts can make calls out, but they cannot accept or receive network connections from remote hosts. This means that some network services do not work (such as talk), and others (such as ftp) must be configured in passive (PASV) mode to operate. Fortunately, the most common network services such as telnet, World Wide Web and irc work just fine. Kernel Compile Options:
Normally, you have your linux machine supporting a SLIP or PPP dial-up line (just as it would if it were a standalone machine). Additionally, it would have another network device configured (perhaps an ethernet) with one of the reserved network addresses. The hosts to be masqueraded would be on this second network. Each of these hosts would have the IP address of the ethernet port of the linux machine set as their default gateway or router. A typical configuration might look something like this:
7.7.1. Masquerading with IPFWADM (Kernels 2.0.x)The most relevant commands for this configuration are:
7.7.2. Masquerading with IPCHAINSThis is similar to using IPFWADM, but the command structure has changed:
You can get more information on the Linux IP Masquerade feature from the IP Masquerade Resource Page. Also, a very detailed document about masquerading is the ``IP-Masquerade mini-HOWTO'' (which also intructs to configure other OS's to run with a Linux masquerade server). For information on Applications of IP Masquerading, check the IPMASQ Applications page. 7.8. IP Transparent ProxyIP transparent proxy is a feature that enables you to redirect servers or services destined for another machine to those services on this machine. Typically, this would be useful where you have a linux machine as a router (and also provides a proxy server). You would redirect all connections destined for that service remotely to the local proxy server. Kernel Compile Options:
Configuration of the transparent proxy feature is performed using the ipfwadm command. An example that might be useful is as follows:
This example will cause any connection attempts to port telnet (23) on any host to be redirected to port 2323 on this host. If you run a service on that port, you could forward telnet connections, log them, or do whatever fits your needs. A more interesting example is redirecting all http traffic through a local cache. However, the protocol used by proxy servers is different from native http: (where a client connects to www.server.com:80 and asks for /path/page). When it connects to the local cache, it contacts proxy.local.domain:8080 and asks for www.server.com/path/page. To filter an http request through the local proxy, you need to adapt the protocol by inserting a small server, called transproxy (you can find it on the world wide web). You can choose to run transproxy on port 8081.Just ssue this command:
The transproxy program, then, will receive all connections meant to reach external servers, and will pass them to the local proxy (after fixing protocol differences). Was this section helpful? Why not Donate $2.50? 7.9. IPv6Just when you thought you were beginning to understand IP networking, the rules get changed! IPv6 is the shorthand notation for version 6 of the Internet Protocol. IPv6 was developed primarily to overcome the concerns in the Internet community. Users worried that there would soon be a shortage of IP addresses to allocate. IPv6 addresses are 16 bytes long (128 bits). IPv6 incorporates a number of other changes, mostly simplifications, that will make IPv6 networks more managable than IPv4 networks. Linux already has a working (but not complete) IPv6 implementation in the 2.2.* series kernels. 7.11. Mobile IPThe term "IP mobility" describes the ability of a host that is able to move its network connection from one point on the Internet to another (without changing its IP address or losing connectivity). Usually when an IP host changes its point of connectivity, it must also change its IP address. IP Mobility overcomes this problem by allocating a fixed IP address to the mobile host. It also uses IP encapsulation (tunneling) with automatic routing to ensure that datagrams destined for it are routed to the actual IP address it is currently using. A project is underway to provide a complete set of IP mobility tools for Linux. The status of the project and tools may be obtained from: Linux Mobile IP Home Page. Was this section helpful? Why not Donate $2.50? 7.12. MulticastIP Multicast allows an arbitrary number of IP hosts on disparate IP networks to have IP datagrams simultaneously routed to them. This mechanism is exploited to provide Internet wide "broadcast" material, such as audio and video transmissions, as well as other novel applications. Kernel Compile Options:
A suite of tools and some minor network configuration is required. Please check the Multicast-HOWTO for more information on Multicast support in Linux. 7.13. Traffic Shaper - Changing allowed bandwidthThe traffic shaper is a driver that creates new interface devices. Those devices are traffic-limited in a user-defined way. They rely on physical network devices for actual transmission, and they can be used as outgoing routed for network traffic. The shaper was introduced in Linux-2.1.15, and it was backported to Linux-2.0.36 (it appeared in 2.0.36-pre-patch-2 distributed by Alan Cox, the author of the shaper device and maintainer of Linux-2.0). The traffic shaper can only be compiled as a module. It is configured by the shapecfg program. The commands are similar to the following:
The shaper device can only control the bandwidth of outgoing traffic (as packets are transmitted via the shaper; only according to the routing tables). A ``route by source address'' functionality could help in limiting the overall bandwidth of specific hosts using a Linux router. Linux-2.2 already has support for such routing. If you need it for Linux-2.0 please check the patch by Mike McLagan at ftp.invlogic.com. Refer to Documentationnetworking/shaper.txt for further information about the shaper. If you want to try out a (tentative) shaping for incoming packets, try out rshaper-1.01 (or newer) from ftp.systemy.it. Was this section helpful? Why not Donate $2.50? Chapter 8. DHCP and DHCPDDHCP is an acronym for Dynamic Host Configuration Protocol. The creation of DHCP has made configuring the network on multiple hosts extremely simple. Instead of having to configure each host separately, you can assign all of the common host-used parameters with a DHCP server. Each time the host boots up, it will broadcast a packet to the network. This packet is a call to any DHCP servers located on the same segment to configure the host. DHCP is extermely useful in assigning items such as the IP address, Netmask, and gateway of each host. 8.1. DHCP Client Setup for users of LinuxConfWhen you are in linux, and you are logged in as the user "root", start the program linuxconf. This program comes with all versions of redhat, and it works with X as well as with the console. It also works for both SuSe and Caldera.
8.2. DHCP Server Setup for LinuxRetrieve DHCPD (if your machine does not already have it installed). Get DHCPD Quick Note: MAKE SURE YOU HAVE MULTICAST ENABLED IN THE KERNEL. If there is not a binary distribution for your version of linux, then you will have to compile DHCPD. Edit your /etc/rc.d/rc.local to reflect an addition of a route for 255.255.255.255. Quoted from DHCPd README: In order for dhcpd to work correctly with picky DHCP clients (e.g., Windows 95), it must be able to send packets with an IP destination address of 255.255.255.255. Unfortunately, Linux insists on changing 255.255.255.255 into the local subnet broadcast address (in this case, the address would be 192.5.5.223). This results in a DHCP protocol violation. While many DHCP clients don't notice the problem, some (e.g., all Microsoft DHCP clients) will recognize the violation. Clients that have this problem will appear not to see DHCPOFFER messages from the server. Type the following as root: route add -host 255.255.255.255 dev eth0 If the message appears: 255.255.255.255: Unknown host Try adding the following entry to your /etc/hosts file: 255.255.255.255 dhcp Then, try: route add -host dhcp dev eth0 8.2.1. Options for DHCPDNow you need to configure DHCPd. In order to do this, you will have to create or edit /etc/dhcpd.conf. There is a graphical interface for dhcpd configuration under linuxconf. This makes configuring and managing DHCPD extremely simple. If you want to configure it by hand, you should follow instructions below. I suggest configuring it by hand at least once. It will help in the diagnostics that a GUI can't provide. Unfortunately Micrsoft doesn't believe this! The simplest way to assign IP addresses is to assign them randomly. A sample configuration file that shows this type of setup is displayed below:
This will allow the DHCP server to assign the client an IP address from the range 192.168.1.10-192.168.1.100 or 192.168.1.150-192.168.1.200. If the client doesn't request a longer time frame, then the DHCP server will lease an IP address for 1200 seconds. Otherwise, the maximum (allowed) lease the server will allow is 9200 seconds. The server sends the following parameters to the client: Use 255.255.255.0 as your subnet mask Use 192.168.1.255 as your broadcast address Use 192.168.1.254 as your default gateway USE 192.168.1.1 and 192.168.1.2 as your DNS servers. If you specify a WINS server for your Windows clients, you need to include the following option in the dhcpd.conf file: option netbios-name-servers 192.168.1.1; You can also assign specific IP addresses based on the clients' ethernet MAC address as follows:
This will assign IP address 192.168.1.222 to a client with the ethernet MAC address of 08:00:2b:4c:59:23. 8.2.2. Starting the serverIn most cases the DHCP installation doesn't create a "dhcpd.leases" file. Before you start the server, you must create an empty file: touch /var/state/dhcp/dhcpd.leases To start the DHCP server, simply type (or include in the bootup scripts): /usr/sbin/dhcpd This will start dhcpd on eth0 device. If you need to start it on another device, simply supply it on the command line as shown below: /usr/sbin/dhcpd eth1 If you wish to test the configuration for any oddities, you can start dhcpd with the debugging mode. Typing the command below will allow you to see exactly what is going on with the server. /usr/sbin/dhcpd -d -f Boot up a client.Take a look at the console of the server. You will see a number of debugging messages appear on the screen. Your done Chapter 9. Advanced Networking with Kernel 2.2Kernel 2.2 has advanced the routing capabilities of Linux quite a bit. Unfortunately, the documentation for using these new capabilities is almost impossible to find (even if it does exist). I have put some time into it and have been able to do a little with it. I will add more as I have the time and the assistance to figure out what it all means. In kernel 2.0 and below, Linux used the standard route command to place routes in a single routing table. If you were to type netstat -rn at the Linux prompt, you would see and example. In the newer kernels (2.1 and above), you have another option. This option is rule based, and it allows you to have multiple routing tables. The new rules allow a great deal of flexibility in deciding how a packet is handled. You can choose between routes based not only on the destination address, but also on the source address, TOS, or incoming device. 9.1. The BasicsListing the Routing Table: ip route Now on my machine, this equates to the following output:
The first line: 207.149.43.62 dev eth0 scope link is the route for the interface The second line: 207.149.43.0/24 dev eth0 proto kernel scope link src 207.149.43.62 Is the route that says everything that goes to 207.149.43.0 needs to go out 207.149.43.62. The third line: default via 207.149.43.1 dev eth0 is the default route. 9.1.1. Using the informationNow that we have walked through a basic routing table, lets see how we use it. First read the Policy routing text. If you get confused, don't worry -- it is a confusing text. It will give you the run down on everything that the new routing code can accomplish. 9.2. Adding a route with the new ip toolsIn the previous section, we spoke about both listing the routing table and we discussed what the basics of that listing meant. Fortunately, the output is very similar to the syntax that you would use to implement that exact routing table on your own.
As you can see, the output and input are almost exact (except for the adding of the ip route add in front of the line). Note: We are aware that the documentation on Routing with 2.2 is sorely lacking in details. In fact, I think EVERYONE is aware of it! If you have any experience in this matter, please contact us at: poet@linuxports.com We would like to get any information that you may have to help strengthen our documentation! 9.3. Using NAT with Kernel 2.2The IP Network Address Translation facility is pretty much the standardized "big brother" of the Linux IP Masquerade facility. It is specified in some detail in RFC-1631 (at your nearest RFC archive). NAT provides features that IP-Masquerade does not (which make it eminently more suitable for use in both corporate firewall router designs, and in larger scale installations). An alpha implementation of NAT for Linux 2.0.29 kernel has been developed by Michael.Hasenstein: Michael.Hasenstein@informatik.tu-chemnitz.de. Michael's documentation and implementation are available from: Linux IP Network Address Web Page The much improved TCP/IP stack of Linux 2.2 kernel has NAT functionality built-in. This facility seems to render the work by Michael Hasenstein somewhat obsolete (Michael.Hasenstein@informatik.tu-chemnitz.de). To get it to work, you need the kernel with enabled CONFIG_IP_ADVANCED_ROUTER, CONFIG_IP_MULTIPLE_TABLES (aka policy routing) and CONFIG_IP_ROUTE_NAT (aka fast NAT). And if you want to use finer grained NAT rules, you may also want to turn on firewalling (CONFIG_IP_FIREWALL) and CONFIG_IP_ROUTE_FWMARK. To actually operate these kernel features, you will need the "ip" program by Alexey Kuznyetsov from ftp://ftp.inr.ac.ru/ip-routing/. Incoming datagrams NAT Now, to translate addresses of incoming datagrams, the following command is used:
This will make an incoming packet destined to "ext-addr" (the address visible from outside Internet) to have its destination address field rewritten to "int-addr" (the address in your internal network, behind your gateway/firewall). The packet is then routed according to the local routing table. You can translate either single host addresses or complete blocks. Examples:
First command will make internal address 192.168.0.2 accessible as 195.113.148.34. The second example shows remapping block 192.168.0.0-31 to 195.113.148.32-63. Was this section helpful? Why not Donate $2.50? Chapter 10. Kernel 2.2 IP Command Reference (Work In Progress)10.1. ipIf you have the iproute2 tools installed, then executing the ip command will allow the basic syntax to be displayed.
There are also several options available: -V, -Version -- print the version of the ip utility you are using and exit. -s, -stats, -statistics -- obtain more output on the speficied device. You can issue this option more than once to increase the amount of information being displayed. -f, -family followed by a protocol family identifier such as: inet, inet6 or link. -- Specify the exact protocol family to use. Inet uses the standard IPv4 (e.g.; current Internet standard), inet6 uses IPv6 (ground breadking, never to be implemented Internet standard), and link (a physical link). If you do not present the option, the protocol family is guessed. If not enough information is present, it will fallback to the default setting. -o, -oneline Show the output each device record in a single line. -r, -resolve Use the system resolver (e.g.; DNS) to print actual names (versus IP numbers). OBJECT Is the object (device) that you can retrieve information from, and/or you can also manage the device. The current device types understood by the current implementation are:
The amount of possible options allowed on each object type depend on the type of action being taken. As a basic rule, it is possible to add, delete, or to show the object(s). Not all object will allow additional commands to be used. Of course, command help is available for all objects. When help is used, it will print out a list of available sytanx conventions for the given object. If you do not give a command, the default command will be assumed. Typically the default command is to list the objects.If the the objects can not be listed, the default will provide standard help output. ARGUMENTS is the list of arguments that can be passed to the command. The number of arguments depends upon both the command and the object being used. There are two types of arguments: Flags consist of a keyword followed by a value. For convenience, each command contains some default parameters that can be left out for easier use. For example, the parameter dev> defaults to an ip link. Mistakes... thank God for smart coders! All the operations within the ip commands are dynamic. If the sytanx of the ip utility fails, it will not change the configuration of the system. There is an exception to this rule: the ip link command. This command is used to change part of a devices parameters. It is difficult to list all the error messages (especially the syntax errors). Generally speaking, their meaning is clear in the context of the commands. The most common mistakes are: 1. Netlink is not configured in the kernel. The message is: Cannot open netlink socket: Invalid value 2. RTNETLINK is not configured in the kernel. One of the following messages may be printed (depending upon the command): Cannot talk to rtnetlink: Connection refused Cannot send dump request: Connection refused 3. Option CONFIG_IP_MULTIPLE_TABLES was not selected when configuring kernel. In this case, any attempt to use commandip rule will fail. For example: jd@home $ ip rule list RTNETLINK error: Invalid argument dump terminated Was this section helpful? Why not Donate $2.50? Chapter 11. Using common PC hardware11.1. ISDNThe Integrated Services Digital Network (ISDN) is a series of standards that specify a general purpose switched digital data network. An ISDN `call' creates a synchronous Point-to-Point data service to the destination. ISDN is generally delivered on a high speed link that is broken down into a number of discrete channels. There are two different types of channels, the `B Channels' (which will actually carry the user data) and a single channel called the `D channel' (which is used to send control information to the ISDN exchange: used for establishing calls and other functions). In Australia, for example, ISDN may be delivered on a 2Mbps link that is broken into 30 discrete 64kbps B channels (with one 64kbps D channel). Any number of channels may be used at a time, and these channels can be used in any combination. You could, for example, establish 30 separate calls to 30 different destinations at 64kbps each. You could also establish 15 calls to 15 different destinations at 128kbps each (two channels used per call). Finally, you could establish just a small number of calls while leaving the rest idle. A channel may be used for either incoming or outgoing calls. The original intention of ISDN was to allow Telecommunications companies to provide a single data service. This service could deliver either telephone (via digitised voice) or data services to your home or business. In this case, the customer would not be required to make any special configuration changes. There are a few different ways to connect your computer to an ISDN service. One way is to use a device called a `Terminal Adaptor' .This adaptor plugs into the Network Terminating Unit (that you telecommunications carrier will have installed when you received your ISDN service), and it presents a number of serial interfaces. One of those interfaces is used to enter commands. Some commands are used to establish calls and configuration, while others are actually connected to the network devices that are to use the data circuits (when they are established). Linux will work in this sort of configuration without modification: you just treat the port on the Terminal Adaptor like you would treat any other serial device. The kernel ISDN support is also designed to allow the user to install an ISDN card into the Linux machine. This allows the Linux software to handle the protocols, and the software can make the calls itself. Kernel Compile Options:
The Linux implementation of ISDN supports a number of different types of internal ISDN cards. These are listed in the kernel configuration options:
Some of these cards require software to be downloaded to make them operational. A separate utility exists to allow downloading to happen. Full details on how to configure the Linux ISDN support is available from the /usr/src/linux/Documentation/isdn/ directory. You can also check the FAQ dedicated to isdn4linux: it is available at www.lrz-muenchen.de. (You can click on the english flag to get an english version). A note about PPP. The PPP suite of protocols will operate over either asynchronous or synchronous serial lines. The commonly distributed PPP daemon for Linux `pppd' supports only asynchronous mode. If you wish to run the PPP protocols over your ISDN service, you need a specially modified version. Details of where to find this version are available in the documentation referred to above. Was this section helpful? Why not Donate $2.50? 11.2. PLIP for Linux-2.0PLIP device names are `plip0', `plip1 and plip2. Kernel Compile Options:
PLIP (Parallel Line IP) is similar to SLIP in that it is used for providing a Point-to-Point network connection between two machines. However, it is designed to use the parallel printer ports on your machine. It doesn't use the serial ports (a cabling diagram in included in the cabling diagram section later in this document). Because it is possible to transfer more than one bit at a time with a parallel port, it is possible to attain higher speeds with the PLIP interface. PLIP will attain higher speeds than those achieved by using a standard serial device. In addition, even the simplest of parallel printer ports can be used (in lieu of you having to purchase comparatively expensive 16550AFN UART's for your serial ports). PLIP uses a lot of CPU compared to a serial link. It is not a good option if, for example, you are able to obtain some cheap ethernet cards. However, it will work when nothing else is available (and will work quite well). You should expect a data transfer rate of about 20 kilobytes per second (when a link is running well). The PLIP device driver competes with the parallel device driver for the parallel port hardware. If you wish to use both drivers, then you should compile them both as modules. This ensures that you are able to select which port you want to use for PLIP, and that you can select which ports you want for the printer driver. Refer to the ``Modules mini-HOWTO'' for more information on kernel module configuration. Please note that some laptops use chipsets that will not work with PLIP. These chipsets do not allow some combinations of signals. PLIP relies on these signals, but printers don't use them. The Linux PLIP interface is compatible with the Crynwyr Packet Driver PLIP/ .This will mean that you can connect your Linux machine to a DOS machine running any other sort of tcp/ip software via PLIIP. In the 2.0.* series kernel, the PLIP devices are mapped to i/o port and IRQ as follows:
If your parallel ports don't match any of the above combinations, then you can change the IRQ of a port. Change the IRQ by using the ifconfig command with the `irq' parameter (be sure to enable IRQ's on your printer ports in your ROM BIOS if it supports this option). As an alternative, you can specify ``io='' and ``irq='' options on the insmod command line (if you use modules). For example:
PLIP operation is controlled by two timeouts: their default values are probably ok in most cases. You will more than likely need to increase them if you have an especially slow computer. In this case the timers to increase are actually on the other computer. A program called plipconfig exists that allows you to change these timer settings without recompiling your kernel. This program is supplied with many Linux distributions. To configure a PLIP interface, you will need to invoke the following commands (or add them to your initialization scripts):
Here, the port being used is the one at I/O address 0x378; localplip amd remoteplip are the names or IP addresses used over the PLIP cable. I personally keep them in my /etc/hosts database:
The pointopoint parameter has the same meaning as for SLIP. It specifies the address of the machine at the other end of the link. In almost all respects, you can treat a PLIP interface as though it were a SLIP interface. However, neither dip nor slattach can be used. Further information on PLIP may be obtained from the ``PLIP mini-HOWTO''. 11.2.1. PLIP for Linux-2.2During development of the 2.1 kernel versions, support for the parallel port was changed to an improved setup. Kernel Compile Options:
The new code for PLIP behaves like the old one. You can use the same ifconfig and route commands as in the previous section. However, initialization of the device is different due to the advanced parallel port support. The ``first'' PLIP device is always called ``plip0'' (where first is the first device detected by the system; similarly to what happens for Ethernet devices). The actual parallel port being used is one of the available ports, as shown in /proc/parport. For example, if you have only one parallel port, you'll only have a directory called /proc/parport/0. If your kernel didn't detect the IRQ number used by your port, ``insmod plip'' will fail. In this case just write the correct number to /proc/parport/0/irq,then reinvoke insmod. Complete information about parallel port management is available in the file Documentation/parport.txt(part of your kernel sources). 11.3. PPPDue to the nature, size, complexity, and flexibility of PPP, it has been moved to its own HOWTO. The PPP-HOWTO is still a Linux Documentation Project document, but its official home is at the LinuxPorts.Com website PPP section. Was this section helpful? Why not Donate $2.50? 11.4. SLIP client - (Antiquated)SLIP devices are named `sl0', `sl1' etc. The first device configured is assigned `0', and the rest of the devices are incremented sequentially as they are configured. Kernel Compile Options:
SLIP (Serial Line Internet Protocol) allows you to use tcp/ip over a serial line (could be a phone line with a dialup modem, or a leased line of some sort). To use SLIP, you would of course need access to an SLIP-server in your area. Many universities and businesses provide SLIP access all over the world. SLIP uses the serial ports on your machine to carry IP datagrams. To do this, SLIP must take control of the serial device. SLIP device names are named sl0, sl1 etc. How do these correspond to your serial devices? The networking code uses what is called an ioctl (i/o control) call to change the serial devices into SLIP devices. There are two programs supplied that can perform this function: they are called dip and slattach 11.4.1. dipdip (Dialup IP) is a smart program that is able to perform the following tasks: set the speed of the serial device, command your modem to dial the remote end of the link, automatically log you into the remote server, search for messages sent to you by the server, and extract information from them (such as your IP address). It will then perform the ioctl necessary to switch your serial port into SLIP mode. dip has a powerful scripting ability. It's this ability that you can exploit to automate your logon procedure. You can find it at: metalab.unc.edu. Refer to the following for installation guidelines:
The Makefile assumes the existence of a group called uucp. However, you might like to change this to either dip or SLIP (depending on your configuration). 11.4.2. slattachslattach (as contrasted with dip) is a very simple program that does not have the sophistication of dip. It does not have the scripting ability of dip. It will only configure your serial device as a SLIP device. It assumes you have all the information you need, and it figures that you have the serial line established before you invoke it. slattach is ideal to use where you have a permanent connection to your server (such as a physical cable or a leased line). 11.4.3. When do I use which ?You would use dip when your link (to the machine that is your SLIP server) is either a dialup modem or some other temporary link. You would use slattach when you have a leased line, perhaps a cable, between your machine and the server: it is assumed that there is no special action needed to get this link working. See section `Permanen ist Slip connection' for more information. Configuring SLIP is much like configuring an Ethernet interface (read section `Configuring an ethernet device' above). There are a few key differences. First of all, SLIP links are unlike ethernet networks in that there are only two hosts on the network (one at each end of the link). Ethernet is available for use as soon are you are cabled. However, SLIP may require you to initialize your network connection in some special way (depending upon the type of link that you have). If you are using dip, then this would not normally be done at boot time. It could be done at some later time, when you're ready to use the link. It is possible to automate this procedure. If you are using slattach then you will probably want to add a section to your rc.inet1 file. This will soon be addressed in our document.. There are two major types of SLIP servers: Dynamic IP address servers and static IP address servers. Almost every SLIP server will prompt you to login using a username and password: dip can handle logging you in automatically. 11.4.4. Static SLIP server with a dialup line and DIP.A static SLIP server is one in which you have been supplied an IP address that is exclusively yours. Each time you connect to the server, you will configure your SLIP port with that address. The static SLIP server will answer your modem call, possibly prompt you for a username and password, and then route any datagrams destined for your address to you via that connection. If you have a static server, then you may want to put entries for your hostname and IP address (since you know what it will be) into your /etc/hosts. You should also configure some other files such as: rc.inet2, host.conf, resolv.conf, /etc/HOSTNAME and rc.local. Remember that when configuring rc.inet1, you don't need to add any special commands for your SLIP connection (since it is dip that does all of the hard work for you in configuring your interface). You will need to give dip the appropriate information so it can configure the interface for you (after it commands the modem to establish the call and it has logged you into your SLIP server). If this is how your SLIP server works, then you can move on to the section `Using Dip' to learn how to configure dip it appropriately. 11.4.5. Dynamic SLIP server with a dialup line and DIP.A dynamic SLIP server is one which allocates you an IP address randomly (from a pool of addresses) each time you logon. This means that there is no guarantee that you will have any particular address. Address may well be used by someone else after you have logged off. The network administrator who configured the SLIP server will have assigned a pool of address for the SLIP server to use. When the server receives a new incoming call, the following steps occur: initially, it finds the first unused address; second, it guides the caller through the login process; finally, it then prints a welcome message that contains the IP address it has allocated. It will ultimately use that particular IP address for the duration of the call. Configuring for this type of server is similar to configuring for a static server. You must add an extra step, however, where you obtain the IP address the server has allocated to you. Then you can configure your SLIP device with that address. Again, dip does the hard work for you. New versions are smart enough to not only log you in, but they are also able to automatically read the IP address printed in the welcome message. They can then store this address so that you can have your SLIP device configured. If this is how your SLIP server works, then you can move to section `Using Dip' to learn how to configure dip appropriately. 11.4.6. Using DIP.As explained earlier, dip is a powerful program that can simplify and automate these process: dialing into the SLIP server, logging in the user, starting the connection, and configuring the SLIP devices with the appropriate ifconfig and route commands. To use dip, you'll need to write a `dip script'. This script is basically a list of commands that dip understands. These commands tell dip how to perform each of the actions that you require. See sample.dip that comes supplied with dip to get an idea of how it works. dip is quite a powerful program: it comes with many options. Instead of going into all of them here, you should look at the man page, README, and sample files that will have come with your version of dip. You may notice that the sample.dip script assumes that you're using a static SLIP server (so you'll know what your IP address is beforehand). For dynamic SLIP servers, the newer versions of dip include a command you can use to automatically read and configure your SLIP device (with the IP address that the dynamic server allocates for you). The following sample is a modified version of the sample.dip that came supplied with dip337j-uri.tgz. It is probably a good starting point for you. You might like to save it as /etc/dipscript, then you can edit it to suit your configuration:
The above example assumes you are calling a dynamic SLIP server. If you are calling a static SLIP server, then the sample.dip file that comes with dip337j-uri.tgz should work for you. When dip is given the get $local command, it searches the incoming text from the remote end for a string that looks like an IP address (ie strings numbers separated by `.' characters). This modification was put in place specifically for dynamic SLIP servers so that the process of reading the IP address granted by the server could be automated. The example above will automatically create a default route via your SLIP link. If this is not what you want, you might have an ethernet connection that should be your default route. Remove the default command from the script. After this script has finished running (if you do an ifconfig command), you will see that you have a device sl0. This is your SLIP device. You can modify its configuration manually after the dip command has finished by using both the ifconfig and the route commands. Please note that dip allows you to select a number of different protocols to use with the mode command. The most common example is cSLIP: it is used for SLIP with compression. Please note that both ends of the link must agree. You should ensure that whatever you select agrees with your server settings. The above example is fairly robust, and it should cope with most errors. Please refer to the dip man page for more information. Naturally, you could code the script to do such things as redial the server if it doesn't get a connection within a prescribed period of time. You can even try a series of servers (if you have access to more than one). 11.4.7. Permanent SLIP connection using a leased line and slattach.If you have a cable between two machines (or are fortunate enough to have a leased line), or some other permanent serial connection between your machine and second machine, then you don't need to go to all the trouble of using dip to set up your serial link. slattach is a very simple utility that will allow you just enough functionality to configure your connection. Since your connection will be a permanent one, you will want to add some commands to your rc.inet1 file. To get a permanent connection, make sure that you configure the serial device to the correct speed. Then switch the serial device into SLIP mode. slattach allows you to do this with one command. Add the following to your rc.inet1 file:
Where:
slattach allocates the first unallocated SLIP device to the serial device specified. slattach starts with sl0. The first slattach command attaches SLIP device sl0 to the serial device specified; sl1 the next time, etc. slattach allows you to configure a number of different protocols with the -p argument. You will use either SLIP or cSLIP: the choice will depend on whether or not you want to use compression. Note: both ends must agree on compression or no compression. 11.4.8. SLIP server.If you have a machine that is perhaps network connected, and you'd like other people be able to dial in and obtain network services, then you will need to configure your machine as a server. If you want to use SLIP as the serial line protocol, then you have three options as to how to configure your Linux machine (as a SLIP server). My preference would be to use the first presented (sliplogin) because it seems the easiest to configure and understand. I will present a summary of each so that you can make your own decision. 11.4.9. Slip Server using sliplogin.sliplogin is a program that you can use in place of the normal login shell for SLIP users. It converts the terminal line into a SLIP line. It also allows you to configure your Linux machine as either a static address server (users get the same address everytime they call in), or a dynamic address server (where users may get a different address allocated to them each time they call). The caller will login as per the standard login process by entering their username and password. However, instead of being presented with a shell after their login, sliplogin is executed. Sliplogin searches its configuration file (/etc/slip.hosts) for an entry with a login name that matches that of the caller. If it locates a match, it then configures the line as an 8bit clean line. It uses an ioctl call to convert the line discipline to SLIP. When this process is complete, the last stage of configuration takes place. Now sliplogin invokes a shell script which configures the SLIP interface with the relevant ip address and netmask. It will also set appropriate routing in place. This script is usually called /etc/slip.login. In a similar manner to getty (where you have certain callers that require special initialization) you can create configuration scripts called /etc/slip.login.loginname. These scripts will be run instead of the defaults. There are either three or four files that you need to configure to get sliplogin working for you. I will detail where to obtain the software and how to configure in detail. The files are:
11.4.10. Where to get sliploginYou may already have the sliplogin package installed as part of your distribution. If you do not have the package, then you can get sliplogin from: metalab.unc.edu. The tar file contains both source, precompiled binaries and a man page. To ensure that only authorized users will be able to run thesliplogin program, you should add an entry to your /etc/group file similar to the following:
When you install the sliplogin package, the Makefile will change the group ownership of the sliplogin program to slip. This will mean that only users who belong to that group will be able to execute it. The example above will allow only users radio and fred to execute sliplogin. To install the binaries into your /sbin directory, and to place the man page into section 8, perform the following:
If you want to recompile the binaries before installation, add a make clean before the make install. If you want to install the binaries somewhere else, you will need to edit the Makefile install rule. 11.4.11. Configuring /etc/passwd for Slip hosts.You would usually create some special logins for Slip callers in your /etc/passwd file. A convention commonly followed is to use the hostname of the calling host with a capital `S' prefixing it. If the calling host is called radio then you could create a /etc/passwd entry that looked like:
It doesn't really matter what the account is called: just make it meaningful to you! Note: the caller doesn't need any special home directory. They will not be presented with a shell from this machine, so /tmp is a good choice. Also note that sliplogin is used in place of the normal login shell. 11.4.12. Configuring /etc/slip.hostsThe /etc/slip.hosts file is the file that sliplogin searches (it looks for entries matching the login name) to obtain configuration details for this particular caller. It is this file where you specify the ip address and netmask that will be assigned to the caller (configured for their use). Sample entries for two hosts: one a static configuration for host radio, and another is a dynamic configuration for user host albert.They both might look like:
The /etc/slip.hosts file entries are:
Note: You can use either hostnames or IP addresses (in dotted decimal notation) for fields 2 and 3. If you use hostnames, then those hosts must be resolvable. In other words, your machine must be able to locate an IP address for those hostnames. If the machine can't locate an IP address, the script will fail when it is called. You can test this by trying to telnet to the hostname. If you get the `Trying nnn.nnn.nnn...' message, then your machine has been able to find an ip address for that name. If you get the message `Unknown host', then it was unsuccessful. In this case, you can either use ip addresses in dotted decimal notation, or fix up your name resolver configuration (See section Name Resolution). The most common slip modes are:
Naturally these are mutually exclusive. You can use one or the other. For more information on the other options available, refer to the man pages. 11.4.13. Configuring the /etc/slip.login file.After sliplogin has searched the /etc/slip.hosts, and it has found a matching entry, it will then attempt to execute the /etc/slip.login file. It will then configure the SLIP interface with its ip address and netmask. The sample /etc/slip.login file supplied with the sliplogin package looks like this:
You will note that this script simply uses the ifconfig and route commands to configure the SLIP device (with its IP address, remote IP address, and netmask). The script then creates a route for the remote address via the SLIP device. This procedure is the same as you would invoke if you were using the slattach command. Note also the use of Proxy ARP. It ensures that other hosts on the same ethernet as the server machine will know how to reach the dial-in host. The <hw_addr> field should be the hardware address of the ethernet card in the machine. If your server machine isn't on an ethernet network, then you can eliminate this line. 11.4.14. Configuring the /etc/slip.logout file.You want to ensure that the serial device is restored to its normal state when the call drops out (so that future callers will be able to login correctly). This is achieved with the use of the /etc/slip.logout file. It is quite simple in format, and it is called with the same argument as the /etc/slip.login file.
All it does is `down' the interface. This will delete the manual route previously created. It also uses the arp command to delete any proxy arp put in place. You don't need the arp command in the script if your server machine does not have an ethernet port. 11.4.15. Configuring the /etc/slip.tty file.If you are using dynamic ip address allocation, you should have any hosts configured with the DYNAMIC keyword in the /etc/slip.hosts file. You must then configure the /etc/slip.tty file to list what addresses are assigned to what port. You only need this file if you wish your server to dynamically allocate addresses to users. The file is a table that lists both the tty devices that will support dial-in SLIP connections,and the ip address that should be assigned to users who call in on that port. Its format is as follows:
What this table says is that callers that dial in on port /dev/ttyS0 (who have their remote address field in the /etc/slip.hosts file set to DYNAMIC) will be assigned an address of 192.168.0.100. In this way you need only allocate one address per port for all the users who do not require dedicated address. This helps you keep the number of addresses you need down to a minimum. 11.4.16. Slip Server using dip.Let me start by saying that some of the information below came from the dip man pages (where how to run Linux as a SLIP server is briefly documented). Please also beware that the following has been based on the dip337o-uri.tgz package, and it probably will not apply to other versions of dip. dip has an input mode of operation. In this mode, it automatically locates an entry for the user who invoked it, and it then configures the serial line as a SLIP link (according to information it finds in the /etc/diphosts file). This input mode of operation is activated by invoking dip as diplogin. By creating special accounts where diplogin is used as the login shell, you are using dip as a SLIP server. The first thing you will need to do is to make a symbolic link as follows:
You then need to add entries to both your /etc/passwd and your /etc/diphosts files. The entries you need to make are formatted as follows: To configure Linux as a SLIP server with dip, you need to create some special SLIP accounts for users. You will use dip (in input mode) as the login shell. A suggested convention is to have all SLIP accounts begin with a capital `S', eg `Sfredm'. A sample /etc/passwd entry for a SLIP user looks like the following:
After the user logs in, the login program (if it finds and verifies the user) will execute the diplogin command dip. diplogin knows that it should automatically assume that it is being used a login shell. When it is started as diplogin it uses the getuid() function call to get the userid from whoever has invoked it. It then searches the /etc/diphosts file for the first entry that matches either the userid or the name of the tty device from where the call has originated. It then configures itself appropriately. By deciding between giving the user an entry in the diphosts file, or providing her or him the default configuration, you can build your server in such a way that you can have a mix of static and dynamically assigned addressed users. You do not need to worry about manually adding such entries because dip will automatically add a `Proxy-ARP' entry if invoked in input mode. 11.4.17. Configuring /etc/diphosts/etc/diphosts is used by dip to lookup preset configurations for remote hosts. These remote hosts might be users dialing into your linux machine, or they might be for machines that you dial into with your linux machine. The general format for /etc/diphosts is as follows:
The fields are:
An example /etc/net/diphosts entry for a remote SLIP user might be:
which specifies a SLIP link with remote address of 145.71.34.1 and MTU of 296, or:
which specifies a cSLIP-capable link with remote address 145.71.34.1 and MTU of 1006. All users who you wish to be allowed a statically allocated dial-up IP access should have an entry in the /etc/diphosts. If you want users who call a particular port to have their details dynamically allocated, then you must have an entry for the tty device (and do not configure a user based entry). You should remember to configure at least one entry for each tty device that is used. This ensures that a suitable configuration is available for them regardless of which modem they call in on. When a user logs in, they will receive a normal login and password prompt. They should then enter their SLIP-login userid and password. If these verify properly, then the user will see no special messages. The user should then change into SLIP mode at their end. The user should then be able to connect and be configured with the relevant parameters from the diphosts file. 11.4.18. SLIP server using the dSLIP package.Matt Dillon <dillon@apollo.west.oic.com> has written a package that does not only dial-in but also dial-out SLIP. Matt's package is a combination of small programs and scripts that manage your connections for you. You will need to have tcsh installed as at least one of the scripts requires it. Matt supplies a binary copy of the expect utility as it too is needed by one of the scripts. You will most likely need some experience with expect to get this package working to your liking, but don't let that deter your efforts! Matt has written a good set of installation instructions in the README file, so I won't bother to repeat them. You can get the dSLIP package from its home site at: apollo.west.oic.com
or from: metalab.unc.edu
Read the README file and create the /etc/passwd and /etc/group entries before doing a make install. Chapter 12. Other Network TechnologiesThe following subsections are specific to particular network technologies. The information contained in these sections does not necessarily apply to any other type of network technology. The topics are sorted alphabetically. 12.1. ARCNetARCNet device names are `arc0e', `arc1e', `arc2e' etc. or `arc0s', `arc1s', `arc2s' etc. The first card detected by the kernel is assigned either `arc0e' or `arc0s' The rest are assigned sequentially in the order they are detected. The letter at the end signifies either the ethernet encapsulation packet format or the RFC1051 packet format. Kernel Compile Options:
Once you have your kernel properly built to support your ethernet card, then configuring the the card is easy. Typically you would use something like:
Please refer to the /usr/src/linux/Documentation/networking/arcnet.txt and /usr/src/linux/Documentation/networking/arcnet-hardware.txt files for further information. ARCNet support was developed by Avery Pennarun, apenwarr@foxnet.net. Was this section helpful? Why not Donate $2.50? 12.2. Appletalk (AF_APPLETALK)The Appletalk support has no special device names as it uses existing network devices. Kernel Compile Options:
Appletalk support allows your Linux machine to interwork with Apple networks. An important use for this is to share resources (such as printers and disks) between your Linux and Apple computers. Additional software is required; this is called netatalk. Wesley Craig netatalk@umich.edu represents a team called the `Research Systems Unix Group' at the University of Michigan. They have produced the netatalk package. This product provides software that implements the Appletalk protocol stack along with some useful utilities. The netatalk package will either be supplied with your Linux distribution, or you will have to ftp it from the home site at University of Michigan To build and install the package, do something like the following:
You may want to edit the `Makefile' before calling make to actually compile the software. Specifically, you might want to change the DESTDIR variable that defines where the files will later be installed. The default of /usr/local/atalk is fairly safe. 12.2.1. Configuring the Appletalk software.The first thing you need to do to make it all work is to ensure that the appropriate entries in the /etc/services file are present. The entries you need are:
The next step is to create the Appletalk configuration files in the /usr/local/atalk/etc directory (or wherever you installed the package). The first file to create is the /usr/local/atalk/etc/atalkd.conf file. This file initially needs only one line. This line gives the name of the network device supporting the network that your Apple machines are on:
The Appletalk daemon program will add extra details after it has been initiated. 12.2.2. Exporting a Linux filesystems via Appletalk.You can export filesystems from your linux machine to the network so that any Apple machine on the network can share them. To do this you must configure the /usr/local/atalk/etc/AppleVolumes.system file. There is another configuration file called /usr/local/atalk/etc/AppleVolumes.default This file has exactly the same format: it describes which filesystems users connecting with guest privileges will receive. Full details on how to configure these files (and their various options) can be found in the afpd man page. A simple example might look like:
This would export your /tmp filesystem as AppleShare Volume `Scratch', and it would export your ftp public directory as AppleShare Volume `Public Area'. The volume names are not mandatory. The daemon will choose some for you, but it won't hurt to specify them anyway. 12.2.3. Sharing your Linux printer across Appletalk.It is simple to share your linux printer with your Apple machines. You need to run the papd program, the Appletalk Printer Access Protocol Daemon. When you run this program, it will accept requests from your Apple machines and spool the print job to your local line printer daemon. You need to edit the /usr/local/atalk/etc/papd.conf file to configure the daemon. The syntax of this file is the same as that of your usual /etc/printcap file. The name you give to the definition is registered with the Appletalk naming protocol NBP. A sample configuration might look like:
This would make a printer named `TricWriter' available to your Appletalk network. All accepted jobs would be printed to the linux printer `lp' (as defined in the /etc/printcap file) using lpd. The entry `op=cg' says that the linux user `cg' is the operator of the printer. 12.2.4. Starting the appletalk software.Ok.You should now be ready to test this basic configuration. There is an rc.atalk file supplied with the netatalk package that should work ok for you, so all you should have to do is:
All should startup and run ok. You should see no error messages. The software will send messages to the console indicating each stage as it starts. 12.2.5. Testing the appletalk software.To test that the software is functioning properly: go to one of your Apple machines, pull down the Apple menu, select the Chooser, click on AppleShare, and your Linux box should appear. 12.2.6. Caveats of the appletalk software.
12.2.7. More informationFor a much more detailed description of how to configure Appletalk for Linux, refer to Anders Brownworth Linux Netatalk-HOWTO page at thehamptons.com. 12.3. ATMWerner Almesberger <werner.almesberger@lrc.di.epfl.ch> is managing a project to provide Asynchronous Transfer Mode support for Linux. Current information on the status of the project may be obtained from: lrcwww.epfl.ch. Was this section helpful? Why not Donate $2.50? 12.4. AX25 (AF_AX25)AX.25 device names are `sl0', `sl1', etc. in 2.0.* kernels or `ax0', `ax1', etc. in 2.1.* kernels. Kernel Compile Options:
The AX25, Netrom and Rose protocols are covered by the AX25-HOWTO. These protocols are used by Amateur Radio Operators world wide in packet radio experimentation. Most of the work for implementation of these protocols has been done by Jonathon Naylor: jsn@cs.nott.ac.uk. Was this section helpful? Why not Donate $2.50? 12.5. DECNetSupport for DECNet is currently a work in progress. You should expect it to appear in a late 2.1.* kernel. Was this section helpful? Why not Donate $2.50? 12.6. FDDIFDDI device names are `fddi0', `fddi1', `fddi2' etc. The first card detected by the kernel is assigned `fddi0' : the rest are assigned sequentially in the order that they are detected. Larry Stefani, lstefani@ultranet.com, has developed a driver for the Digital Equipment Corporation FDDI EISA and PCI cards. Kernel Compile Options:
When you have your kernel built and installed to support the FDDI driver, configuration of the FDDI interface is almost identical to that of an ethernet interface. You just specify the appropriate FDDI interface name in the ifconfig and route commands. Was this section helpful? Why not Donate $2.50? 12.7. Frame RelayThe Frame Relay device names are `dlci00', `dlci01' etc for the DLCI encapsulation devices, and `sdla0', `sdla1' etc for the FRAD(s). Frame Relay is a new networking technology that is designed to suit data communications traffic that is of a `bursty' or intermittent nature. You connect to a Frame Relay network using a Frame Relay Access Device (FRAD). The Linux Frame Relay supports IP over Frame Relay as described in RFC-1490. Kernel Compile Options:
Mike McLagan, mike.mclagan@linux.org, developed the Frame Relay support and configuration tools. Currently the only FRAD I know of that are supported are Sangoma Technologies S502A, S502E , S508, and the Emerging Technologies. The Emerging Technologies website is found at: here. I would like to make a point at this juncture. I have personal experience with Emerging Technologies, and I do not recommend them. I found thier staff to be very unprofessional and extremely rude. If anyone else has been fortunate enough to have a good experience with them, I would like to know. I will say this for Emerging Technologies: their product is flexible, and it and appears to be stable. To configure the FRAD and DLCI devices (after you have rebuilt your kernel), you will need the Frame Relay configuration tools. These are available from ftp.invlogic.com. Compiling and installing the tools is straightforward, but the lack of a top level Makefile makes it a fairly manual process:
Note that the previous commands use sh syntax. If you use a csh flavour instead (like tcsh), the for loop will look different. After installing the tools, you need to create an /etc/frad/router.conf file. You can use this template (which is a modified version of one of the example files):
After you've built your /etc/frad/router.conf file, the only step remaining is to configure the actual devices. This is only a little trickier than a normal network device configuration. Remember to bring up the FRAD device before the DLCI encapsulation devices. These commands are best hosted in a shell script because of their number:
12.8. IPX (AF_IPX)The IPX protocol is most commonly utilized in Novell NetWare(tm) local area network environments. Linux includes support for this protocol, and it may be configured to act as a network endpoint (or, as a router for IPX). Kernel Compile Options:
The IPX protocol and the NCPFS are covered in greater depth in the IPX-HOWTO. Was this section helpful? Why not Donate $2.50? 12.9. NetRom (AF_NETROM)NetRom device names are `nr0', `nr1', etc. Kernel Compile Options:
The AX25, Netrom and Rose protocols are covered by the AX25-HOWTO. These protocols are used by Amateur Radio Operators world wide in packet radio experimentation. Most of the work for implementation of these protocols has been done by Jonathon Naylor, jsn@cs.nott.ac.uk. Was this section helpful? Why not Donate $2.50? 12.10. Rose protocol (AF_ROSE)Rose device names are `rs0', `rs1', etc. in 2.1.* kernels. Rose is available in the 2.1.* kernels. Kernel Compile Options:
The AX25, Netrom and Rose protocols are covered by the AX25-HOWTO. These protocols are used by Amateur Radio Operators world wide in packet radio experimentation. Most of the work for implementation of these protocols has been done by Jonathon Naylor: jsn@cs.nott.ac.uk. Was this section helpful? Why not Donate $2.50? 12.11. SAMBA - `NetBEUI', `NetBios', `CIFS' support.SAMBA is an implementation of the Session Management Block protocol. Samba allows Microsoft and other systems to mount and use your disks and printers. SAMBA and its configuration are covered in detail in the SMB-HOWTO. Was this section helpful? Why not Donate $2.50? 12.12. STRIP support (Starmode Radio IP)STRIP device names are `st0', `st1', etc. Kernel Compile Options:
STRIP is a protocol designed (specifically for a range of Metricom radio modems) for a research project being conducted by Stanford University called the MosquitoNet Project. There is a lot of interesting reading here (even if you aren't directly interested in the project). The Metricom radios connect to a serial port, employ spread spectrum technology and are typically capable of about 100kbps. Information on the Metricom radios is available from: Metricom Web Server. The standard network tools and utilities currently do not support the STRIP driver. You will have to download some customized tools from the MosquitoNet web server. Details on what software you need is available at: MosquitoNet STRIP Page. A summary of the configuration is that you use a modified slattach program to set the line discipline of a serial tty device to STRIP. Configure the resulting `st[0-9]' device as you would for ethernet with one important exception: for technical reasons, STRIP does not support the ARP protocol, so you must manually configure the ARP entries for each of the hosts on your subnet. This shouldn't prove too onerous! Was this section helpful? Why not Donate $2.50? 12.13. Token RingToken ring device names are `tr0', `tr1' etc. Token Ring is an IBM standard LAN protocol that avoids collisions by providing a mechanism that allows only one station on the LAN the right to transmit at a time. A `token' is held by one station. This station is the only one allowed to transmit. When it has transmitted its data, it then passes the token onto the next station. The token loops amongst all active stations; hence the name `Token Ring'. Kernel Compile Options:
Configuration of token ring is identical to that of ethernet except for configuring the network device name. Was this section helpful? Why not Donate $2.50? 12.14. X.25X.25 is a circuit based packet switching protocol defined by the C.C.I.T.T. (a standards body recognized by Telecommunications companies in most parts of the world). Implementations of X.25 and LAPB are currently being worked on, and recent 2.1.* kernels include the work in progress. Jonathon Naylor jsn@cs.nott.ac.uk is leading the development. A mailing list has been established to discuss Linux X.25 related matters. If you'd like to subscribe, send a message to: majordomo@vger.rutgers.edu. Be sure to include the text "subscribe linux-x25" in the body of the message. Early versions of the configuration tools may be obtained from Jonathon's ftp site at :ftp.cs.nott.ac.uk. 12.15. WaveLan CardWavelan device names are `eth0', `eth1', etc. Kernel Compile Options:
The WaveLAN card is a spread spectrum wireless lan card. The card looks very much like an ethernet card, and it is configured in much the same manner. You can get information on the Wavelan card from Wavelan.com. Was this section helpful? Why not Donate $2.50? Chapter 13. Cables and CablingThose of you handy with a soldering iron may want to build your own cables to interconnect two linux machines. The following cabling diagrams should assist you with your little project. 13.1. Serial NULL Modem cableNot all NULL modem cables are alike. Many null modem cables do little more than trick your computer into thinking all the appropriate signals are present (and then swap transmit and receive data). This is ok, but it means that you must use software flow control (XON/XOFF) that is less efficient than hardware flow control. The following cable provides the best possible signalling between machines, and it allows you to use hardware (RTS/CTS) flow control.
13.2. Parallel port cable (PLIP cable)If you intend to use the PLIP protocol between two machines, then this cable will work for you (irrespective of what sort of parallel ports you have installed).
Notes:
While you may be able to run PLIP cables for long distances, you should avoid it if you can. The specifications for the cable allow for a cable length of about 1 meter or so. Please be very careful when running long PLIP cables as sources of strong electromagnetic fields (such as lightning, power lines, and radio transmitters) can interfere with and sometimes even damage your controller. If you really want to connect two of your computers over a large distance, then you really should be looking at obtaining a pair of thin-net ethernet cards (and running some coaxial cable). Was this section helpful? Why not Donate $2.50? 13.3. 10base2 (thin coax) Ethernet Cabling10base2 is an ethernet cabling standard that specifies the use of 50 ohm coaxial cable that has a diameter of about 5 millimeters. There are a couple of important rules to remember when interconnecting machines with 10base2 cabling. The first is that you must use terminators at both ends of the cabling. A terminator is a 50 ohm resistor that helps to ensure that the signal is absorbed (and not reflected) when it reaches the end of the cable. Without a terminator at each end of the cabling, you may find that the ethernet is unreliable (or doesn't work). Normally you'd use `T pieces' to interconnect the machines. You would end up with something that looks like this:
The `|' at either end represents a terminator, the `======' represents a length of coaxial cable with BNC plugs at either end, and the `T' represents a `T piece' connector. You should keep the length of cable between the `T piece' and the actual ethernet card in the PC as short as possible. The `T piece' will ideally be plugged directly into the ethernet card. Was this section helpful? Why not Donate $2.50? 13.4. Twisted Pair Ethernet CableIf you have only two twisted pair ethernet cards (and you wish to connect them), you do not require a hub. You can cable the two cards directly together. A diagram showing how to do this is included in the Ethernet-HOWTO Was this section helpful? Why not Donate $2.50? Chapter 14. Glossary of Terms used in this document.The following is a list of some of the most important terms used in this document.
Chapter 16. Copyright.Copyright Information The NET-3/4-HOWTO,NET-3, and Networking-HOWTO, information on how to install and configure networking support for Linux. Copyright (c) 1997 Terry Dawson, 1998 Alessandro Rubini, 1999 & 2000 Joshua D. Drake {POET}/CommandPrompt, Inc. - http://www.linuxports.com/ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the: Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |