Chapter 12. Network Scripts

Using Red Hat Linux, all network communications occur between interfaces, which are networking devices connected to the system, configured in a particular way, and utilizing at least one protocol to exchange data with other systems. The different types of interfaces that exist are as varied as the devices that support them, such as network interface cards (NICs — commonly called Ethernet cards), wireless networking PC cards, infrared ports, and more.

The configuration files for the various network interfaces and the scripts to make them active and inactive are located in the /etc/sysconfig/network-scripts directory. While the existence of particular interface files can differ from system to system depending on use, the three different types of files that exist in this directory, interface configuration files, interface control scripts, and network function files, work together to enable Red Hat Linux to use the various network devices available.

This chapter will explore the relationship between these files and different options for their use.

Interface Configuration Files

Interface configuration files control the operation of a particular network interface device. As your Red Hat Linux system boots, it uses these files to know what interfaces to bring up automatically and how to configure them to operate correctly. These files are usually named ifcfg-<device>, where <device> refers to the name of the device that the configuration file controls.

Ethernet Interfaces

One of the most common interface files is ifcfg-eth0, which controls the first NIC in a system. In a system with many NICs, you will have multiple ifcfg-eth files, each one with number at the end of the file name. Because each device has its own configuration file, you have a great deal of control over how each interface functions.

A sample ifcfg-eth0 for a system using a fixed IP address looks similar to this:

DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
BROADCAST=10.0.1.255
NETWORK=10.0.1.0
NETMASK=255.255.255.0
IPADDR=10.0.1.27
USERCTL=no

The values required in an interface configuration file can change based on other values. For example, the ifcfg-eth0 file for an interface utilizing DHCP looks quite a bit different, due to the fact that IP information is now provided by the DHCP server:

DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes

Most of the time, you will probably want to use a GUI utility, such as Network Configurator (redhat-config-network) or netconfig to make changes to the various interface configuration files. See the Official Red Hat Linux Customization Guide for instructions on using these tools.

Within each of the interface configuration files, the following values are common:

  • BOOTPROTO=<protocol>, where <protocol> is one of the following:

    • none — No boot-time protocol should be used.

    • bootp — The BOOTP protocol should be used.

    • dhcp — The DHCP protocol should be used.

  • BROADCAST=<address>, where <address> is the broadcast address.

  • DEVICE=<name>, where <name> is the name of the physical device (except dynamically-allocated PPP devices where it is the logical name).

  • IPADDR=<address>, where <address> is the IP address.

  • NETMASK=<mask>, where <mask> is the netmask value.

  • NETWORK=<address>, where <address> is the network address.

  • ONBOOT=<answer>, where <answer> is one of the following:

    • yes — This device should be activated at boot-time.

    • no — This device should not be activated at boot-time.

  • USERCTL=<answer>, where <answer> is one of the following:

    • true — Non-root users are allowed to control this device.

    • false — Non-root users are not allowed to control this device.

Other common interface configuration files that use these options include ifcfg-lo, which controls the IP protocol's local loopback device, ifcfg-irlan0, which arranges settings for the first infrared device, ifcfg-plip0, which controls the first PLIP device, and ifcfg-tr0, used with the first Token Ring device.

A local loopback interface is often used in testing, as well as a variety of applications that require an IP address pointing back to the same system. Any data sent to the loopback device is immediately returned to the host's network layer. The infrared interface allows information between devices, such as a laptop and a printer, to flow over an infrared link, which works in a similar way to an Ethernet device except that it commonly occurs over a peer-to-peer connection. A Parallel Line Interface Protocol (PLIP) connection works much the same way, except that it utilizes a parallel port. Token Ring topologies are not as common on Local Area Networks as they once were, having been eclipsed by Ethernet.

Dialup Interfaces

If you connect to a network, such as the Internet, via PPP dialup connection, you need a configuration file for that interface. You can have multiple PPP interface configuration files for a particular device, such as a modem. A sample ifcfg-ppp0 files looks like this:

DEVICE=ppp0
NAME=test
WVDIALSECT=test
MODEMPORT=/dev/modem
LINESPEED=115200
PAPNAME=test
USERCTL=true
ONBOOT=no
PERSIST=no
DEFROUTE=yes
PEERDNS=yes
DEMAND=no
IDLETIMEOUT=600

