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>