RFC1786 - Representation of IP Routing Policies in a Routing(2)

时间:2005-02-15 来源: 作者: 点击:
as-in or as-out policy. When a sub-set is described remember the remaining routes are implicitly shared across all connections. It is an error for the interas policies to describe a superset of the g
  
as-in or as-out policy. When a sub-set is described remember the
remaining routes are implicitly shared across all connections. It is
an error for the interas policies to describe a superset of the
global policies, i.e. to announce or accept more routes than the
global policies.

When defining complex interas based policies it is advisable to
ensure that any possible ambiguities are not present by explicitly
defining your policy with respect to the global as-in and as-out
policy.

If we look at a simple example, taking just in-bound announcements to
simplify things. If we have the following global policy:

aut-num: AS1
as-in: from AS2 10 accept AS100 OR {10.0.0.0/8}

Suppose there are three peerings between AS1 and AS2, known as L1-R1,
L2-R2 and L3-R3 respectively. The actual policy of these connections
is to accept AS100 equally on these three links and just route
10.0.0.0/8 on L3-R3. The simple way to mention this exception is to
just specify an interas policy for L3-R3:

interas-in: from AS2 L3 R3 (pref=100) accept {10.0.0.0/8}

The implicit rule that all routes not mentioned in interas policies
are accepted on all links with equal preference ensures the desired
result.

The same policy can be written explicitly as:

interas-in: from AS2 L1 R1 (pref=100) accept AS100
interas-in: from AS2 L2 R2 (pref=100) accept AS100
interas-in: from AS2 L3 R3 (pref=100) accept AS100 OR {10.0.0.0/8}

Whilst this may at first sight seem obvious, the problem arises when
not all connections are mentioned. For example, if we specified only
an interas-in line for L3-R3 as below:

aut-num: AS1
as-in: from AS2 10 accept AS100 OR {10.0.0.0/8}
interas-in: from AS2 L3 R3 (pref=100) accept AS100 OR {10.0.0.0/8}

then the policy for the other links according to the rules above
would mean they were equal to the global policy minus the sum of the
local policies (i.e. ((AS100 OR {10.0.0.0/0}) / (AS100 OR
{10.0.0.0/0})) = empty) which in this case would mean nothing is
accepted on connections L1-R1 and L2-R2 which is incorrect.

Another example: If we only registered the policy for link L2-
R2:

interas-in: from AS2 L2 R2 (pref=100) accept AS100

The implicit policy for both L1-R1 and L3-R3 would be as follows:

interas-in: from AS2 L1 R1 (pref=100) accept {10.0.0.0/8}
interas-in: from AS2 L3 R3 (pref=100) accept {10.0.0.0/8}

This is derived as the set of global policies minus the set of
interas-in policies (in this case just accept AS100 as it was the
L2-R2 interas-in policy we registered) with equal cost for the
remaining connection. This again is clearly not what was intended.

We strongly recommend that you always mention all policies for all
interas connections explicitly, to avoid these possible errors. One
should always ensure the set of the interas policies is equal to the
global policy. Clearly if interas policies differ in complex ways it
is worth considering splitting the AS in question into separate ASes.
However, this is beyond the direct scope of this document.

It should also be noted there is no direct relationship between the
cost used in as-in and the preference used in interas-in.

How to describe the exclusion policy of a certain AS - "as-exclude"

Some ASes have a routing policy based on the exclusion of certain
routes if for whatever reason a certain AS is used as transit.
Whilst, this is in general not good practice as it makes implicit
assumptions on topology with asymmetry a possible outcome if not
coordinated, this case needs to be accommodated within the routing
policy representation.

The way this is achieved is by making use of the "as-exclude"
attribute. The precise syntax of this attribute can be found in
Appendix A along with the rest of the defined syntax for the "aut-
num" object. However, some explanation of the use of this attribute
is useful. If we have the following example topology.

Example:

AS4--------AS3
| | |
| | |
AS1--------AS2--------AS5

With a simple corresponding policy like so:

Example:

aut-num: AS1
as-in: from AS2 100 accept ANY
as-out: to AS2 announce AS1
as-exclude: exclude AS4 to ANY
....

We see an interesting policy. What this says in simple terms is AS1
doesn't want to reach anything if it transits AS4. This can be a
perfectly valid policy. However, it should be realized that if for
whatever reason AS2 decides to route to AS3 via AS4 then immediately
AS1 has no connectivity to AS3 or if AS1 is running default to AS2
packets from AS1 will still flow via AS4. The important point about
this is that whilst AS1 can advise its neighbors of its policy it has
no direct control on how it can enforce this policy to neighbors
upstream.

Another interesting scenario to highlight the unexpected result of
using such an "as-exclude" policy. If we assume in the above example
AS2 preferred AS4 to reach AS3 and AS1 did not use default routing
then as stated AS1 would have no connectivity to AS3. Now lets
suppose that for example the link between AS2 and AS4 went down for
some reason. Like so:

Example:

AS4--------AS3
|
|
AS1--------AS2--------AS5

Suddenly AS1 now has connectivity to AS3. This unexpected behavior
should be considered when created policies based on the "as-exclude"
attribute.

