Annotation of embedaddon/quagga/doc/ripd.texi, revision 1.1.1.1
1.1 misho 1: @c -*-texinfo-*-
2: @c This is part of the Quagga Manual.
3: @c @value{COPYRIGHT_STR}
4: @c See file quagga.texi for copying conditions.
5: @node RIP
6: @chapter RIP
7:
8: RIP -- Routing Information Protocol is widely deployed interior gateway
9: protocol. RIP was developed in the 1970s at Xerox Labs as part of the
10: XNS routing protocol. RIP is a @dfn{distance-vector} protocol and is
11: based on the @dfn{Bellman-Ford} algorithms. As a distance-vector
12: protocol, RIP router send updates to its neighbors periodically, thus
13: allowing the convergence to a known topology. In each update, the
14: distance to any given network will be broadcasted to its neighboring
15: router.
16:
17: @command{ripd} supports RIP version 2 as described in RFC2453 and RIP
18: version 1 as described in RFC1058.
19:
20: @menu
21: * Starting and Stopping ripd::
22: * RIP Configuration::
23: * RIP Version Control::
24: * How to Announce RIP route::
25: * Filtering RIP Routes::
26: * RIP Metric Manipulation::
27: * RIP distance::
28: * RIP route-map::
29: * RIP Authentication::
30: * RIP Timers::
31: * Show RIP Information::
32: * RIP Debug Commands::
33: @end menu
34:
35: @node Starting and Stopping ripd
36: @section Starting and Stopping ripd
37:
38: The default configuration file name of @command{ripd}'s is
39: @file{ripd.conf}. When invocation @command{ripd} searches directory
40: @value{INSTALL_PREFIX_ETC}. If @file{ripd.conf} is not there next
41: search current directory.
42:
43: RIP uses UDP port 520 to send and receive RIP packets. So the user must have
44: the capability to bind the port, generally this means that the user must
45: have superuser privileges. RIP protocol requires interface information
46: maintained by @command{zebra} daemon. So running @command{zebra}
47: is mandatory to run @command{ripd}. Thus minimum sequence for running
48: RIP is like below:
49:
50: @example
51: @group
52: # zebra -d
53: # ripd -d
54: @end group
55: @end example
56:
57: Please note that @command{zebra} must be invoked before @command{ripd}.
58:
59: To stop @command{ripd}. Please use @command{kill `cat
60: /var/run/ripd.pid`}. Certain signals have special meaningss to @command{ripd}.
61:
62: @table @samp
63: @item SIGHUP
64: Reload configuration file @file{ripd.conf}. All configurations are
65: reseted. All routes learned so far are cleared and removed from routing
66: table.
67: @item SIGUSR1
68: Rotate @command{ripd} logfile.
69: @item SIGINT
70: @itemx SIGTERM
71: @command{ripd} sweeps all installed RIP routes then terminates properly.
72: @end table
73:
74: @command{ripd} invocation options. Common options that can be specified
75: (@pxref{Common Invocation Options}).
76:
77: @table @samp
78: @item -r
79: @itemx --retain
80: When the program terminates, retain routes added by @command{ripd}.
81: @end table
82:
83: @menu
84: * RIP netmask::
85: @end menu
86:
87: @node RIP netmask
88: @subsection RIP netmask
89:
90: The netmask features of @command{ripd} support both version 1 and version 2 of
91: RIP. Version 1 of RIP originally contained no netmask information. In
92: RIP version 1, network classes were originally used to determine the
93: size of the netmask. Class A networks use 8 bits of mask, Class B
94: networks use 16 bits of masks, while Class C networks use 24 bits of
95: mask. Today, the most widely used method of a network mask is assigned
96: to the packet on the basis of the interface that received the packet.
97: Version 2 of RIP supports a variable length subnet mask (VLSM). By
98: extending the subnet mask, the mask can be divided and reused. Each
99: subnet can be used for different purposes such as large to middle size
100: LANs and WAN links. Quagga @command{ripd} does not support the non-sequential
101: netmasks that are included in RIP Version 2.
102:
103: In a case of similar information with the same prefix and metric, the
104: old information will be suppressed. Ripd does not currently support
105: equal cost multipath routing.
106:
107:
108: @node RIP Configuration
109: @section RIP Configuration
110:
111: @deffn Command {router rip} {}
112: The @code{router rip} command is necessary to enable RIP. To disable
113: RIP, use the @code{no router rip} command. RIP must be enabled before
114: carrying out any of the RIP commands.
115: @end deffn
116:
117: @deffn Command {no router rip} {}
118: Disable RIP.
119: @end deffn
120:
121: @deffn {RIP Command} {network @var{network}} {}
122: @deffnx {RIP Command} {no network @var{network}} {}
123: Set the RIP enable interface by @var{network}. The interfaces which
124: have addresses matching with @var{network} are enabled.
125:
126: This group of commands either enables or disables RIP interfaces between
127: certain numbers of a specified network address. For example, if the
128: network for 10.0.0.0/24 is RIP enabled, this would result in all the
129: addresses from 10.0.0.0 to 10.0.0.255 being enabled for RIP. The @code{no
130: network} command will disable RIP for the specified network.
131: @end deffn
132:
133: @deffn {RIP Command} {network @var{ifname}} {}
134: @deffnx {RIP Command} {no network @var{ifname}} {}
135: Set a RIP enabled interface by @var{ifname}. Both the sending and
136: receiving of RIP packets will be enabled on the port specified in the
137: @code{network ifname} command. The @code{no network ifname} command will disable
138: RIP on the specified interface.
139: @end deffn
140:
141: @deffn {RIP Command} {neighbor @var{a.b.c.d}} {}
142: @deffnx {RIP Command} {no neighbor @var{a.b.c.d}} {}
143: Specify RIP neighbor. When a neighbor doesn't understand multicast,
144: this command is used to specify neighbors. In some cases, not all
145: routers will be able to understand multicasting, where packets are sent
146: to a network or a group of addresses. In a situation where a neighbor
147: cannot process multicast packets, it is necessary to establish a direct
148: link between routers. The neighbor command allows the network
149: administrator to specify a router as a RIP neighbor. The @code{no
150: neighbor a.b.c.d} command will disable the RIP neighbor.
151: @end deffn
152:
153: Below is very simple RIP configuration. Interface @code{eth0} and
154: interface which address match to @code{10.0.0.0/8} are RIP enabled.
155:
156: @example
157: @group
158: !
159: router rip
160: network 10.0.0.0/8
161: network eth0
162: !
163: @end group
164: @end example
165:
166: Passive interface
167:
168: @deffn {RIP command} {passive-interface (@var{IFNAME}|default)} {}
169: @deffnx {RIP command} {no passive-interface @var{IFNAME}} {}
170: This command sets the specified interface to passive mode. On passive mode
171: interface, all receiving packets are processed as normal and ripd does
172: not send either multicast or unicast RIP packets except to RIP neighbors
173: specified with @code{neighbor} command. The interface may be specified
174: as @var{default} to make ripd default to passive on all interfaces.
175:
176: The default is to be passive on all interfaces.
177: @end deffn
178:
179: RIP split-horizon
180:
181: @deffn {Interface command} {ip split-horizon} {}
182: @deffnx {Interface command} {no ip split-horizon} {}
183: Control split-horizon on the interface. Default is @code{ip
184: split-horizon}. If you don't perform split-horizon on the interface,
185: please specify @code{no ip split-horizon}.
186: @end deffn
187:
188: @node RIP Version Control
189: @section RIP Version Control
190:
191: RIP can be configured to send either Version 1 or Version 2 packets.
192: The default is to send RIPv2 while accepting both RIPv1 and RIPv2 (and
193: replying with packets of the appropriate version for REQUESTS /
194: triggered updates). The version to receive and send can be specified
195: globally, and further overriden on a per-interface basis if needs be
196: for send and receive seperately (see below).
197:
198: It is important to note that RIPv1 can not be authenticated. Further,
199: if RIPv1 is enabled then RIP will reply to REQUEST packets, sending the
200: state of its RIP routing table to any remote routers that ask on
201: demand. For a more detailed discussion on the security implications of
202: RIPv1 see @ref{RIP Authentication}.
203:
204: @deffn {RIP Command} {version @var{version}} {}
205: Set RIP version to accept for reads and send. @var{version}
206: can be either `1'' or `2''.
207:
208: Disabling RIPv1 by specifying version 2 is STRONGLY encouraged,
209: @xref{RIP Authentication}. This may become the default in a future
210: release.
211:
212: Default: Send Version 2, and accept either version.
213: @end deffn
214:
215: @deffn {RIP Command} {no version} {}
216: Reset the global version setting back to the default.
217: @end deffn
218:
219: @deffn {Interface command} {ip rip send version @var{version}} {}
220: @var{version} can be `1', `2' or `1 2'.
221:
222: This interface command overrides the global rip version setting, and
223: selects which version of RIP to send packets with, for this interface
224: specifically. Choice of RIP Version 1, RIP Version 2, or both versions.
225: In the latter case, where `1 2' is specified, packets will be both
226: broadcast and multicast.
227:
228: Default: Send packets according to the global version (version 2)
229: @end deffn
230:
231: @deffn {Interface command} {ip rip receive version @var{version}} {}
232: @var{version} can be `1', `2' or `1 2'.
233:
234: This interface command overrides the global rip version setting, and
235: selects which versions of RIP packets will be accepted on this
236: interface. Choice of RIP Version 1, RIP Version 2, or both.
237:
238: Default: Accept packets according to the global setting (both 1 and 2).
239: @end deffn
240:
241: @node How to Announce RIP route
242: @section How to Announce RIP route
243:
244: @deffn {RIP command} {redistribute kernel} {}
245: @deffnx {RIP command} {redistribute kernel metric <0-16>} {}
246: @deffnx {RIP command} {redistribute kernel route-map @var{route-map}} {}
247: @deffnx {RIP command} {no redistribute kernel} {}
248: @code{redistribute kernel} redistributes routing information from
249: kernel route entries into the RIP tables. @code{no redistribute kernel}
250: disables the routes.
251: @end deffn
252:
253: @deffn {RIP command} {redistribute static} {}
254: @deffnx {RIP command} {redistribute static metric <0-16>} {}
255: @deffnx {RIP command} {redistribute static route-map @var{route-map}} {}
256: @deffnx {RIP command} {no redistribute static} {}
257: @code{redistribute static} redistributes routing information from
258: static route entries into the RIP tables. @code{no redistribute static}
259: disables the routes.
260: @end deffn
261:
262: @deffn {RIP command} {redistribute connected} {}
263: @deffnx {RIP command} {redistribute connected metric <0-16>} {}
264: @deffnx {RIP command} {redistribute connected route-map @var{route-map}} {}
265: @deffnx {RIP command} {no redistribute connected} {}
266: Redistribute connected routes into the RIP tables. @code{no
267: redistribute connected} disables the connected routes in the RIP tables.
268: This command redistribute connected of the interface which RIP disabled.
269: The connected route on RIP enabled interface is announced by default.
270: @end deffn
271:
272: @deffn {RIP command} {redistribute ospf} {}
273: @deffnx {RIP command} {redistribute ospf metric <0-16>} {}
274: @deffnx {RIP command} {redistribute ospf route-map @var{route-map}} {}
275: @deffnx {RIP command} {no redistribute ospf} {}
276: @code{redistribute ospf} redistributes routing information from
277: ospf route entries into the RIP tables. @code{no redistribute ospf}
278: disables the routes.
279: @end deffn
280:
281: @deffn {RIP command} {redistribute bgp} {}
282: @deffnx {RIP command} {redistribute bgp metric <0-16>} {}
283: @deffnx {RIP command} {redistribute bgp route-map @var{route-map}} {}
284: @deffnx {RIP command} {no redistribute bgp} {}
285: @code{redistribute bgp} redistributes routing information from
286: bgp route entries into the RIP tables. @code{no redistribute bgp}
287: disables the routes.
288: @end deffn
289:
290: If you want to specify RIP only static routes:
291:
292: @deffn {RIP command} {default-information originate} {}
293: @end deffn
294:
295: @deffn {RIP command} {route @var{a.b.c.d/m}} {}
296: @deffnx {RIP command} {no route @var{a.b.c.d/m}} {}
297: This command is specific to Quagga. The @code{route} command makes a static
298: route only inside RIP. This command should be used only by advanced
299: users who are particularly knowledgeable about the RIP protocol. In
300: most cases, we recommend creating a static route in Quagga and
301: redistributing it in RIP using @code{redistribute static}.
302: @end deffn
303:
304: @node Filtering RIP Routes
305: @section Filtering RIP Routes
306:
307: RIP routes can be filtered by a distribute-list.
308:
309: @deffn Command {distribute-list @var{access_list} @var{direct} @var{ifname}} {}
310: You can apply access lists to the interface with a @code{distribute-list}
311: command. @var{access_list} is the access list name. @var{direct} is
312: @samp{in} or @samp{out}. If @var{direct} is @samp{in} the access list
313: is applied to input packets.
314:
315: The @code{distribute-list} command can be used to filter the RIP path.
316: @code{distribute-list} can apply access-lists to a chosen interface.
317: First, one should specify the access-list. Next, the name of the
318: access-list is used in the distribute-list command. For example, in the
319: following configuration @samp{eth0} will permit only the paths that
320: match the route 10.0.0.0/8
321:
322: @example
323: @group
324: !
325: router rip
326: distribute-list private in eth0
327: !
328: access-list private permit 10 10.0.0.0/8
329: access-list private deny any
330: !
331: @end group
332: @end example
333: @end deffn
334:
335: @code{distribute-list} can be applied to both incoming and outgoing data.
336:
337: @deffn Command {distribute-list prefix @var{prefix_list} (in|out) @var{ifname}} {}
338: You can apply prefix lists to the interface with a
339: @code{distribute-list} command. @var{prefix_list} is the prefix list
340: name. Next is the direction of @samp{in} or @samp{out}. If
341: @var{direct} is @samp{in} the access list is applied to input packets.
342: @end deffn
343:
344: @node RIP Metric Manipulation
345: @section RIP Metric Manipulation
346:
347: RIP metric is a value for distance for the network. Usually
348: @command{ripd} increment the metric when the network information is
349: received. Redistributed routes' metric is set to 1.
350:
351: @deffn {RIP command} {default-metric <1-16>} {}
352: @deffnx {RIP command} {no default-metric <1-16>} {}
353: This command modifies the default metric value for redistributed routes. The
354: default value is 1. This command does not affect connected route
355: even if it is redistributed by @command{redistribute connected}. To modify
356: connected route's metric value, please use @command{redistribute
357: connected metric} or @command{route-map}. @command{offset-list} also
358: affects connected routes.
359: @end deffn
360:
361: @deffn {RIP command} {offset-list @var{access-list} (in|out)} {}
362: @deffnx {RIP command} {offset-list @var{access-list} (in|out) @var{ifname}} {}
363: @end deffn
364:
365: @node RIP distance
366: @section RIP distance
367:
368: Distance value is used in zebra daemon. Default RIP distance is 120.
369:
370: @deffn {RIP command} {distance <1-255>} {}
371: @deffnx {RIP command} {no distance <1-255>} {}
372: Set default RIP distance to specified value.
373: @end deffn
374:
375: @deffn {RIP command} {distance <1-255> @var{A.B.C.D/M}} {}
376: @deffnx {RIP command} {no distance <1-255> @var{A.B.C.D/M}} {}
377: Set default RIP distance to specified value when the route's source IP
378: address matches the specified prefix.
379: @end deffn
380:
381: @deffn {RIP command} {distance <1-255> @var{A.B.C.D/M} @var{access-list}} {}
382: @deffnx {RIP command} {no distance <1-255> @var{A.B.C.D/M} @var{access-list}} {}
383: Set default RIP distance to specified value when the route's source IP
384: address matches the specified prefix and the specified access-list.
385: @end deffn
386:
387: @node RIP route-map
388: @section RIP route-map
389:
390: Usage of @command{ripd}'s route-map support.
391:
392: Optional argument route-map MAP_NAME can be added to each @code{redistribute}
393: statement.
394:
395: @example
396: redistribute static [route-map MAP_NAME]
397: redistribute connected [route-map MAP_NAME]
398: .....
399: @end example
400:
401: Cisco applies route-map _before_ routes will exported to rip route table.
402: In current Quagga's test implementation, @command{ripd} applies route-map
403: after routes are listed in the route table and before routes will be
404: announced to an interface (something like output filter). I think it is not
405: so clear, but it is draft and it may be changed at future.
406:
407: Route-map statement (@pxref{Route Map}) is needed to use route-map
408: functionality.
409:
410: @deffn {Route Map} {match interface @var{word}} {}
411: This command match to incoming interface. Notation of this match is
412: different from Cisco. Cisco uses a list of interfaces - NAME1 NAME2
413: ... NAMEN. Ripd allows only one name (maybe will change in the
414: future). Next - Cisco means interface which includes next-hop of
415: routes (it is somewhat similar to "ip next-hop" statement). Ripd
416: means interface where this route will be sent. This difference is
417: because "next-hop" of same routes which sends to different interfaces
418: must be different. Maybe it'd be better to made new matches - say
419: "match interface-out NAME" or something like that.
420: @end deffn
421:
422: @deffn {Route Map} {match ip address @var{word}} {}
423: @deffnx {Route Map} {match ip address prefix-list @var{word}} {}
424: Match if route destination is permitted by access-list.
425: @end deffn
426:
427: @deffn {Route Map} {match ip next-hop A.B.C.D} {}
428: Cisco uses here <access-list>, @command{ripd} IPv4 address. Match if
429: route has this next-hop (meaning next-hop listed in the rip route
430: table - "show ip rip")
431: @end deffn
432:
433: @deffn {Route Map} {match metric <0-4294967295>} {}
434: This command match to the metric value of RIP updates. For other
435: protocol compatibility metric range is shown as <0-4294967295>. But
436: for RIP protocol only the value range <0-16> make sense.
437: @end deffn
438:
439: @deffn {Route Map} {set ip next-hop A.B.C.D} {}
440: This command set next hop value in RIPv2 protocol. This command does
441: not affect RIPv1 because there is no next hop field in the packet.
442: @end deffn
443:
444: @deffn {Route Map} {set metric <0-4294967295>} {}
445: Set a metric for matched route when sending announcement. The metric
446: value range is very large for compatibility with other protocols. For
447: RIP, valid metric values are from 1 to 16.
448: @end deffn
449:
450: @node RIP Authentication
451: @section RIP Authentication
452:
453: RIPv2 allows packets to be authenticated via either an insecure plain
454: text password, included with the packet, or via a more secure MD5 based
455: @acronym{HMAC, keyed-Hashing for Message AuthentiCation},
456: RIPv1 can not be authenticated at all, thus when authentication is
457: configured @code{ripd} will discard routing updates received via RIPv1
458: packets.
459:
460: However, unless RIPv1 reception is disabled entirely,
461: @xref{RIP Version Control}, RIPv1 REQUEST packets which are received,
462: which query the router for routing information, will still be honoured
463: by @code{ripd}, and @code{ripd} WILL reply to such packets. This allows
464: @code{ripd} to honour such REQUESTs (which sometimes is used by old
465: equipment and very simple devices to bootstrap their default route),
466: while still providing security for route updates which are received.
467:
468: In short: Enabling authentication prevents routes being updated by
469: unauthenticated remote routers, but still can allow routes (I.e. the
470: entire RIP routing table) to be queried remotely, potentially by anyone
471: on the internet, via RIPv1.
472:
473: To prevent such unauthenticated querying of routes disable RIPv1,
474: @xref{RIP Version Control}.
475:
476: @deffn {Interface command} {ip rip authentication mode md5} {}
477: @deffnx {Interface command} {no ip rip authentication mode md5} {}
478: Set the interface with RIPv2 MD5 authentication.
479: @end deffn
480:
481: @deffn {Interface command} {ip rip authentication mode text} {}
482: @deffnx {Interface command} {no ip rip authentication mode text} {}
483: Set the interface with RIPv2 simple password authentication.
484: @end deffn
485:
486: @deffn {Interface command} {ip rip authentication string @var{string}} {}
487: @deffnx {Interface command} {no ip rip authentication string @var{string}} {}
488: RIP version 2 has simple text authentication. This command sets
489: authentication string. The string must be shorter than 16 characters.
490: @end deffn
491:
492: @deffn {Interface command} {ip rip authentication key-chain @var{key-chain}} {}
493: @deffnx {Interface command} {no ip rip authentication key-chain @var{key-chain}} {}
494: Specifiy Keyed MD5 chain.
495: @end deffn
496:
497: @example
498: !
499: key chain test
500: key 1
501: key-string test
502: !
503: interface eth1
504: ip rip authentication mode md5
505: ip rip authentication key-chain test
506: !
507: @end example
508:
509: @node RIP Timers
510: @section RIP Timers
511:
512: @deffn {RIP command} {timers basic @var{update} @var{timeout} @var{garbage}} {}
513:
514: RIP protocol has several timers. User can configure those timers' values
515: by @code{timers basic} command.
516:
517: The default settings for the timers are as follows:
518:
519: @itemize @bullet
520: @item
521: The update timer is 30 seconds. Every update timer seconds, the RIP
522: process is awakened to send an unsolicited Response message containing
523: the complete routing table to all neighboring RIP routers.
524:
525: @item
526: The timeout timer is 180 seconds. Upon expiration of the timeout, the
527: route is no longer valid; however, it is retained in the routing table
528: for a short time so that neighbors can be notified that the route has
529: been dropped.
530:
531: @item
532: The garbage collect timer is 120 seconds. Upon expiration of the
533: garbage-collection timer, the route is finally removed from the routing
534: table.
535:
536: @end itemize
537:
538: The @code{timers basic} command allows the the default values of the timers
539: listed above to be changed.
540: @end deffn
541:
542: @deffn {RIP command} {no timers basic} {}
543: The @code{no timers basic} command will reset the timers to the default
544: settings listed above.
545: @end deffn
546:
547: @node Show RIP Information
548: @section Show RIP Information
549:
550: To display RIP routes.
551:
552: @deffn Command {show ip rip} {}
553: Show RIP routes.
554: @end deffn
555:
556: The command displays all RIP routes. For routes that are received
557: through RIP, this command will display the time the packet was sent and
558: the tag information. This command will also display this information
559: for routes redistributed into RIP.
560:
561: @c Exmaple here.
562:
563: @deffn Command {show ip protocols} {}
564: The command displays current RIP status. It includes RIP timer,
565: filtering, version, RIP enabled interface and RIP peer inforation.
566: @end deffn
567:
568: @example
569: @group
570: ripd> @b{show ip protocols}
571: Routing Protocol is "rip"
572: Sending updates every 30 seconds with +/-50%, next due in 35 seconds
573: Timeout after 180 seconds, garbage collect after 120 seconds
574: Outgoing update filter list for all interface is not set
575: Incoming update filter list for all interface is not set
576: Default redistribution metric is 1
577: Redistributing: kernel connected
578: Default version control: send version 2, receive version 2
579: Interface Send Recv
580: Routing for Networks:
581: eth0
582: eth1
583: 1.1.1.1
584: 203.181.89.241
585: Routing Information Sources:
586: Gateway BadPackets BadRoutes Distance Last Update
587: @end group
588: @end example
589:
590: @node RIP Debug Commands
591: @section RIP Debug Commands
592:
593: Debug for RIP protocol.
594:
595: @deffn Command {debug rip events} {}
596: Debug rip events.
597: @end deffn
598:
599: @code{debug rip} will show RIP events. Sending and receiving
600: packets, timers, and changes in interfaces are events shown with @command{ripd}.
601:
602: @deffn Command {debug rip packet} {}
603: Debug rip packet.
604: @end deffn
605:
606: @code{debug rip packet} will display detailed information about the RIP
607: packets. The origin and port number of the packet as well as a packet
608: dump is shown.
609:
610: @deffn Command {debug rip zebra} {}
611: Debug rip between zebra communication.
612: @end deffn
613:
614: This command will show the communication between @command{ripd} and
615: @command{zebra}. The main information will include addition and deletion of
616: paths to the kernel and the sending and receiving of interface information.
617:
618: @deffn Command {show debugging rip} {}
619: Display @command{ripd}'s debugging option.
620: @end deffn
621:
622: @code{show debugging rip} will show all information currently set for ripd
623: debug.
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>