]> git.proxmox.com Git - mirror_frr.git/blob - doc/user/ripd.rst
Merge pull request #8414 from idryzhov/fix-filter-cli
[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 .. clicmd:: router rip
91
92 The `router rip` command is necessary to enable RIP. To disable RIP, use the
93 `no router rip` command. RIP must be enabled before carrying out any of the
94 RIP commands.
95
96
97 Disable RIP.
98
99 .. clicmd:: network NETWORK
100
101
102 Set the RIP enable interface by NETWORK. The interfaces which have addresses
103 matching with NETWORK are enabled.
104
105 This group of commands either enables or disables RIP interfaces between
106 certain numbers of a specified network address. For example, if the network
107 for 10.0.0.0/24 is RIP enabled, this would result in all the addresses from
108 10.0.0.0 to 10.0.0.255 being enabled for RIP. The `no network` command will
109 disable RIP for the specified network.
110
111 .. clicmd:: network IFNAME
112
113
114 Set a RIP enabled interface by IFNAME. Both the sending and
115 receiving of RIP packets will be enabled on the port specified in the
116 `network ifname` command. The `no network ifname` command will disable
117 RIP on the specified interface.
118
119 .. clicmd:: neighbor A.B.C.D
120
121
122 Specify RIP neighbor. When a neighbor doesn't understand multicast, this
123 command is used to specify neighbors. In some cases, not all routers will be
124 able to understand multicasting, where packets are sent to a network or a
125 group of addresses. In a situation where a neighbor cannot process multicast
126 packets, it is necessary to establish a direct link between routers. The
127 neighbor command allows the network administrator to specify a router as a
128 RIP neighbor. The `no neighbor a.b.c.d` command will disable the RIP
129 neighbor.
130
131 Below is very simple RIP configuration. Interface `eth0` and interface which
132 address match to `10.0.0.0/8` are RIP enabled.
133
134 .. code-block:: frr
135
136 !
137 router rip
138 network 10.0.0.0/8
139 network eth0
140 !
141
142
143 .. clicmd:: passive-interface (IFNAME|default)
144
145
146 This command sets the specified interface to passive mode. On passive mode
147 interface, all receiving packets are processed as normal and ripd does not
148 send either multicast or unicast RIP packets except to RIP neighbors
149 specified with `neighbor` command. The interface may be specified as
150 `default` to make ripd default to passive on all interfaces.
151
152 The default is to be passive on all interfaces.
153
154 .. clicmd:: ip split-horizon
155
156
157 Control split-horizon on the interface. Default is `ip split-horizon`. If
158 you don't perform split-horizon on the interface, please specify `no ip
159 split-horizon`.
160
161 .. _rip-version-control:
162
163 RIP Version Control
164 ===================
165
166 RIP can be configured to send either Version 1 or Version 2 packets. The
167 default is to send RIPv2 while accepting both RIPv1 and RIPv2 (and replying
168 with packets of the appropriate version for REQUESTS / triggered updates). The
169 version to receive and send can be specified globally, and further overridden on
170 a per-interface basis if needs be for send and receive separately (see below).
171
172 It is important to note that RIPv1 cannot be authenticated. Further, if RIPv1
173 is enabled then RIP will reply to REQUEST packets, sending the state of its RIP
174 routing table to any remote routers that ask on demand. For a more detailed
175 discussion on the security implications of RIPv1 see :ref:`rip-authentication`.
176
177 .. clicmd:: version VERSION
178
179 Set RIP version to accept for reads and send. ``VERSION`` can be either 1 or
180 1.
181
182 Disabling RIPv1 by specifying version 2 is STRONGLY encouraged,
183 :ref:`rip-authentication`. This may become the default in a future release.
184
185 Default: Send Version 2, and accept either version.
186
187 .. clicmd:: ip rip send version VERSION
188
189 VERSION can be ``1``, ``2``, or ``1 2``.
190
191 This interface command overrides the global rip version setting, and selects
192 which version of RIP to send packets with, for this interface specifically.
193 Choice of RIP Version 1, RIP Version 2, or both versions. In the latter
194 case, where ``1 2`` is specified, packets will be both broadcast and
195 multicast.
196
197 Default: Send packets according to the global version (version 2)
198
199 .. clicmd:: ip rip receive version VERSION
200
201 VERSION can be ``1``, ``2``, or ``1 2``.
202
203 This interface command overrides the global rip version setting, and selects
204 which versions of RIP packets will be accepted on this interface. Choice of
205 RIP Version 1, RIP Version 2, or both.
206
207 Default: Accept packets according to the global setting (both 1 and 2).
208
209
210 .. _how-to-announce-rip-route:
211
212 How to Announce RIP route
213 =========================
214
215 .. clicmd:: redistribute <babel|bgp|connected|eigrp|isis|kernel|openfabric|ospf|sharp|static|table> [metric (0-16)] [route-map WORD]
216
217 Redistribute routes from other sources into RIP.
218
219 If you want to specify RIP only static routes:
220
221 .. clicmd:: default-information originate
222
223 .. clicmd:: route A.B.C.D/M
224
225
226 This command is specific to FRR. The `route` command makes a static route
227 only inside RIP. This command should be used only by advanced users who are
228 particularly knowledgeable about the RIP protocol. In most cases, we
229 recommend creating a static route in FRR and redistributing it in RIP using
230 `redistribute static`.
231
232 .. _filtering-rip-routes:
233
234 Filtering RIP Routes
235 ====================
236
237 RIP routes can be filtered by a distribute-list.
238
239 .. clicmd:: distribute-list ACCESS_LIST DIRECT IFNAME
240
241 You can apply access lists to the interface with a `distribute-list` command.
242 ACCESS_LIST is the access list name. DIRECT is ``in`` or ``out``. If DIRECT
243 is ``in`` the access list is applied to input packets.
244
245 The `distribute-list` command can be used to filter the RIP path.
246 `distribute-list` can apply access-lists to a chosen interface. First, one
247 should specify the access-list. Next, the name of the access-list is used in
248 the distribute-list command. For example, in the following configuration
249 ``eth0`` will permit only the paths that match the route 10.0.0.0/8
250
251 .. code-block:: frr
252
253 !
254 router rip
255 distribute-list private in eth0
256 !
257 access-list private permit 10 10.0.0.0/8
258 access-list private deny any
259 !
260
261
262 `distribute-list` can be applied to both incoming and outgoing data.
263
264 .. clicmd:: distribute-list prefix PREFIX_LIST (in|out) IFNAME
265
266 You can apply prefix lists to the interface with a `distribute-list`
267 command. PREFIX_LIST is the prefix list name. Next is the direction of
268 ``in`` or ``out``. If DIRECT is ``in`` the access list is applied to input
269 packets.
270
271 .. _rip-metric-manipulation:
272
273 RIP Metric Manipulation
274 =======================
275
276 RIP metric is a value for distance for the network. Usually
277 *ripd* increment the metric when the network information is
278 received. Redistributed routes' metric is set to 1.
279
280 .. clicmd:: default-metric (1-16)
281
282
283 This command modifies the default metric value for redistributed routes.
284 The default value is 1. This command does not affect connected route even if
285 it is redistributed by *redistribute connected*. To modify connected route's
286 metric value, please use ``redistribute connected metric`` or *route-map*.
287 *offset-list* also affects connected routes.
288
289 .. clicmd:: offset-list ACCESS-LIST (in|out)
290
291 .. clicmd:: offset-list ACCESS-LIST (in|out) IFNAME
292
293
294 .. _rip-distance:
295
296 RIP distance
297 ============
298
299 Distance value is used in zebra daemon. Default RIP distance is 120.
300
301 .. clicmd:: distance (1-255)
302
303
304 Set default RIP distance to specified value.
305
306 .. clicmd:: distance (1-255) A.B.C.D/M
307
308
309 Set default RIP distance to specified value when the route's source IP
310 address matches the specified prefix.
311
312 .. clicmd:: distance (1-255) A.B.C.D/M ACCESS-LIST
313
314
315 Set default RIP distance to specified value when the route's source IP
316 address matches the specified prefix and the specified access-list.
317
318 .. _rip-route-map:
319
320 RIP route-map
321 =============
322
323 Usage of *ripd*'s route-map support.
324
325 Optional argument route-map MAP_NAME can be added to each `redistribute`
326 statement.
327
328 .. code-block:: frr
329
330 redistribute static [route-map MAP_NAME]
331 redistribute connected [route-map MAP_NAME]
332 .....
333
334
335 Cisco applies route-map _before_ routes will exported to rip route table. In
336 current FRR's test implementation, *ripd* applies route-map after routes are
337 listed in the route table and before routes will be announced to an interface
338 (something like output filter). I think it is not so clear, but it is draft and
339 it may be changed at future.
340
341 Route-map statement (:ref:`route-map`) is needed to use route-map
342 functionality.
343
344 .. clicmd:: match interface WORD
345
346 This command match to incoming interface. Notation of this match is
347 different from Cisco. Cisco uses a list of interfaces - NAME1 NAME2 ...
348 NAMEN. Ripd allows only one name (maybe will change in the future). Next -
349 Cisco means interface which includes next-hop of routes (it is somewhat
350 similar to "ip next-hop" statement). Ripd means interface where this route
351 will be sent. This difference is because "next-hop" of same routes which
352 sends to different interfaces must be different. Maybe it'd be better to
353 made new matches - say "match interface-out NAME" or something like that.
354
355 .. clicmd:: match ip address WORD
356
357 .. clicmd:: match ip address prefix-list WORD
358
359 Match if route destination is permitted by access-list.
360
361 .. clicmd:: match ip next-hop WORD
362
363 .. clicmd:: match ip next-hop prefix-list WORD
364
365 Match if route next-hop (meaning next-hop listed in the rip route-table as
366 displayed by "show ip rip") is permitted by access-list.
367
368 .. clicmd:: match metric (0-4294967295)
369
370 This command match to the metric value of RIP updates. For other protocol
371 compatibility metric range is shown as (0-4294967295). But for RIP protocol
372 only the value range (0-16) make sense.
373
374 .. clicmd:: set ip next-hop A.B.C.D
375
376 This command set next hop value in RIPv2 protocol. This command does not
377 affect RIPv1 because there is no next hop field in the packet.
378
379 .. clicmd:: set metric (0-4294967295)
380
381 Set a metric for matched route when sending announcement. The metric value
382 range is very large for compatibility with other protocols. For RIP, valid
383 metric values are from 1 to 16.
384
385 .. _rip-authentication:
386
387 RIP Authentication
388 ==================
389
390 RIPv2 allows packets to be authenticated via either an insecure plain
391 text password, included with the packet, or via a more secure MD5 based
392 :abbr:`HMAC (keyed-Hashing for Message AuthentiCation)`,
393 RIPv1 can not be authenticated at all, thus when authentication is
394 configured `ripd` will discard routing updates received via RIPv1
395 packets.
396
397 However, unless RIPv1 reception is disabled entirely,
398 :ref:`rip-version-control`, RIPv1 REQUEST packets which are received,
399 which query the router for routing information, will still be honoured
400 by `ripd`, and `ripd` WILL reply to such packets. This allows
401 `ripd` to honour such REQUESTs (which sometimes is used by old
402 equipment and very simple devices to bootstrap their default route),
403 while still providing security for route updates which are received.
404
405 In short: Enabling authentication prevents routes being updated by
406 unauthenticated remote routers, but still can allow routes (I.e. the
407 entire RIP routing table) to be queried remotely, potentially by anyone
408 on the internet, via RIPv1.
409
410 To prevent such unauthenticated querying of routes disable RIPv1,
411 :ref:`rip-version-control`.
412
413 .. clicmd:: ip rip authentication mode md5
414
415
416 Set the interface with RIPv2 MD5 authentication.
417
418 .. clicmd:: ip rip authentication mode text
419
420
421 Set the interface with RIPv2 simple password authentication.
422
423 .. clicmd:: ip rip authentication string STRING
424
425
426 RIP version 2 has simple text authentication. This command sets
427 authentication string. The string must be shorter than 16 characters.
428
429 .. clicmd:: ip rip authentication key-chain KEY-CHAIN
430
431
432 Specify Keyed MD5 chain.
433
434 .. code-block:: frr
435
436 !
437 key chain test
438 key 1
439 key-string test
440 !
441 interface eth1
442 ip rip authentication mode md5
443 ip rip authentication key-chain test
444 !
445
446
447 .. _rip-timers:
448
449 RIP Timers
450 ==========
451
452 .. clicmd:: timers basic UPDATE TIMEOUT GARBAGE
453
454
455 RIP protocol has several timers. User can configure those timers' values
456 by `timers basic` command.
457
458 The default settings for the timers are as follows:
459
460 - The update timer is 30 seconds. Every update timer seconds, the RIP
461 process is awakened to send an unsolicited Response message containing
462 the complete routing table to all neighboring RIP routers.
463 - The timeout timer is 180 seconds. Upon expiration of the timeout, the
464 route is no longer valid; however, it is retained in the routing table
465 for a short time so that neighbors can be notified that the route has
466 been dropped.
467 - The garbage collect timer is 120 seconds. Upon expiration of the
468 garbage-collection timer, the route is finally removed from the routing
469 table.
470
471 The ``timers basic`` command allows the the default values of the timers
472 listed above to be changed.
473
474
475 .. _show-rip-information:
476
477 Show RIP Information
478 ====================
479
480 To display RIP routes.
481
482 .. clicmd:: show ip rip
483
484 Show RIP routes.
485
486 The command displays all RIP routes. For routes that are received
487 through RIP, this command will display the time the packet was sent and
488 the tag information. This command will also display this information
489 for routes redistributed into RIP.
490
491 .. clicmd:: show ip rip status
492
493 The command displays current RIP status. It includes RIP timer,
494 filtering, version, RIP enabled interface and RIP peer information.
495
496 ::
497
498 ripd> **show ip rip status**
499 Routing Protocol is "rip"
500 Sending updates every 30 seconds with +/-50%, next due in 35 seconds
501 Timeout after 180 seconds, garbage collect after 120 seconds
502 Outgoing update filter list for all interface is not set
503 Incoming update filter list for all interface is not set
504 Default redistribution metric is 1
505 Redistributing: kernel connected
506 Default version control: send version 2, receive version 2
507 Interface Send Recv
508 Routing for Networks:
509 eth0
510 eth1
511 1.1.1.1
512 203.181.89.241
513 Routing Information Sources:
514 Gateway BadPackets BadRoutes Distance Last Update
515
516
517 RIP Debug Commands
518 ==================
519
520 Debug for RIP protocol.
521
522 .. clicmd:: debug rip events
523
524 Shows RIP events. Sending and receiving packets, timers, and changes in
525 interfaces are events shown with *ripd*.
526
527 .. clicmd:: debug rip packet
528
529 Shows display detailed information about the RIP packets. The origin and
530 port number of the packet as well as a packet dump is shown.
531
532 .. clicmd:: debug rip zebra
533
534 This command will show the communication between *ripd* and *zebra*. The
535 main information will include addition and deletion of paths to the kernel
536 and the sending and receiving of interface information.
537
538 .. clicmd:: show debugging rip
539
540 Shows all information currently set for ripd debug.
541
542
543 Sample configuration
544 ====================
545
546 .. code-block:: frr
547
548
549 debug rip events
550 debug rip packet
551
552 router rip
553 network 11.0.0.0/8
554 network eth0
555 route 10.0.0.0/8
556 distribute-list private-only in eth0
557
558 access-list private-only permit 10.0.0.0/8
559 access-list private-only deny any