The second problem with this type of policy is the potential of
asymmetry. In the original example we saw the correct policy from
AS1's point of view but if ASes with connectivity through AS4 do not
use a similar policy you have asymmetric traffic and policy. If an
AS uses such a policy they must be aware of the consequences of its
use. Namely that the specified routes which transit the AS (i.e.
routing announcements with this AS in the AS path information) in
question will be excluded. If not coordinated this can easily cause
asymmetry or even worse loss of connectivity to unknown ASes behind
(or in front for that matter) the transit AS in question. With this
in mind this attribute can only be viewed as a form of advisory to
other service providers. However, this does not preclude its use with
policy based tools if the attribute exists.

By having the ability to specify a route keyword based on any of the
four notations given in the syntax it allows the receiving AS to
specify what routes it wishes to exclude through a given transit AS
to a network granularity.

7. AS Macros

It may be difficult to keep track of each and every new AS that is
represented in the routing registry. A convenient way around this is
to define an `AS Macro' which essentially is a convenient way to
group ASes. This is done so that each and every AS guardian does not
have to add a new AS to it's routing policy as described by the as-in
and as-out attributes of it's AS object.

However, it should be noted that this creates an implicit trust on
the guardian of the AS-Macro.

An AS-Macro can be used in <routing policy expressions> for the "as-
in" and "as-out" attributes in the aut-num object. The AS-Macro
object is then used to derive the list or group of ASes.

A simple example would be something like:

Example:

aut-num: AS786
as-in: from AS1755 100 accept AS-EBONE AND NOT AS1104
as-out to AS1755 announce AS786
.....

Where the as-macro object for AS-EBONE is as follows:

as-macro: AS-EBONE
descr: ASes routed by EBONE
as-list: AS2121 AS1104 AS2600 AS2122
as-list: AS1103 AS1755 AS2043
guardian: guardian@ebone.net
......

So the policy would be evaluated to:

aut-num: AS786
as-in: from AS1755 100 accept (AS2121 OR AS1104 OR AS2600 OR AS2122
as-in: from AS1755 100 accept AS1103 OR AS1755 OR
as-in: from AS1755 100 accept AS2043) AND NOT AS1104
......

It should be noted that the above examples incorporates the rule for
line wrapping as defined in Appendix A for policy lines. See
Appendix C for a definition on the AS-Macro syntax.

8. The Community Object

A community is a group of routes that cannot be represented by an AS
or a group of ASes. It is in some circumstances useful to define a
group of routes that have something in common. This could be a
special access policy to a supercomputer centre, a group of routes
used for a specific mission, or a disciplinary group that is
scattered among several autonomous systems. Also these communities
could be useful to group routes for the purpose of network
statistics.

Communities do not exchange routing information, since they do not
represent an autonomous system. More specifically, communities do
not define routing policies, but access or usage policies. However,
they can be used as in conjunction with an ASes routing policy to
define a set of routes the AS sets routing policy for.

Communities should be defined in a strict manner, to avoid creating
as many communities as there are routes, or even worse. Communities
should be defined following the two rules below;

+ Communities must have a global meaning. Communities that have
no global meaning, are used only in a local environment and
should be avoided.

+ Communities must not be defined to express non-local policies.
It should be avoided that a community is created because some
other organization forces a policy upon your organization.
Communities must only be defined to express a policy defined by
your organization.

Community examples

There are some clear examples of communities:

BACKBONE -
all customers of a given backbone service provider even though
they can have various different routing policies and hence
belong to different ASes. This would be extremely useful for
statistics collection.

HEPNET -
the High Energy Physics community partly shares infrastructure
with other organizations, and the institutes it consists of are
scattered all over Europe, often being part of a non HEPNET
autonomous system. To allow statistics, access or part of a
routing policy , a community HEPNET, consisting of all routes
that are part of HEPNET, conveniently groups all these routes.

NSFNET -
the National Science Foundation Network imposes an acceptable
use policy on routes that wish to make use of it. A community
NSFNET could imply the set of routes that comply with this
policy.

MULTI -
a large multinational corporation that does not have its own
internal infrastructure, but connects to the various parts of
its organizations by using local service providers that connect
them all together, may decide to define a community to restrict
access to their networks, only by networks that are part of this
community. This way a corporate network could be defined on
shared infrastructure. Also, this community could be used by any
of the service providers to do statistics for the whole of the
corporation, for instance to do topology or bandwidth planning.

Similar to Autonomous systems, each community is represented in the
RIPE database by both a community object and community tags on the
route objects representing the routes belonging to the community.
The community object stores descriptive, administrative and contact
information about the community.

The community tags on the route objects define the set of routes
belonging to a community. A route can have multiple community tags.
The community tags can only be created and updated by the "guardian"
of the community and not by those directly responsible for the
particular network. This ensures that community guardians remain in
control of community membership.

Here's an example of how this might be represented in terms of the
community tags within the network object. We have an example where
the route 192.16.199.0/24 has a single routing policy (i.e. that of
AS 1104), but is part of several different communities of interest.
We use the tag "comm-list" to represent the list of communities
associated with this route. NIKHEF-H uses the service provider
SURFNET (a service provider with customers with more than one routing

policy), is also part of the High Energy Physics community as well as
having the ability to access the Supercomputer at CERN (the community
`CERN-SUPER', is somewhat national, but is intended as an example of
a possible use of an access policy constraint).