This file is created automatically for you when you use RP3 or Kppp to create a dialup account. In addition, any changes to dialup account settings are reflected in these interface configuration files. The Official Red Hat Linux Getting Started Guide contains instructions for using these GUI-based dialup connection tools. You can also create and edit this file manually.

Serial Line Internet Protocol (SLIP) is another dialup interface, although it is less commonly used. SLIP files have interface configuration file names such as ifcfg-sl0.

Among the options not already discussed that may be used in these files:

  • DEFROUTE=<answer>, where <answer> is one of the following:

    • yes — Set this interface as the default route.

    • no — Do not set the interface as the default route.

  • DEMAND=<answer>, where <answer> is one of the following:

    • yes — This interface will allow pppd to initiate a connection when someone attempts to use it.

    • no — A connection must be manually established for this interface.

  • IDLETIMEOUT=<value>, where <value> is number of seconds of idle activity before the interface will disconnect itself.

  • INITSTRING=<string>, where <string> is the init string passed to the modem device. This option is primarily used with SLIP interfaces.

  • LINESPEED=<value>, where <value> is the baud rate of the device. Possible standard values here include 57600, 38400, 19200, and 9600, among others.

  • MODEMPORT=<device>, where <device> is the name of the device (usually a modem) that is used to establish the connection for the interface.

  • MTU=<value>, where <value> is the Maximum Transfer Unit (MTU) setting for the interface. The MTU refers to the largest number of bytes of data a frame can carry, not counting its header and trailer information. In some dialup situations, setting this to a value of 576 will result in fewer dropped packets and slightly improve the throughput for a connection.

  • NAME=<name>, where <name> is the reference to the title given to a collection of dialup connection configurations.

  • PAPNAME=<name>, where <name> is the username given during the Password Authentication Protocol (PAP) exchange that occurs to allow you to connect to a remote system.

  • PEERDNS=<answer>, where <answer> is one of the following:

    • yes — This interface will modify your system's /etc/resolv.conf file entries to use the DNS servers provided by the remote system when a connection is established.

    • no — The /etc/resolv.conf file will not be changed.

  • PERSIST=<answer>, where <answer> is one of the following:

    • yes — This interface should be kept active at all times, even if deactivated after a modem hang up.

    • no — This interface should not be kept active at all times.

  • REMIP=<address>, where <address> is the remote system's IP address. This is usually left unspecified.

  • WVDIALSECT=<name>, where <name> associates this interface with a dialer configuration in /etc/wvdial.conf, which contains the phone number to be dialed and other important information for the interface.

Alias and Clone Files

Two lesser used types of interface configuration files found in /etc/sysconfig/network-scripts are alias and clone files, which include an additional component in the name of the file beyond the interface name.

Alias interface configuration files take names in the format of ifcfg-<if-name>:<alias-value>, and they allow an alias to point to an interface. For example, a ifcfg-eth0:0 file could be configured to specify DEVICE=eth0:0 and a static IP address of 10.0.0.2, serving as an alias of an Ethernet interface already configured to receive its IP information via DHCP in ifcfg-eth0. At that point, the eth0 device is bound to a dynamic IP address, but it can always be referred to on that system via the fixed 10.0.0.2 IP address.

A clone interface configuration file has a name similar to ifcfg-<if-name>-<clone-name>. While an alias file is another way to refer to an existing interface configuration file, a clone file is used to specify additional options when specifying an interface. For example, if you have a standard DHCP Ethernet interface called eth0, it may look similar to this:

DEVICE=eth0
ONBOOT=yes
BOOTPROTO=dhcp

Since USERCTL is not set to yes, users cannot bring this interface up and down. To give users this ability, create a clone called user from ifcfg-eth0 which allows a user to bring up and down the eth0 interface. The resulting name of the clone would be ifcfg-eth0-user and would only need one line:

USERCTL=yes

When a user moves to bring up the eth0 interface with the ifup eth0-user command, the configuration options from ifcfg-eth0 and ifcfg-eth0-user are used together. While this is a very basic example, this method can be used with a variety of options and interfaces.

The easiest way to create alias and clone interface configuration files is to use the GUI-based Network Configurator (redhat-config-network) tool.