Ethernetting Linux
Many people who install Linux on a machine at their workplace or university also wish to connect their machine to the local area network, so that they can make use of an Internet connection or other machines on the network. If you are one of these people and the only thing that has been stopping you is not knowing where to start, I hope this article will demonstrate that it is easy to do so-as long as you are properly prepared and know what things to watch out for.
The following are a few key areas to consider when connecting your Linux machine to a network:
The type of network you are connecting to.
The type of network interface card (NIC) you will need.
Configuring the kernel to support the network interface card.
Addresses-Host, network, broadcast and router.
Configuring Linux for your network connection.
Routing.
Names and nameservers.
The type of network you are connecting to is very important for a number of reasons. Most important is the many different network types. Currently Linux provides good support for Ethernet networks, but not much support for other network types such as ARCNet, Token Ring, FDDI and wireless LANs. If you intend to use an Ethernet network, keep reading. If not, don't despair—some very promising development efforts are under way to provide support for the other types of networks.
If you are fortunate enough to have an Ethernet network to connect to, then you still have to determine what type of cabling has been installed. Two popular types of cabling are employed, and you will need to find out which has been installed so you can choose an appropriate type of network interface card. The most popular cabling types are 10base2, commonly called “ThinNet”, which uses 5mm diameter coaxial cable and BNC (bayonet type) connectors, and 10baseT, commonly called “twisted pair” or “unshielded twisted pair”, which uses a cable with four conductors and an RJ-45 (telephone type) connector. The type of cabling will help determine what type of network interface card to choose for your Linux machine.
Your network interface card needs to have a connector that suits the cabling type you have installed. A number of modern cards come with both types of connector, and these are generally called “combo” cards. You should also think about whether you want a card suitable for an 8 bit slot or a 16 bit slot. The 16 bit cards perform better but are generally slightly more expensive. Another factor to consider is the bus type. If you are using a PCI machine, naturally you will need a NIC that suits a PCI bus. Be careful: you must also ensure that the type of card you choose is supported by a Linux kernel driver. It is best to avoid “clone” cards. While Linux supports some clones of popular cards, not all clones are the same. To be sure there are no problems, obtain the genuine article or try the card before you buy it. The Ethernet-HOWTO lists the types of cards supported by Linux and contains descriptions of each of them. You should refer to it before spending any money on a card.
The HOWTO recommends you opt for a 16 bit card such as the 3Com 3c503/16 or the SMC Elite 16/WD8013. Other cards which you might consider if you have a Vesa Local Bus or PCI motherboard are the BOCA Research cards. You might also choose an NE2000, but be careful, since some cards that claim 100% compatibility are not 100% compatible. (Their claims are based on being “100% software compatible”, meaning that they provide drivers for DOS that allow, for example, NetWare access. These drivers are useless with Linux.)
Cards to avoid are the 3Com 3c501 card (it performs badly and is broken by design) and Cabletron and Xircom cards, since free Linux drivers are unlikely ever to be available for their products, because these companies have chosen to require a non-disclosure agreement before releasing programming information, which would make it illegal to write a freely distributable Linux driver.
When installing the NIC you must make sure that the card's configuration does not clash with any other installed hardware. Some cards come with a DOS program to configure them. They use a programmable interface, and you should run this to “strap” the card with the configuration you want. You should be particularly careful of the IRQ, control port address and shared memory address settings. Each of these must be free for your NIC to use and be unused by any other hardware in the computer. I use a WD8003 strapped for control port 0x280, IRQ 7 and Shared Memory 0xD0000. Be careful if you use specialized hardware such as SCSI controllers or Multiport Serial cards, as they often use IRQ or Control Port settings in similar ranges, and may conflict. After you have physically installed the NIC, your next step is to check if your kernel already has support for your card. If it doesn't, recompile it so that it does. The easiest way to check if your kernel already supports your card is to reboot your machine. Check that the card is properly detected by the kernel by reading the messages the kernel prints when it is booting. If your card is properly detected, the kernel will print a message something like:
eth0: WD80x3 at 0x280, 00 00 C0 AD 37 1C WD8003, IRQ 7, shared memory at 0xd0000-0xd1fff. wd.c:v1.10 9/23/94 Donald Becker (becker@cesdis.gsfc.nasa.gov)
The settings listed should match those that you configured your card for. If your card has not been properly detected, rebuild your kernel to make sure the kernel has support. This is pretty straightforward and you have likely done it before. You simply change to the /usr/src/linux directory and run make config. You will be prompted as to whether to include various drivers. The most important sections for you to answer Yes to are:
Networking Support?
TCP/IP networking?
Network device support?
The driver for your card.
After you have configured the kernel to support all of the hardware you have installed, you do a make dep; make to build the kernel. Don't forget to do a make zlilo so that lilo will run your new kernel when you reboot. If you are happy that all has gone well, then you can reboot your machine and check that your card is properly detected as described earlier. If it isn't, double check that you have done everything correctly and that you have no hardware conflict. If you still have problems, refer to the Ethernet-HOWTO again, as it has lots of information to help guide you through determining what might be the problem.
If you are still with me, you are nearly ready to run. All you need to run are a few commands to start testing your network connection. After you have configured your kernel, you have to configure your Linux machine to suit your network. At this point you need worry about IP addresses. If you are lucky, you will have a network administrator who will have assigned you an IP address and told you the network and broadcast addresses to use. If not, you will have to find out another way. A good way is often to check the configuration of another machine that is already working. The network address is an address that refers to the whole network you are connected to. It is advertised so that people on other networks know how to get to you. Your host IP address is one address that belongs to that network. This must be yours and only yours, or else you will face lots of strange problems, so make sure you don't use a host address someone else is already using. The broadcast address is a special address that allows anyone to send data to everyone on your network. Some special services use this, and it is very important that it be configured to the appropriate value. Another important number you will need is your “netmask”. This is a mechanism that allows your machine to determine which host addresses are local to you (on the same network) and which ones are remote. The following example would be typical of what you would expect to find:
IP address: 202.105.54.56 Network address: 202.105.54.0 Broadcast address: 202.105.54.255 Netmask: 255.255.255.0
Once you have this information, be sure you have the correct software on your Linux machine. You must be particularly careful to ensure that the network tools you have (ifconfig, route) match the version of kernel you use. The NET-2-HOWTO describes where to get these tools and how to install them. If you run the ifconfig program with no command-line arguments, you will see that it lists the device mentioned in the kernel boot messages: “eth0”. This is your Ethernet device. It needs to be configured with the information above, and the ifconfig program is designed to do just that. Use a command line such as:
ifconfig eth0 HOST netmask NETMASK\ broadcast BROADCAST up
So for the above example use the command line:
ifconfig eth0 202.105.54.56\ netmask 255.255.255.0\ broadcast 202.205.54.255 up
If you again run the ifconfig command with no command line arguments, you should see it now has the appropriate values configured.
Once you have your Ethernet device configured, you have one step remaining. As described earlier, the netmask tells your machine which addresses are local and which are remote. If the address is local, your Linux machine can route any datagrams directly to the Ethernet device. If they are remote, datagrams should be sent to the route which supports the link to the rest of the Internet. The router also has an address, so you will need to obtain this from your network administrator. Linux keeps a special table in memory to look up where to send datagrams. This table, called the routing table, is manipulated with the route command. In a simple installation, as you will most likely have, you will need to configure two routes for your Ethernet: one for your local network, and another that tells your Linux machine what to do with datagrams for any remote host. This latter route is called the “default” route.
The route commands are:
route add NETWORK dev eth0 route add default gw ROUTER dev eth0
and for the example listed earlier (assuming the router address is as shown):
route add 202.105.54.0 dev eth0 route add default gw 202.105.54.1 dev eth0
You can use the route -n command to display the contents of the routing table. The -n argument says to show the addresses as numbers and not try to look up their names, because you don't yet have your name resolver configured. To configure your name resolver, you will need to find out the address of the “NameServer” or “DNS” from your network administrator and put this address in your /etc/resolv.conf file in a line that looks like nameserver NNN.NNN.NNN.NNN, where NNN.NNN.NNN.NNN is the IP address of your nameserver.
Now you should be able to telnet to other IP hosts, both local and remote. If you have configured the name resolver of your Linux machine, then you can use their names, otherwise you should use their addresses.
In addition, the Linux Network Administrator's Guide is available from sunsite.unc.edu in the directory /pub/Linux/docs/LDP/, and can be ordered on paper from SSC (the publishers of Linux Journal) and O'Reilly & Associates.
Terry Dawson (terryd@extro.ucc.su.oz.au) has nearly 10 years experience in packet switched data communications, and maintains the NET-2-HOWTO and HAM-HOWTO documents for fun. Terry is keen to see Linux used widely in Amateur Radio applications.