Example:

route: 192.16.199.0/24
descr: Local Ethernet
descr: NIKHEF section H
origin: AS1104
comm-list: HEPNET CERN-SUPER SURFNET
changed: ripe-dbm@ripe.net 920604
source: RIPE

In the above examples some communities have been defined. The
community object itself will take the following format:

Example:

community: SURFNET
descr: Dutch academic research network
authority: SURFnet B.V.
guardian: comm-guardian@surfnet.nl
admin-c: Erik-Jan Bos
tech-c: Erik-Jan Bos
changed: ripe-dbm@ripe.net 920604
source: RIPE

For a complete explanation of the syntax please refer to Appendix B.

9. Representation of Routing Policies

Routing policies of an AS are represented in the autonomous system
object. Initially we show some examples, so the reader is familiar
with the concept of how routing information is represented, used and
derived. Refer to Appendix A, for the full syntax of the "aut-num"
object.

The topology of routing exchanges is represented by listing how
routing information is exchanged with each neighboring AS. This is
done separately for both incoming and outgoing routing information.
In order to provide backup and back door paths a relative cost is
associated with incoming routing information.

Example 1:

AS1------AS2

This specifies a simple routing exchange of two presumably isolated
ASes. Even if either of them has routing information about routes in
ASes other than AS1 and AS2, none of that will be announced to the
other.

aut-num: AS1
as-out: to AS2 announce AS1
as-in: from AS2 100 accept AS2

aut-num: AS2
as-out: to AS1 announce AS2
as-in: from AS1 100 accept AS1

The number 100 in the in-bound specifications is a relative cost,
which is used for backup and back door routes. The absolute value is
of no significance. The relation between different values within the
same AS object is. A lower value means a lower cost. This is
consciously similar to the cost based preference scheme used with DNS
MX RRs.

Example 2:

Now suppose that AS2 is connected to one more AS, besides AS1, and
let's call that AS3:

AS1------AS2------AS3

In this case there are two reasonable routing policies:

a) AS2 just wants to exchange traffic with both AS1 and AS3 itself
without passing traffic between AS1 and AS3.

b) AS2 is willing to pass traffic between AS3 and AS1, thus acting
as a transit AS

Example 2a:

In the first case AS1's representation in the routing registry will
remain unchanged as will be the part of AS2's representation
describing the routing exchange with AS1. A description of the
additional routing exchange with AS3 will be added to AS2's
representation:

aut-num: AS1
as-out: to AS2 announce AS1
as-in: from AS2 100 accept AS2

aut-num: AS2
as-out: to AS1 announce AS2
as-in: from AS1 100 accept AS1
as-out: to AS3 announce AS2
as-in: from AS3 100 accept AS3

aut-num: AS3
as-out: to AS2 announce AS3
as-in: from AS2 100 accept AS2

Note that in this example, AS2 keeps full control over its resources.
Even if AS3 and AS1 were to allow each others routes in from AS2, the
routing information would not flow because AS2 is not announcing it.
Of course AS1 and AS3 could just send traffic to each other to AS2
even without AS2 announcing the routes, hoping that AS2 will forward
it correctly. Such questionable practices however are beyond the
scope of this document.

Example 2b:

If contrary to the previous case, AS1 and AS3 are supposed to have
connectivity to each other via AS2, all AS objects have to change:

aut-num: AS1
as-out: to AS2 announce AS1
as-in: from AS2 100 accept AS2 AS3

aut-num: AS2
as-out: to AS1 announce AS2 AS3
as-in: from AS1 100 accept AS1
as-out: to AS3 announce AS2 AS1
as-in: from AS3 100 accept AS3

aut-num: AS3
as-out: to AS2 announce AS3
as-in: from AS2 100 accept AS1 AS2

Note that the amount of routing information exchanged with a neighbor
AS is defined in terms of routes belonging to ASes. In BGP terms
this is the AS where the routing information originates and the
originating AS information carried in BGP could be used to implement
the desired policy. However, using BGP or the BGP AS-path
information is not required to implement the policies thus specified.
Configurations based on route lists can easily be generated from the
database. The AS path information, provided by BGP can then be used
as an additional checking tool as desired.

The specification understands one special expression and this can be
expressed as a boolean expression:

ANY - means any routing information known. For output this means that
all routes an AS knows about are announced. For input it means
that anything is accepted from the neighbor AS.

Example 3:

AS4 is a stub customer AS, which only talks to service provider
AS123.

|
|
-----AS123------AS4
|
|

aut-num: AS4
as-out: to AS123 announce AS4
as-in: from AS123 100 accept ANY

aut-num: AS123
as-in: from AS4 100 accept AS4
as-out: to AS4 announce ANY
<further neighbors>

Since AS4 has no other way to reach the outside world than AS123 it
is not strictly necessary for AS123 to send routing information to
AS4. AS4 can simply send all traffic for which it has no explicit
routing information to AS123 by default. This strategy is called
default routing. It is expressed in the routing registry by adding
one or more default tags to the autonomous system which uses this
strategy. In the example above this would look like:

aut-num: AS4
as-out: to AS123 announce AS4
default: AS123 100

aut-num: AS123
as-in: from AS4 100 accept AS4
<further neighbors>

Example 4:

