Annotation of embedaddon/bird/doc/bird-1.html, revision 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>