Border Gateway Protocol (BGP) is not merely a protocol—it’s the backbone of the...

Request a personalized demo/review session of our Intelligent Routing Platform
Evaluate Noction IRP, and see how it meets your network optimization challenges
Schedule a one-on-one demonstration of our network traffic analysis product
Test drive NFA today with your own fully featured 30-day free trial
Discover the latest Noction product and company news
The latest networking industry trends, opinion, and perspectives
Learn about who we are, our mission, and our values
Read our press releases to get the latest information on Noction
See the new job openings, our values and the corporate culture
Need help? Contact the Noction support team
Border Gateway Protocol (BGP) is not merely a protocol—it’s the backbone of the...
Get a custom IRP quote as per your network traffic 95th percentile
Simple, transparent and easy-to-understand pricing structure
Discover IRP features, review use cases and make informed decisions
Watch Noction IRP videos, screencasts and client testimonials
Technical Noction IRP documentation, deployment instructions and datasheets
Get a first-hand network performance view of the major Tier 1 Carriers
See answers to the questions we get asked the most about Noction IRP
Product overview, user guide and the deployment instructions documents
Practical and useful info on NFA and the overall NetFlow analysis
A series of the most common NFA questions and answers
24/7 network monitoring, maintenance, and event management services
Free custom-built Transit Providers performance evaluation reports
The free-of-charge live Tier 1 providers' performance monitoring service
Review network performance indicators of the top US-based carriers for the past month.
BGP routing optimization platform for utmost network performance
Free feature-restricted Intelligent Routing Platform version
Network traffic analysis, monitoring and alerting system
access-list 1 permit ip host 10.0.0.3 access-list 2 permit ip host 10.0.0.4 ! route-map irp-peer permit 10 match ip address 1 set ip next-hop 10.11.0.1 set interface Null0 ! route-map irp-peer permit 20 match ip address 2 set ip next-hop 10.12.0.1 set interface Null0 ! interface ve 3 ip policy route-map irp-peer
configure ipv4 access-list irp-peer 10 permit ipv4 host 10.0.0.3 any nexthop1 ipv4 10.11.0.1 nexthop2 ipv4 169.254.0.254 11 permit ipv4 host 10.0.0.4 any nexthop1 ipv4 10.12.0.1 nexthop2 ipv4 169.254.0.254 end router static address-family ipv4 unicast 169.254.0.254 Null0 end interface FastEthernet1/1 ipv4 access-group irp-peer ingress end
[edit interfaces] xe-0/0/0 { unit 3 { family inet { filter { input IRP-policy; } } } } [edit firewall] family inet { filter IRP-policy { term irp-peer1 { from { source-address 10.0.0.3/32; } then { routing-instance irp-isp1-route; } } term irp-peer2 { from { source-address 10.0.0.4/32; } then { routing-instance irp-isp2-route; } } term default { then { accept; } } } } [edit] routing-instances { irp-isp1-route { instance-type forwarding; routing-options { static { route 0.0.0.0/0 next-hop 10.11.0.1; } } } irp-isp2-route { instance-type forwarding; routing-options { static { route 0.0.0.0/0 next-hop 10.12.0.1; } } } } routing-options { interface-routes { rib-group inet irp-policies; } rib-groups { irp-policies { import-rib [ inet.0 irp-isp1-route.inet.0 irp-isp2-route.inet.0 ]; } } }
ip
toolset. To make these rules persistent, they should be also added to /etc/rc.local
on the Vyatta system.Listing 2.18: Vyatta IPv4 PBR configuration example
ip route add default via 10.11.0.1 table 101 ip route add default via 10.12.0.1 table 102 ip rule add from 10.0.0.3 table 101 pref 32001 ip rule add from 10.0.0.4 table 102 pref 32002
Listing 2.19: Vyatta (VC6.5 and up) IPv4 PBR configuration example
# Setup the routing policy: set policy route IRP-ROUTE set policy route IRP-ROUTE rule 10 destination address 0.0.0.0/0 set policy route IRP-ROUTE rule 10 source address 10.0.0.3/32 set policy route IRP-ROUTE rule 10 set table 103 set policy route IRP-ROUTE rule 20 destination address 0.0.0.0/0 set policy route IRP-ROUTE rule 20 source address 10.0.0.4/32 set policy route IRP-ROUTE rule 20 set table 104 set policy route IRP-ROUTE rule 30 destination address 0.0.0.0/0 set policy route IRP-ROUTE rule 30 source address 0.0.0.0/0 set policy route IRP-ROUTE rule 30 set table main commit # Create static route tables: set protocols static table 103 route 0.0.0.0/0 nexthop 10.11.0.1 set protocols static table 104 route 0.0.0.0/0 nexthop 10.12.0.1 commit # Assign policies to specific interfaces, Vlan 3 on eth1 in this example: set interfaces ethernet eth1.3 policy route IRP-ROUTE # Verify the configuration: show policy route IRP-ROUTE show protocols static show interfaces ethernet eth1.3
Following IP addresses are configured on the routers:
10.0.0.251
is configured on R1, VE310.0.0.252
is configured on R2, VE3
ip route add default via 10.0.0.251 table 201 ip route add default via 10.0.0.252 table 202 ip rule add from 10.0.0.3 table 201 pref 32101 ip rule add from 10.0.0.4 table 202 pref 32102
Some Brocade routers/switches have PBR configuration limitations. Please refer to the “Policy-Based Routing” → “Configuration considerations” section in the Brocade documentation for your router/switch model.
#Router R1 access-list 1 permit ip host 10.0.0.3 ! route-map irp-peer permit 10 match ip address 1 set ip next-hop 10.11.0.1 set interface Null0 ! interface ve 3 ip policy route-map irp-peer #Router R2 access-list 1 permit ip host 10.0.0.4 ! route-map irp-peer permit 10 match ip address 1 set ip next-hop 10.12.0.1 set interface Null0 ! interface ve 3 ip policy route-map irp-peer
modprobe ip_gre ip tunnel add tun0 mode gre remote 10.10.0.1 local 10.0.0.2 ttl 64 dev eth0 ip addr add dev tun0 10.0.1.2/32 peer 10.0.1.1/32 ip link set dev tun0 up
#/etc/sysconfig/network-scripts/ifcfg-tun0 DEVICE=tun0 TYPE=GRE ONBOOT=yes MY_INNER_IPADDR=10.0.1.2 MY_OUTER_IPADDR=10.0.0.2 PEER_INNER_IPADDR=10.0.1.1 PEER_OUTER_IPADDR=10.10.0.1 TTL=64
set interfaces tunnel tun0 set interfaces tunnel tun0 address 10.0.1.1/30 set interfaces tunnel tun0 description "IRP Tunnel 1" set interfaces tunnel tun0 encapsulation gre set interfaces tunnel tun0 local-ip 10.10.0.1 set interfaces tunnel tun0 remote-ip 10.0.0.2
interface Tunnel0 routers ip address 10.0.1.1 255.255.255.252 tunnel mode gre ip tunnel source Loopback1 tunnel destination 10.0.0.2
interfaces { gr-0/0/0 { unit 0 { tunnel { source 10.0.0.2; destination 10.10.0.1; } family inet { address 10.0.1.1/32; } } } }
ip route add default dev tun0 table 201 ip route add default dev tun1 table 202 ip route add default dev tun2 table 203 ip rule add from 10.0.1.2 table 201 pref 32101 ip rule add from 10.0.1.6 table 202 pref 32102 ip rule add from 10.0.1.10 table 202 pref 32103
Listing 2.28: IRP server IPv4 source-based routing via GRE using standard CentOS configuration files
#/etc/sysconfig/network-scripts/route-tun0: default dev tun0 table 201 default dev tun1 table 202 default dev tun2 table 203 #/etc/sysconfig/network-scripts/rule-tun0: from 10.0.1.2 table 201 pref 32101 from 10.0.1.6 table 202 pref 32102 from 10.0.1.10 table 203 pref 32103
#Router R1 access-list 1 permit ip host 10.0.1.2 access-list 2 permit ip host 10.0.1.6 ! route-map irp-peer permit 10 match ip address 1 set ip next-hop 10.11.0.1 set interface Null0 ! route-map irp-peer permit 20 match ip address 2 set ip next-hop 10.12.0.1 set interface Null0 ! interface Tunnel0 ip policy route-map irp-peer interface Tunnel1 ip policy route-map irp-peer #Router R2 access-list 1 permit ip host 10.0.1.10 ! route-map irp-peer permit 10 match ip address 1 set ip next-hop 10.13.0.1 set interface Null0 ! interface Tunnel0 ip policy route-map irp-peer
Listing 2.30: Cisco IPv4 PBR configuration template
!--- repeated block for each peering partner no route-map <ROUTEMAP> permit <ACL> no ip access-list extended <ROUTEMAP>-<ACL> ip access-list extended <ROUTEMAP>-<ACL> permit ip host <PROBING_IP> any dscp <PROBING_DSCP> route-map <ROUTEMAP> permit <ACL> match ip address <ROUTEMAP>-<ACL> set ip next-hop <NEXT_HOP> set interface Null0 !--- block at the end of PBR file interface <INTERFACE> ip policy route-map <ROUTEMAP>
The “<>” elements represent variables with the following meaning:
Listing 2.31: Cisco IPv4 PBR configuration template
!--- repeated block for each peering partner no route-map <ROUTEMAP> permit <ACL> no ip access-list extended <ROUTEMAP>-<ACL> ip access-list extended <ROUTEMAP>-<ACL> permit ip host <PROBING_IP> any dscp-matching <PROBING_DSCP> route-map <ROUTEMAP> permit <ACL> match ip address <ROUTEMAP>-<ACL> set ip next-hop <NEXT_HOP> set interface Null0 !--- block at the end of PBR file interface <INTERFACE> ip policy route-map <ROUTEMAP>
The “<>” elements represent variables with the same meaning as per Cisco example.
Listing 2.32: Juniper IPv4 PBR configuration template
load replace relative terminal [Type ^D at a new line to end input] interfaces { <INTERFACE> { unit <INTERFACE_UNIT> { family inet { filter { replace: input <ROUTEMAP>; } } } } } load replace relative terminal [Type ^D at a new line to end input] firewall { family inet { filter <ROUTEMAP> { replace: term <ROUTEMAP><ACL> { from { source-address <PROBING_IP>; dscp <PROBING_DSCP>; } then { routing-instance <ROUTEMAP><ACL>-route; } } ... replace: term default { then { accept; } } } } } load replace relative terminal [Type ^D at a new line to end input] routing-instances { replace: <ROUTEMAP><ACL>-route { instance-type forwarding; routing-options { static { route 0.0.0.0/0 next-hop <NEXT_HOP>; } } } ... } load merge relative terminal [Type ^D at a new line to end input] routing-options { interface-routes { replace: rib-group inet <ROUTEMAP>rib; } rib-groups { replace: <ROUTEMAP>rib { import-rib [ inet.0 <ROUTEMAP><ACL>-route.inet.0 ... ]; } } }
The “<>” elements represent variables with the following meaning:
Listing 2.33: PBR validation using `traceroute`
root@server ~ $ traceroute -m 5 8.8.8.8 -nns 10.0.0.3 traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets 1 10.0.0.1 0.696 ms 0.716 ms 0.783 ms 2 10.11.0.1 0.689 ms 0.695 ms 0.714 ms 3 84.116.132.146 14.384 ms 13.882 ms 13.891 ms 4 72.14.219.9 13.926 ms 14.477 ms 14.473 ms 5 209.85.240.64 14.397 ms 13.989 ms 14.462 ms root@server ~ $ traceroute -m 5 8.8.8.8 -nns 10.0.0.4 traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets 1 10.0.0.1 0.696 ms 0.516 ms 0.723 ms 2 10.12.0.1 0.619 ms 0.625 ms 0.864 ms 3 83.16.126.26 13.324 ms 13.812 ms 13.983 ms 4 72.14.219.9 15.262 ms 15.347 ms 15.431 ms 5 209.85.240.64 16.371 ms 16.991 ms 16.162 ms
Listing 2.34: PBR validation using Explorer self check
root@server ~ $ /usr/sbin/explorer -s Starting PBR check PBR check failed for provider A[2]. Diagnostic hop information: IP=10.11.0.12 TTL=3 PBR check succeeded for provider B[3]. Diagnostic hop information: IP=10.12.0.1 TTL=3
Listing 2.35: PBR validation using `iptables` and `traceroute`
root@server ~ $ iptables -t mangle -I OUTPUT -d 8.8.8.8 -j DSCP --set-dscp <PROBING_DSCP> root@server ~ $ traceroute -m 5 -nns <PROBING_IP> 8.8.8.8 traceroute to 8.8.8.8, 30 hops max, 60 byte packets 1 ... 2 ... 3 <NEXT_HOP> 126.475 ms !X^C
where
traceroute
command.
ISP1
– the provider’s name10.0.0.1
– Router IP configured on the probing Vlan10.0.0.3
– Probing IP for ISP1, configured on the IRP server10.11.0.1, 10.11.0.2
– IP addresses used for the EBGP session with the ISP, 10.11.0.2 being configured on the router400Mbps
– the agreed bandwidth1Gbps
– the physical interface throughput'
public
'
– read-only SNMP community configured on R1GigabitEthernet2/1
– the physical interface that connects R1 to ISP1
peer.1.95th = 400 peer.1.95th.bill_day = 1 peer.1.bgp_peer = R1 peer.1.cost = 6 peer.1.description = ISP1 peer.1.ipv4.next_hop = 10.11.0.1 peer.1.ipv4.probing = 10.0.0.3 peer.1.ipv4.diag_hop = 10.11.0.1 peer.1.ipv4.mon = 10.11.0.1 10.11.0.2 peer.1.limit_load = 1000 peer.1.shortname = ISP1 peer.1.snmp.interfaces = 1:GigabitEthernet2/1 peer.1.mon.ipv4.bgp_peer = 10.11.0.1 snmp.1.name = Host1 snmp.1.ip = 10.0.0.1 snmp.1.community = public
Listing 2.37: SNMP parameters validation
root@server ~ $ snmpwalk -v2c -c irp-public 10.0.0.1 ifDescr IF-MIB::ifDescr.1 = STRING: GigabitEthernet1/1 IF-MIB::ifDescr.2 = STRING: GigabitEthernet1/2 IF-MIB::ifDescr.3 = STRING: GigabitEthernet2/1 IF-MIB::ifDescr.4 = STRING: GigabitEthernet2/2 IF-MIB::ifDescr.5 = STRING: GigabitEthernet2/3 IF-MIB::ifDescr.6 = STRING: GigabitEthernet2/4 root@server ~ $ snmpwalk -v2c -c irp-public 10.0.0.1 ifIndex IF-MIB::ifIndex.1 = INTEGER: 1 IF-MIB::ifIndex.2 = INTEGER: 2 IF-MIB::ifIndex.3 = INTEGER: 3 IF-MIB::ifIndex.4 = INTEGER: 4 IF-MIB::ifIndex.5 = INTEGER: 5 IF-MIB::ifIndex.6 = INTEGER: 6