AS4 now connects to a different operator, AS5. AS5 uses AS123 for
outside connectivity but has itself no direct connection to AS123.
AS5 traffic to and from AS123 thus has to pass AS4. AS4 agrees to
act as a transit AS for this traffic.

|
|
-----AS123------AS4-------AS5
|
|

aut-num: AS4
as-out: to AS123 announce AS4 AS5
as-in: from AS123 100 accept ANY
as-out: to AS5 announce ANY
as-in: from AS5 50 accept AS5

aut-num: AS5
as-in: from AS4 100 accept ANY
as-out: to AS4 announce AS5

aut-num: AS123
as-in: from AS4 100 accept AS4 AS5
as-out: to AS4 announce ANY
<further neighbors>

Now AS4 has two sources of external routing information. AS5 which
provides only information about its own routes and AS123 which
provides information about the external world. Note that AS4 accepts
information about AS5 from both AS123 and AS5 although AS5
information cannot come from AS123 since AS5 is connected only via
AS4 itself. The lower cost of 50 for the announcement from AS5 itself
compared to 100 from AS123 ensures that AS5 is still believed even in
case AS123 will unexpectedly announce AS5.

In this example too, default routing can be used by AS5 much like in
the previous example. AS4 can also use default routing towards
AS123:

aut-num: AS4
as-out: to AS123 announce AS4 AS5
default: AS123 11
as-in: from AS5 50 accept AS5

Note no announcements to AS5, they default to us.

aut-num: AS5
as-out: to AS4 announce AS5
default: AS4 100

aut-num: AS123
as-in: from AS4 100 announce AS4 AS5
<further neighbors>

Note that the relative cost associated with default routing is
totally separate from the relative cost associated with in-bound
announcements. The default route will never be taken if an explicit
route is known to the destination. Thus an explicit route can never
have a higher cost than the default route. The relative cost
associated with the default route is only useful in those cases where
one wants to configure multiple default routes for redundancy.

Note also that in this example the configuration using default routes
has a subtly different behavior than the one with explicit routes: In
case the AS4-AS5 link fails AS4 will send traffic to AS5 to AS123
when using the default configuration. Normally this makes not much
difference as there will be no answer and thus little traffic. With
certain datagram applications which do not require acknowledgments
however, significant amounts of traffic may be uselessly directed at
AS123. Similarly default routing should not be used if there are
stringent security policies which prescribe any traffic intended for
AS5 to ever touch AS123.

Once the situation gets more complex using default routes can lead to
unexpected results or even defeat the routing policies established
when links fail. As an example consider how Example 5a) below could
be implemented using default routing. Therefore, generally it can be
said that default routing should only be used in very simple
topologies.

Example 5:

In a different example AS4 has a private connection to AS6 which in
turn is connected to the service provider AS123:

|
|
-----AS123------AS4
| |
| |
| |
AS6 ---------+

There are a number of policies worth examining in this case:

a) AS4 and AS6 wish to exchange traffic between themselves
exclusively via the private link between themselves; such
traffic should never pass through the backbone (AS123). The
link should never be used for transit traffic, i.e. traffic not
both originating in and destined for AS4 and AS6.

b) AS4 and AS6 wish to exchange traffic between themselves via the
private link between themselves. Should the link fail, traffic
between AS4 and AS6 should be routed via AS123. The link should
never be used for transit traffic.

c) AS4 and AS6 wish to exchange traffic between themselves via the
private link between themselves. Should the link fail, traffic
between AS4 and AS6 should be routed via AS123. Should the
connection between AS4 and AS123 fail, traffic from AS4 to
destinations behind AS123 can pass through the private link and
AS6's connection to AS123.

d) AS4 and AS6 wish to exchange traffic between themselves via the
private link between themselves. Should the link fail, traffic
between AS4 and AS6 should be routed via AS123. Should the
backbone connection of either AS4 or AS6 fail, the traffic of
the disconnected AS should flow via the other AS's backbone
connection.

Example 5a:

aut-num: AS4
as-in: from AS123 100 accept NOT AS6
as-out: to AS123 announce AS4
as-in: from AS6 50 accept AS6
as-out: to AS6 announce AS4

aut-num: AS123
as-in: from AS4 100 accept AS4
as-out: to AS4 announce ANY
as-in: from AS6 100 accept AS6
as-out: to AS6 announce ANY
<further neighbors>

aut-num: AS6
as-in: from AS123 100 accept NOT AS4
as-out: to AS123 announce AS6
as-in: from AS4 50 accept AS4
as-out: to AS4 announce AS6

Note that here the configuration is slightly inconsistent. AS123 will
announce AS6 to AS4 and AS4 to AS6. These announcements will be
filtered out on the receiving end. This will implement the desired
policy. Consistency checking tools might flag these cases however.

Example 5b:

aut-num: AS4
as-in: from AS123 100 accept ANY
as-out: to AS123 announce AS4
as-in: from AS6 50 accept AS6
as-out: AS6 AS4

aut-num: AS123
as-in: AS4 100 AS4
as-out: AS4 ANY
as-in: AS6 100 AS6
as-out: AS6 ANY
<further neighbors>

aut-num: AS6
as-in: from AS123 100 accept ANY
as-out: to AS123 announce AS6
as-in: from AS4 50 accept AS4
as-out: to AS4 announce AS6

