Annotation of embedaddon/bird/doc/bird-1.html, revision 1.1.1.1

1.1       misho       1: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
                      2: <HTML>
                      3: <HEAD>
                      4:  <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 1.0.9">
                      5:  <TITLE>BIRD User's Guide: Introduction</TITLE>
                      6:  <LINK HREF="bird-2.html" REL=next>
                      7: 
                      8:  <LINK HREF="bird.html#toc1" REL=contents>
                      9: </HEAD>
                     10: <BODY>
                     11: <A HREF="bird-2.html">Next</A>
                     12: Previous
                     13: <A HREF="bird.html#toc1">Contents</A>
                     14: <HR>
                     15: <H2><A NAME="intro"></A> <A NAME="s1">1.</A> <A HREF="bird.html#toc1">Introduction</A></H2>
                     16: 
                     17: <H2><A NAME="what-is-bird"></A> <A NAME="ss1.1">1.1</A> <A HREF="bird.html#toc1.1">What is BIRD</A>
                     18: </H2>
                     19: 
                     20: <P>The name `BIRD' is actually an acronym standing for `BIRD Internet Routing
                     21: Daemon'. Let's take a closer look at the meaning of the name:
                     22: <P>
                     23: <P><EM>BIRD</EM>: Well, we think we have already explained that. It's an acronym
                     24: standing for `BIRD Internet Routing Daemon', you remember, don't you? :-)
                     25: <P>
                     26: <P><EM>Internet Routing</EM>: It's a program (well, a daemon, as you are going to
                     27: discover in a moment) which works as a dynamic router in an Internet type
                     28: network (that is, in a network running either the IPv4 or the IPv6 protocol).
                     29: Routers are devices which forward packets between interconnected networks in
                     30: order to allow hosts not connected directly to the same local area network to
                     31: communicate with each other. They also communicate with the other routers in the
                     32: Internet to discover the topology of the network which allows them to find
                     33: optimal (in terms of some metric) rules for forwarding of packets (which are
                     34: called routing tables) and to adapt themselves to the changing conditions such
                     35: as outages of network links, building of new connections and so on. Most of
                     36: these routers are costly dedicated devices running obscure firmware which is
                     37: hard to configure and not open to any changes (on the other hand, their special
                     38: hardware design allows them to keep up with lots of high-speed network
                     39: interfaces, better than general-purpose computer does). Fortunately, most
                     40: operating systems of the UNIX family allow an ordinary computer to act as a
                     41: router and forward packets belonging to the other hosts, but only according to a
                     42: statically configured table.
                     43: <P>
                     44: <P>A <EM>Routing Daemon</EM> is in UNIX terminology a non-interactive program
                     45: running on background which does the dynamic part of Internet routing, that is
                     46: it communicates with the other routers, calculates routing tables and sends them
                     47: to the OS kernel which does the actual packet forwarding. There already exist
                     48: other such routing daemons: routed (RIP only), GateD (non-free),
                     49: <A HREF="http://www.zebra.org">Zebra</A> and
                     50: <A HREF="http://sourceforge.net/projects/mrt">MRTD</A>,
                     51: but their capabilities are limited and they are relatively hard to configure
                     52: and maintain.
                     53: <P>
                     54: <P>BIRD is an Internet Routing Daemon designed to avoid all of these shortcomings,
                     55: to support all the routing technology used in the today's Internet or planned to
                     56: be used in near future and to have a clean extensible architecture allowing new
                     57: routing protocols to be incorporated easily. Among other features, BIRD
                     58: supports:
                     59: <P>
                     60: <UL>
                     61: <LI>both IPv4 and IPv6 protocols</LI>
                     62: <LI>multiple routing tables</LI>
                     63: <LI>the Border Gateway Protocol (BGPv4)</LI>
                     64: <LI>the Routing Information Protocol (RIPv2)</LI>
                     65: <LI>the Open Shortest Path First protocol (OSPFv2, OSPFv3)</LI>
                     66: <LI>the Router Advertisements for IPv6 hosts</LI>
                     67: <LI>a virtual protocol for exchange of routes between different
                     68: routing tables on a single host</LI>
                     69: <LI>a command-line interface allowing on-line control and inspection
                     70: of status of the daemon</LI>
                     71: <LI>soft reconfiguration (no need to use complex online commands to
                     72: change the configuration, just edit the configuration file and
                     73: notify BIRD to re-read it and it will smoothly switch itself to
                     74: the new configuration, not disturbing routing protocols unless
                     75: they are affected by the configuration changes)</LI>
                     76: <LI>a powerful language for route filtering</LI>
                     77: </UL>
                     78: <P>
                     79: <P>BIRD has been developed at the Faculty of Math and Physics, Charles
                     80: University, Prague, Czech Republic as a student project. It can be freely
                     81: distributed under the terms of the GNU General Public License.
                     82: <P>
                     83: <P>BIRD has been designed to work on all UNIX-like systems. It has been
                     84: developed and tested under Linux 2.0 to 2.6, and then ported to FreeBSD, NetBSD
                     85: and OpenBSD, porting to other systems (even non-UNIX ones) should be relatively
                     86: easy due to its highly modular architecture.
                     87: <P>
                     88: <P>BIRD supports either IPv4 or IPv6 protocol, but have to be compiled separately
                     89: for each one. Therefore, a dualstack router would run two instances of BIRD (one
                     90: for IPv4 and one for IPv6), with completely separate setups (configuration
                     91: files, tools ...).
                     92: <P>
                     93: <P>
                     94: <H2><A NAME="install"></A> <A NAME="ss1.2">1.2</A> <A HREF="bird.html#toc1.2">Installing BIRD</A>
                     95: </H2>
                     96: 
                     97: <P>On a recent UNIX system with GNU development tools (GCC, binutils, m4, make)
                     98: and Perl, installing BIRD should be as easy as:
                     99: <P>
                    100: <HR>
                    101: <PRE>
                    102:         ./configure
                    103:         make
                    104:         make install
                    105:         vi /usr/local/etc/bird.conf
                    106:         bird
                    107: </PRE>
                    108: <HR>
                    109: <P>
                    110: <P>You can use <CODE>./configure --help</CODE> to get a list of configure
                    111: options. The most important ones are: <CODE>--enable-ipv6</CODE> which enables building
                    112: of an IPv6 version of BIRD, <CODE>--with-protocols=</CODE> to produce a slightly smaller
                    113: BIRD executable by configuring out routing protocols you don't use, and
                    114: <CODE>--prefix=</CODE> to install BIRD to a place different from <CODE>/usr/local</CODE>.
                    115: <P>
                    116: <P>
                    117: <H2><A NAME="argv"></A> <A NAME="ss1.3">1.3</A> <A HREF="bird.html#toc1.3">Running BIRD</A>
                    118: </H2>
                    119: 
                    120: <P>You can pass several command-line options to bird:
                    121: <P>
                    122: <DL>
                    123: <DT><CODE>
                    124: <A NAME="argv-config"></A> -c <I>config name</I></CODE><DD><P>use given configuration file instead of <I>prefix</I><CODE>/etc/bird.conf</CODE>.
                    125: <P>
                    126: <DT><CODE>
                    127: <A NAME="argv-debug"></A> -d</CODE><DD><P>enable debug messages and run bird in foreground.
                    128: <P>
                    129: <DT><CODE>
                    130: <A NAME="argv-log-file"></A> -D <I>filename of debug log</I></CODE><DD><P>log debugging information to given file instead of stderr.
                    131: <P>
                    132: <DT><CODE>
                    133: <A NAME="argv-foreground"></A> -f</CODE><DD><P>run bird in foreground.
                    134: <P>
                    135: <DT><CODE>
                    136: <A NAME="argv-group"></A> -g <I>group</I></CODE><DD><P>use that group ID, see the next section for details.
                    137: <P>
                    138: <DT><CODE>
                    139: <A NAME="argv-help"></A> -h, --help</CODE><DD><P>display command-line options to bird.
                    140: <P>
                    141: <DT><CODE>
                    142: <A NAME="argv-local"></A> -l</CODE><DD><P>look for a configuration file and a communication socket in the current
                    143: working directory instead of in default system locations. However, paths
                    144: specified by options <CODE>-c</CODE>, <CODE>-s</CODE> have higher priority.
                    145: <P>
                    146: <DT><CODE>
                    147: <A NAME="argv-parse"></A> -p</CODE><DD><P>just parse the config file and exit. Return value is zero if the config
                    148: file is valid, nonzero if there are some errors.
                    149: <P>
                    150: <DT><CODE>
                    151: <A NAME="argv-pid"></A> -P <I>name of PID file</I></CODE><DD><P>create a PID file with given filename.
                    152: <P>
                    153: <DT><CODE>
                    154: <A NAME="argv-recovery"></A> -R</CODE><DD><P>apply graceful restart recovery after start.
                    155: <P>
                    156: <DT><CODE>
                    157: <A NAME="argv-socket"></A> -s <I>name of communication socket</I></CODE><DD><P>use given filename for a socket for communications with the client,
                    158: default is <I>prefix</I><CODE>/var/run/bird.ctl</CODE>.
                    159: <P>
                    160: <DT><CODE>
                    161: <A NAME="argv-user"></A> -u <I>user</I></CODE><DD><P>drop privileges and use that user ID, see the next section for details.
                    162: <P>
                    163: <DT><CODE>
                    164: <A NAME="argv-version"></A> --version</CODE><DD><P>display bird version.
                    165: </DL>
                    166: <P>
                    167: <P>BIRD writes messages about its work to log files or syslog (according to config).
                    168: <P>
                    169: <P>
                    170: <H2><A NAME="privileges"></A> <A NAME="ss1.4">1.4</A> <A HREF="bird.html#toc1.4">Privileges</A>
                    171: </H2>
                    172: 
                    173: <P>BIRD, as a routing daemon, uses several privileged operations (like setting
                    174: routing table and using raw sockets). Traditionally, BIRD is executed and runs
                    175: with root privileges, which may be prone to security problems. The recommended
                    176: way is to use a privilege restriction (options <CODE>-u</CODE>, <CODE>-g</CODE>). In that case
                    177: BIRD is executed with root privileges, but it changes its user and group ID to
                    178: an unprivileged ones, while using Linux capabilities to retain just required
                    179: privileges (capabilities CAP_NET_*). Note that the control socket is created
                    180: before the privileges are dropped, but the config file is read after that. The
                    181: privilege restriction is not implemented in BSD port of BIRD.
                    182: <P>
                    183: <P>An unprivileged user (as an argument to <CODE>-u</CODE> options) may be the user
                    184: <CODE>nobody</CODE>, but it is suggested to use a new dedicated user account (like
                    185: <CODE>bird</CODE>). The similar considerations apply for the group option, but there is
                    186: one more condition -- the users in the same group can use <CODE>birdc</CODE> to
                    187: control BIRD.
                    188: <P>
                    189: <P>Finally, there is a possibility to use external tools to run BIRD in an
                    190: environment with restricted privileges. This may need some configuration, but it
                    191: is generally easy -- BIRD needs just the standard library, privileges to read
                    192: the config file and create the control socket and the CAP_NET_* capabilities.
                    193: <P>
                    194: <P>
                    195: <HR>
                    196: <A HREF="bird-2.html">Next</A>
                    197: Previous
                    198: <A HREF="bird.html#toc1">Contents</A>
                    199: </BODY>
                    200: </HTML>

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>