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