The thing to note here is that in the ideal operational case, `all
links working' AS4 will receive announcements for AS6 from both AS123
and AS6 itself. In this case the announcement from AS6 will be
preferred because of its lower cost and thus the private link will be
used as desired. AS6 is configured as a mirror image.

Example 5c:

The new feature here is that should the connection between AS4 and
AS123 fail, traffic from AS4 to destinations behind AS123 can pass
through the private link and AS6's connection to AS123.

aut-num: AS4
as-in: from AS123 100 accept ANY
as-out: to AS123 announce AS4
as-in: from AS6 50 accept AS6
as-in: from AS6 110 accept ANY
as-out: to AS6 AS4

aut-num: AS123
as-in: from AS4 1 accept AS4
as-out: to AS4 announce ANY
as-in: from AS6 1 accept AS6
as-in: from AS6 2 accept AS4
as-out: to AS6 announce ANY
<further neighbors>

aut-num: AS6
as-in: from AS123 100 accept ANY
as-out: to AS123 AS6 announce AS4
as-in: from AS4 50 accept AS4
as-out: to AS4 announce ANY

Note that it is important to make sure to propagate routing
information for both directions in backup situations like this.
Connectivity in just one direction is not useful at all for almost
all applications.

Note also that in case the AS6-AS123 connection breaks, AS6 will only
be able to talk to AS4. The symmetrical case (5d) is left as an
exercise to the reader.

10. Future Extensions

We envision that over time the requirements for describing routing
policy will evolve. The routing protocols will evolve to support the
requirements and the routing policy description syntax will need to
evolve as well. For that purpose, a separate document will describe
experimental syntax definitions for policy description. This
document [14] will be updated when new objects or attributes are
proposed or modified.

11. References

[1] Bates, T., Jouanigot, J-M., Karrenberg, D., Lothberg, P.,
Terpstra, M., "Representation of IP Routing Policies in the RIPE
Database", RIPE-81, February 1993.

[2] Merit Network Inc.,"Representation of Complex Routing Policies
of an Autonomous System", Work in Progress, March 1994.

[3] PRIDE Tools Release 1.
See ftp.ripe.net:pride/tools/pride-tools-1.tar.Z.

[4] Merit Inc. RRDB Tools.
See rrdb.merit.edu:pub/meritrr/*

[5] The Network List Compiler.
See dxcoms.cern.ch:pub/ripe-routing-wg/nlc-2.2d.tar

[6] Lord, A., Terpstra, M., "RIPE Database Template for Networks and
Persons", RIPE-119, October 1994.

[7] Karrenberg, D., "RIPE Database Template for Domains", RIPE-49,
April 1992.

[8] Lougheed, K., Rekhter, Y., "A Border Gateway Protocol 3 (BGP-
3)", RFC1267, October 1991.

[9] Rekhter, Y., Li, T., "A Border Gateway Protocol 4 (BGP-4)",
RFC-1654, May 1994.

[10] Bates, T., Karrenberg, D., Terpstra, M., "Support for Classless
Internet Addresses in the RIPE Database", RIPE-121, October
1994.

[11] Karrenberg, D., "Authorisation and Notification of Changes in
the RIPE Database", RIPE-120, October 1994.

[12] Bates, T., "Support of Guarded fields within the RIPE Database",
ripe-117, July 1994.

[13] Estrin, D., Li, T., Rekhter, Y., Varadhan, K., Zappala, D.,
"Source Demand Routing: Packet Format and Forwarding
Specification (Version 1)", Work in Progress, March 1994.

[14] Joncheray, L., "Experimental Objects and attributes for the
Routing Registry", RIPE-182, October1994.

[15] Bates, T., "Specifying an `Internet Router' in the Routing

Registry", RIPE-122, October 1994.

[16] Bates, T., Karrenberg, D., Terpstra, M., "RIPE Database
Transition Plan", RIPE-123, October 1994.

12. Security Considerations

Security issues are beyond the scope of this memo.

13. Authors' Addresses

Tony Bates
MCI Telecommunications Corporation
2100 Reston Parkway
Reston, VA 22094
USA
+1 703 715 7521
Tony.Bates@mci.net

Elise Gerich
The University of Michigan
Merit Computer Network
1075 Beal Avenue
Ann Arbor, MI 48109
USA
+1 313 936 2120
epg@merit.edu

Laurent Joncheray
The University of Michigan
Merit Computer Network
1075 Beal Avenue
Ann Arbor, MI 48109
USA
+1 313 936 2065
lpj@merit.edu

Jean-Michel Jouanigot
CERN, European Laboratory for Particle Physics
CH-1211 Geneva 23
Switzerland
+41 22 767 4417
Jean-Michel.Jouanigot@cern.ch

Daniel Karrenberg
RIPE Network Coordination Centre
Kruislaan 409
NL-1098 SJ Amsterdam
The Netherlands
+31 20 592 5065
D.Karrenberg@ripe.net

Marten Terpstra
Bay Networks, Inc.
2 Federal St
Billerica, MA 01821
USA
+1 508 436 8036
marten@BayNetworks.com

Jessica Yu
The University of Michigan
Merit Computer Network
1075 Beal Avenue
Ann Arbor, MI 48109
USA
+1 313 936 2655
jyy@merit.edu

Appendix A - Syntax for the aut-num object.

Here is a summary of the tags associated with aut-num object itself
and their status. The first column specifies the attribute, the
second column whether this attribute is mandatory in the aut-num
object, and the third column whether this specific attribute can
occur only once per object [single], or more than once [multiple].
When specifying multiple lines per attribute, the attribute name must
be repeated. See [6] the example for the descr: attribute.

aut-num: [mandatory] [single]
as-name: [optional] [single]
descr: [mandatory] [multiple]
as-in: [optional] [multiple]
as-out: [optional] [multiple]
interas-in: [optional] [multiple]
interas-out: [optional] [multiple]
as-exclude: [optional] [multiple]
default: [optional] [multiple]
tech-c: [mandatory] [multiple]
admin-c: [mandatory] [multiple]
guardian: [mandatory] [single]
remarks: [optional] [multiple]
notify: [optional] [multiple]
mnt-by: [optional] [multiple]
changed: [mandatory] [multiple]
source: [mandatory] [single]

Each attribute has the following syntax:

aut-num:
The autonomous system number. This must be a uniquely allocated
autonomous system number from an AS registry (i.e. the RIPE NCC,
the Inter-NIC, etc).

Format:
AS<positive integer between 1 and 65535>

Example:

aut-num: AS1104

Status: mandatory, only one line allowed

as-name:
The name associated with this AS. This should as short but as
informative as possible.

Format:
Text consisting of capitals, dashes ("-") and digits, but must
start with a capital.

Example:

as-name: NIKHEF-H

Status: single, only one line allowed

descr:
A short description of the Autonomous System.

Format:
free text

Example:

descr: NIKHEF section H
descr: Science Park Watergraafsmeer
descr: Amsterdam

Status: mandatory, multiple lines allowed

as-in:
A description of accepted routing information between AS peers.

Format:
from <aut-num> <cost> accept <routing policy expression>

The keywords from and accept are optional and can be omitted.

<aut-num> refers to your AS neighbor.

<cost> is a positive integer used to express a relative cost
of routes learned. The lower the cost the more preferred the
route.

<routing policy expression> can take the following formats.

1. A list of one or more ASes, AS Macros, Communities or
Route Lists.

A Route List is a list of routes in prefix length format,

separated by commas, and surrounded by curly brackets
(braces, i.e. `{' and '}').

Examples:

as-in: from AS1103 100 accept AS1103
as-in: from AS786 105 accept AS1103
as-in: from AS786 10 accept AS786 HEPNET
as-in: from AS1755 110 accept AS1103 AS786
as-in: from AS3333 100 accept {192.87.45.0/16}

2. A set of KEYWORDS. The following KEYWORD is currently
defined:

ANY this means anything the neighbor AS knows.

3. A logical expression of either 1 or 2 above The current
logical operators are defined as:

AND
OR
NOT

This operators are defined as true BOOLEAN operators even
if the operands themselves do not appear to be BOOLEAN.
Their operations are defined as follows:

Operator Operation Example

OR UNION AS1 OR AS2
|
+-> all routes in AS1
or AS2.

AND INTERSECTION AS1 AND HEPNET
|
+-> a route in AS1 and
belonging to
community HEPNET.

NOT COMPLEMENT NOT AS3
|
+-> any route except
AS3 routes.

Rules are grouped together using parenthesis i.e "(" and
")".

The ordering of evaluation of operators and there
association is as follows:

Operator Associativity

() left to right
NOT right to left
AND left to right
OR left to right

NOTE: if no logical operator is given between ASes, AS-
macros, Communities, Route Lists and KEYWORDS it is
implicitly evaluated as an `OR' operation. The OR can be
left out for conciseness. However, please note the
operators are still evaluated as below so make sure you
include parentheses whenever needed. To highlight this
here is a simple example. If we denoted a policy of for
example; from AS1755 I accept all routes except routes
from AS1, A2 and AS3 and you enter the following as-in
line.

as-in: from AS1755 100 accept NOT AS1 AS2 AS3

This will be evaluated as:

as-in: from AS1755 100 accept NOT AS1 OR AS2 OR AS3

Which in turn would be evaluated like this:

(NOT AS1) OR AS2 OR AS3
-> ((ANY except AS1) union AS2) union AS3)
--> (ANY except AS1)

This is clearly incorrect and not the desired result. The
correct syntax should be:

as-in: from AS1755 100 accept NOT (AS1 AS2 AS3)

Producing the following evaluation:

NOT (AS1 OR AS2 OR AS3)
-> (ANY) except (union of AS1, AS2, AS3)

Which depicts the desired routing policy.
Note that can also be written as below which is perhaps
somewhat clearer:

as-in: from AS1755 100 accept ANY AND NOT
as-in: from AS1755 100 accept (AS1 OR AS2 OR AS3)

Examples:

as-in: from AS1755 100 accept ANY AND NOT (AS1234 OR AS513)
as-in: from AS1755 150 accept AS1234 OR {35.0.0.0/8}

A rule can be wrapped over lines providing the associated
<aut-num>, <cost> values and from and accept keywords are
repeated and occur on consecutive lines.

Example:

as-in: from AS1755 100 accept ANY AND NOT (AS1234 AS513)

and

as-in: from AS1755 100 accept ANY AND NOT (
as-in: from AS1755 100 accept AS1234 AS513)

are evaluated to the same result. Please note that the
ordering of these continuing lines is significant.

Status: optional, multiple lines allowed

as-out:
A description of generated routing information sent to other AS
peers.

Format:
to <aut-num> announce <routing policy expression

The to and announce keywords are optional and can be omitted.

<aut-num> refers to your AS neighbor.

<routing policy expression> is explained in the as-in
attribute definition above.

Example:

as-out: to AS1104 announce AS978
as-out: to AS1755 announce ANY
as-out: to AS786 announce ANY AND NOT (AS978)

Status: optional, multiple lines allowed

interas-in:
Describes incoming local preferences on an inter AS connection.

Format:
from <aut-num> <local-rid> <neighbor-rid> <preference> accept
<routing policy expression>

The keywords from and accept are optional and can be omitted.

<aut-num> is an autonomous system as defined in as-in.

<local-rid> contains the IP address of the border router in
the AS describing the policy. IP address must be in prefix
length format.

<neighbor-rid> contains the IP address of neighbor AS's border
router from which this AS accept routes defined in the
<routing policy expression>. IP addresses must be in prefix
length format.

<preference> is defined as follows:

(<pref-type>=<value>)

It should be noted the parenthesis "(" and ")" and the
"<pref-type>" keyword must be present for this preference to

be valid.

<pref-type> currently only supports "pref". It could be
expanded to other type of preference such as TOS/QOS as
routing technology matures.

<value> can take one of the following values:

<cost>
<cost> is a positive integer used to express a relative
cost of routes learned. The lower the cost the more
preferred the route. This <cost> value is only comparable
to other interas-in attributes, not to as-in attributes.

MED
This indicates the AS will use the
MUTLI_EXIT_DISCRIMINATOR (MED) metric, as implemented in
BGP4 and IDRP, sent from its neighbor AS.

NOTE: Combinations of MED and <cost> should be avoided
for the same destinations.

CAVEAT: The pref-type values may well be enhanced in the
future as more inter-ASs routing protocols introduce
other metrics.

Any route specified in interas-in and not specified in
as-in is assumed not accepted between the ASes concerned.
Diagnostic tools should flag this inconsistency as an
error. It should be noted that if an interas-in policy
is specified then it is mandatory to specify the
corresponding global policy in the as-in line. Please
note there is no relevance in the cost associated with
as-in and the preferences used in interas-in.
<routing policy expression> is an expression as defined in
as-in above.

Examples:

NB: This line is wrapped for readability.
interas-in: from AS1104 192.(pref=10)/accept.AS786.AS987
interas-in: from AS1104 192.87.45.(pref=20)2accept.AS987
interas-in: from AS1103 192.87.45.2(pref=MED)8accept2ANY

Status: optional, multiple lines allowed

interas-out:

Format:
to <aut-num> <local-rid> <neighbor-rid> [<metric>] announce
<routing policy expression>

The keywords to and announce are optional and can be omitted.

The definitions of <aut-num>, <local-rid> <neighbor-rid>, and
<routing policy expression> are identical to those defined in
interas-in.

<metric> is optional and is defined as follows:

(<metric-type>=<value>)

It should be noted the parenthesis "(" and ")" and the
keywords of "<metric-type>" must be present for this metric to
be valid.

<metric-type> currently only supports "metric-out". It could
be expanded to other type of preference such as TOS/QOS as
routing technology matures.
<value> can take one of the following values:

<num-metric>
<num-metric> is a pre-configured metric for out-bound
routes. The lower the cost the more preferred the route.
This <num-metric> value is literally passed by the
routing protocol to the neighbor. It is expected that it
is used there which is indicated by pref=MED on the
corresponding interas-in attribute. It should be noted
that whether to accept the outgoing metric or not is
totally within the discretion of the neighbor AS.

IGP
This indicates that the metric reflects the ASs internal
topology cost. The topology is reflected here by using
MED which is derived from the AS's IGP metric.

NOTE: Combinations of IGP and <num-metric> should be
avoided for the same destinations.

CAVEAT: The metric-out values may well be enhanced in the
future as more interas protocols make use of metrics.

Any route specified in interas-out and not specified in
as-out is assumed not announced between the ASes

concerned. Diagnostic tools should flag this
inconsistency as an error. It should be noted that if an
interas-out policy is specified then it is mandatory to
specify the corresponding global policy in the as-out
line.

Examples:

interas-out:ntoiAS1104p192.87.45.254/32t192.87.45.80/32
interas-out: to AS1104m192.87.45.254/32n192.87.45.80/32
interas-out: to AS1103 192.87.45.254/325192.87.45.80/32
(metric-out=IGP) announce ANY

Status: optional, multiple lines allowed

as-exclude:
A list of transit ASes to ignore all routes from.

Format:
exclude <aut-num> to <exclude-route-keyword>

Keywords exclude and to are optional and can again be omitted.

<aut-num> refers to the transit AS in question.

an <exclude-route-keyword> can be ONE of the following.

1. <aut-num>

2. AS macro

3. Community

4. ANY

Examples:

as-exclude: exclude AS690 to HEPNET

This means exclude any HEPNET routes which have a route via
AS690.

as-exclude: exclude AS1800 to AS-EUNET

This means exclude any AS-EUNET routes which have a route via
AS1800.

as-exclude: exclude AS1755 to AS1104

This means exclude any AS1104 route which have a route via
AS1755.

as-exclude: exclude AS1104 to ANY

This means exclude all routes which have a route via AS1104.

Status: optional, multiple lines allowed

default:
An indication of how default routing is done.

Format:
<aut-num> <relative cost> <default-expression>

where <aut-num> is the AS peer you will default route to,

and <relative cost> is the relative cost is a positive integer
used to express a preference for default. There is no
relationship to the cost used in the as-in tag. The AS peer
with the lowest cost is used for default over ones with higher
costs.

<default-expression> is optional and provides information on
how a default route is selected. It can take the following
formats:

1. static. This indicates that a default is statically
configured to this AS peer.

2. A route list with the syntax as described in the as-in
attribute. This indicates that this list of routes is
used to generate a default route. A special but valid
value in this is the special route used by some routing
protocols to indicate default: 0.0.0.0/0

3. default. This is the same as {0.0.0.0/0}. This means that
the routing protocol between these two peers generates a
true default.

Examples:

default: AS1755 10
default: AS786 5 {140.222.0.0/16, 192.87.45.0/24}
default: AS2043 15 default

Status: optional, multiple lines allowed

tech-c:
Full name or uniquely assigned NIC-handle of a technical contact
person. This is someone to be contacted for technical problems such
as misconfiguration.

Format:
<firstname> <initials> <lastname> or <nic-handle>

Example:

tech-c: John E Doe
tech-c: JED31

Status: mandatory, multiple lines allowed

admin-c:
Full name or uniquely assigned NIC-handle of an administrative
contact person. In many cases this would be the name of the
guardian.

Format:
<firstname> <initials> <lastname> or <nic-handle>

Example:

admin-c: Joe T Bloggs
admin-c: JTB1

Status: mandatory, multiple lines allowed

guardian:
Mailbox of the guardian of the Autonomous system.

Format:
<email-address>

The <email-address> should be in RFC822 domain format wherever
possible.

Example:

guardian: as1104-guardian@nikhef.nl

Status: mandatory, only one line and e-mail address allowed

remarks:
Remarks/comments, to be used only for clarification.

Format:
free text

Example:

remarks: Multihomed AS talking to AS1755 and AS786
remarks: Will soon connect to AS1104 also.

Status: optional, multiple lines allowed

notify:
The notify attribute contains an email address to which
notifications of changes to this object should be sent. See also
[11].

Format:
<email-address>

The <email-address> should be in RFC822 domain syntax wherever
possible.

Example:

notify: Marten.Terpstra@ripe.net

Status: optional, multiple lines allowed

mnt-by:
The mnt-by attribute contains a registered maintainer name. See
also [11].

Format:
<registered maintainer name>

Example:

mnt-by: RIPE-DBM

Status: optional, multiple lines allowed

changed:
Who changed this object last, and when was this change made.

Format:
<email-address> YYMMDD

<email-address> should be the address of the person who made
the last change. YYMMDD denotes the date this change was made.

Example:

changed: johndoe@terabit-labs.nn 900401

Status: mandatory, multiple lines allowed

source:
Source of the information.

This is used to separate information from different sources kept by
the same database software. For RIPE database entries the value is
fixed to RIPE.

Format:
RIPE
Status: mandatory, only one line allowed

Appendix B - Syntax details for the community object.

Here is a summary of the tags associated with community object itself
and their status. The first column specifies the attribute, the
second column whether this attribute is mandatory in the community
object, and the third column whether this specific attribute can
occur only once per object [single], or more than once [multiple].
When specifying multiple lines per attribute, the attribute name must
be repeated. See [6] the example for the descr: attribute.

community: [mandatory] [single]
descr: [mandatory] [multiple]
authority: [mandatory] [single]
guardian: [mandatory] [single]
tech-c: [mandatory] [multiple]
admin-c: [mandatory] [multiple]
remarks: [optional] [multiple]
notify: [optional] [multiple]
mnt-by: [optional] [multiple]
changed: [mandatory] [multiple]
source: [mandatory] [single]

Each attribute has the following syntax:

community:
Name of the community. The name of the community should be
descriptive of the community it describes.

Format:
Upper case text string which cannot start with "AS" or any
of the <routing policy expression> KEYWORDS. See Appendix
A.

Example:

community: WCW

Status: mandatory, only one line allowed

descr:
A short description of the community represented.

Format:
free text

Example:

descr: Science Park Watergraafsmeer
descr: Amsterdam

Status: mandatory, multiple lines allowed

authority:
The formal authority for this community. This could be an
organisation, institute, committee, etc.

Format:
free text

Example:

authority: WCW LAN Committee

Status: mandatory, only one line allowed

guardian:
Mailbox of the guardian of the community.

Format:
<email-address>

The <email-address> should be in RFC822 domain format
wherever possible.

Example:

guardian: wcw-guardian@nikhef.nl

Status: mandatory, only one line and email address allowed

tech-c:
Full name or uniquely assigned NIC-handle of an technical
------分隔线----------------------------
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
推荐内容