Ключевые слова:cisco, link, route, nat, policy, route-map, (найти похожие документы)
From: ВОЛКА <BOJIKA@mailru.com.>
Newsgroups: http://cisco.far.ru
Date: Mon, 20 Apr 2005 18:21:07 +0000 (UTC)
Subject: Настройка Cisco для выхода в сеть через двух провайдеров
Оригинал: http://cisco.far.ru/2isp.html
Два провайдера.
Часто бывает так, что локальная сеть имеет два выхода в Internet, то
есть двух провайдеров. Пусть это будут ISP1 и ISP2. эти два канала
можно использовать следующим образом:
* одновременно использовать два канала для load-balancing
* один канал основной, второй backup'ный
второй канал можно использовать также двумя способами
* использовать его при падении основного
* при загрузке основного канала на Х% подключать backup'ный
Если рассматривать вырожденный случай, когда провайдер один и два
канала, то тут всё просто. Надо прописать два маршрута по умолчанию
одинаковыми метриками
ip route 0.0.0.0 0.0.0.0 195.0.1.2
ip route 0.0.0.0 0.0.0.0 195.0.1.6
И соответственно если мы хотим сделать per-packet load-balancing, то
на всех интерфейсах, которые соединяют нас с провайдером, ставим no ip
route-cache, если же нужно per-destination, то на всех - ip
route-cache. Заметьте, что если хотя бы на одном выходном интерфейсе
используется NAT, то нельзя использовать per-packet, так как это
приведёт к пропаданию пакетов. Также применение policy routing
выключает fast switching.
Если ваша циска поддерживает cef (cisco express forwarding), то тогда
для per-packet
ip route-cache cef
ip cef per-packet
для per-destination
ip route-cache cef
ip cef per-destination
можно также договорится с провайдером, и объединить два канала в один
логический, используя ppp multilink.
Если провайдеров - два, то они оба а общем случае, предоставляют вам
по блоку адресов. Как их использовать? Разместить их за NAT'ом и
скрыть топологию сети или использовать реальные адреса? Первое более
просто реализовать и к томуже не будет потерян fast switching. Если
рассматривать второе, то устройства, имеющие ip адреса первого
провайдера, должны ходить через ISP1, а второго - через ISP2. Если
упал канал второго провайдера, то устройства с ip адресами из блока
второго провайдера не смогут выйти в Internet. Хорошо бы использовать
первый канал, но ip адреса - не те. Надо использовать NAT. Если же
выйдет из строя первый, то аналогично занатим и пустим через второго.
Так как имеем в сети два блока адресов, то надо применять
source-routing. Так как нам нужно определить source ip-адрес пакета, и
в зависимости от этого, отправить его либо ISP1 либо ISP два.
Если циска старая ли ios ip only, то есть не поддерживает VLAN'ы на
интерфейсе будет что-то типа
!
interface Ethernet0
ip address 195.0.1.1 255.255.255.0
ip address 195.0.2.1 255.255.255.0 secondary
ip nat inside
ip policy route-map ISP
!
если поддерживает ip plus и выше
!
interface Ethernet0/0.1
encapsulation dot1Q 1
ip address 195.0.1.1 255.255.255.0
ip nat inside
ip policy route-map ISP1
!
interface Ethernet0/0.2
encapsulation dot1Q 2
ip address 195.0.2.1 255.255.255.0
ip nat inside
ip policy route-map ISP
!
теперь разберёмся с route-map'ами
если вы решили разместить их за NAT'ом и скрыть топологию сети, то эту
часть можно пропустить. Надо только обязательно включить fast
switching, иначе работать не будет. В случае же когда используются
реальные адреса, то если внутренний интерфейс не поддерживает VLAN,
пишем следующее
! если это пакет локальный пакет, то пусть циска сама роутит...
route-map ISP deny Local
match ip address 100
! если пакет с адресом из первого провайдера и канал up
! то отправляем его первому провайдеру
route-map ISP permit 20
match ip address ISP1
set ip next-hop 194.16.0.5
! если пакет с адресом из второго провайдера и канал up
! то отправляем его второму провайдеру
route-map ISP permit 30
match ip address ISP2
set ip next-hop 194.16.0.9
!
если внутренний интерфейс поддерживает VLAN или внутренних интерфейсов
два, то
!
[skip]
!
route-map ISP1 permit 20
match ip address ISP1
set ip next-hop 194.16.0.5
!
[skip]
!
route-map ISP2 permit 20
match ip address ISP2
set ip next-hop 194.16.0.9
!
Local - это ACL, который ловит пакеты, source и destination адреса
которых из блоков, предоставленных первым или вторым провайдером.
ISP1 - это ACL, который ловит пакеты с source-адресами из блока,
предоставленного ISP1
ISP2 - это ACL, который ловит пакеты с source-адресами из блока,
предоставленного ISP2
ISP - это ACL, который ловит пакеты с source-адресами из блоков,
предоставленных ISP1 и ISP2
и так разобрались. Пакеты будут посланы на нужные интерфейсы. Теперь
разбираемся с NAT'ом.
Для NAT'а также нужно написать route-map.
!
route-map ISP2-NAT permit 10
match ip address ISP1
match interface Serial0/1
!
route-map ISP1-NAT permit 10
match ip address ISP2
match interface Serial0/0
!
! ISP1-pool - это пул ip-адресов, которые будут
! использованы при падении второго канала
ip nat inside source route-map ISP1-NAT pool ISP1-pool overload
!
! ISP2-pool - это пул ip-адресов, которые будут
! использованы при падении первого канала
ip nat inside source route-map ISP2-NAT pool ISP2-pool overload
!
вроде всё Рабочий конфиг смотрите в разделе "конфиги" (http://cisco.far.ru/config.shtml)
Оригинал: http://cisco.far.ru/2ispcfg.shtml
Задача состояла в следующем:
Есть 3640. Двумя серийниками s2/0 и s2/1 подключена к разным
провайдерам. Каждый провайдер предоставил по блоку адресов, первый
10.0.0.0/24 - второй 10.0.1.0/24. Каждый зи них роутит только свою
сетку. Нужно обеспечить доступ локальной сети в internet как, чтобы
хоcты с адресами из блока первого провайдера ходили через ISP1, а с
адресами из блока второго провайдера - через ISP2. При падении одного
из каналов хосты должны ходить через работающий канал.
Предложено решение: использовать Policy Routing + NAT
!
version 12.0
service timestamps debug uptime
service timestamps log uptime
no service password-encryption
!
hostname RouterC
!
enable secret 5 *****
!
ip subnet-zero
no ip domain-lookup
!
cns event-service server
!
voice-port 1/0/0
!
voice-port 1/0/1
!
voice-port 1/1/0
!
voice-port 1/1/1
!
interface Loopback0
ip address 10.0.3.1 255.255.255.0
no ip directed-broadcast
!
interface Ethernet0/0
ip address 10.0.0.1 255.255.255.0
ip address 10.0.1.1 255.255.255.0 secondary
no ip directed-broadcast
ip nat inside
ip policy route-map ISP
!
interface Serial0/0
no ip address
no ip directed-broadcast
no ip mroute-cache
shutdown
!
interface Serial0/1
no ip address
no ip directed-broadcast
shutdown
!
interface Serial2/0
ip address 192.168.0.6 255.255.255.252
no ip directed-broadcast
ip nat outside
!
interface Serial2/1
ip address 192.168.0.10 255.255.255.252
no ip directed-broadcast
ip nat outside
!
interface Serial2/2
no ip address
no ip directed-broadcast
shutdown
!
interface Serial2/3
no ip address
no ip directed-broadcast
shutdown
!
ip nat pool ISP1-pool 10.0.0.16 10.0.0.31 prefix-length 28
ip nat pool ISP2-pool 10.0.1.16 10.0.1.31 prefix-length 28
ip nat inside source route-map ISP1-NAT pool ISP1-pool overload
ip nat inside source route-map ISP2-NAT pool ISP2-pool overload
ip classless
ip route 0.0.0.0 0.0.0.0 192.168.0.5
ip route 0.0.0.0 0.0.0.0 192.168.0.9
no ip http server
!
access-list 1 permit 10.0.0.0 0.0.0.255
access-list 2 permit 10.0.1.0 0.0.0.255
access-list 100 permit ip 10.0.1.0 0.0.0.255 10.0.0.0 0.0.0.255
access-list 100 permit ip 10.0.0.0 0.0.0.255 10.0.1.0 0.0.0.255
route-map ISP1-NAT permit 10
match ip address 2
match interface Serial2/0
!
route-map ISP2-NAT permit 10
match ip address 1
match interface Serial2/1
!
route-map ISP deny 10
match ip address 100
!
route-map ISP permit 20
match ip address 1
set ip next-hop 192.168.0.5
!
route-map ISP permit 30
match ip address 2
set ip next-hop 192.168.0.9
!
snmp-server engineID local 000000090200003094A41BC1
!
line con 0
transport input none
line aux 0
no exec
transport input all
line vty 0 4
exec-timeout 0 0
password *****
login
!
end
http://cisco.far.ru/2ispdef.shtml
Задача состояла в следующем:
От двух провайдеров по BGP получаем default-route. Анонсим двум
провайдерам свою provider independent (PI) сетку 135.10.56.0/24.
Каналы не равноценные. Один - 1Mb, второй - 2Mb. Хотелось бы сделать
load-balancing 1:2. Данное решение не гарантирует, что будет
достигнуто именно это отношение, но оно должно быть близко к 1:2.
Балансировка будет per-destination. 10.0.0.1-3 левые адреса и нужны
лишь для того, чтобы сделать балансировку 1:2. CEF не обязателен, но
желателен.
ip cef
!
!
interface FastEthernet0/0
ip address 135.10.56.5 255.255.255.0
duplex auto
speed auto
!
interface Serial0/0
no ip address
encapsulation frame-relay
!
interface Serial0/0.1 point-to-point
ip address 135.10.15.2 255.255.255.252
frame-relay interface-dlci 504
!
interface Serial0/0.2 point-to-point
ip address 135.10.25.2 255.255.255.252
frame-relay interface-dlci 506
!
interface BRI0/0
no ip address
encapsulation hdlc
shutdown
!
interface FastEthernet0/1
no ip address
shutdown
duplex auto
speed auto
!
interface Serial0/1
no ip address
shutdown
!
router bgp 5
bgp log-neighbor-changes
network 135.10.56.0 mask 255.255.255.0
neighbor 135.10.15.1 remote-as 1
neighbor 135.10.15.1 prefix-list eBGP-OUT out
neighbor 135.10.25.1 remote-as 2
neighbor 135.10.25.1 prefix-list eBGP-OUT out
!
ip classless
ip route 0.0.0.0 0.0.0.0 10.0.0.1
ip route 0.0.0.0 0.0.0.0 10.0.0.2
ip route 0.0.0.0 0.0.0.0 10.0.0.3
ip route 10.0.0.1 255.255.255.255 135.10.15.1
ip route 10.0.0.2 255.255.255.255 135.10.15.1
ip route 10.0.0.3 255.255.255.255 135.10.25.1
ip http server
!
!
ip prefix-list eBGP-OUT seq 5 permit 135.10.56.0/24
!
Router#sh ip cef
Prefix Next Hop Interface
0.0.0.0/0 135.10.25.1 Serial0/0.2
135.10.15.1 Serial0/0.1
135.10.15.1 Serial0/0.1
Rack05R6#trace 135.10.100.1
Type escape sequence to abort.
Tracing the route to 135.10.100.1
1 135.10.56.5 4 msec 4 msec 0 msec
2 135.10.25.1 16 msec 16 msec 16 msec
3
Rack05R6#trace 135.10.100.2
Type escape sequence to abort.
Tracing the route to 135.10.100.2
1 135.10.56.5 4 msec 4 msec 0 msec
2 135.10.15.1 16 msec 16 msec 16 msec
3 135.10.15.1 !H
Rack05R6#trace 135.10.100.3
Type escape sequence to abort.
Tracing the route to 135.10.100.3
1 135.10.56.5 4 msec 4 msec 0 msec
2 135.10.15.1 16 msec 16 msec 16 msec
3 135.10.15.1 !H
Rack05R6#trace 135.10.100.4
Type escape sequence to abort.
Tracing the route to 135.10.100.4
1 135.10.56.5 0 msec 4 msec 0 msec
2 135.10.15.1 16 msec 16 msec 16 msec
3 135.10.15.1 !H
Rack05R6#trace 135.10.100.5
Type escape sequence to abort.
Tracing the route to 135.10.100.5
1 135.10.56.5 4 msec 0 msec 0 msec
2 135.10.25.1 16 msec 16 msec 16 msec
3
Rack05R6#trace 135.10.100.6
Type escape sequence to abort.
Tracing the route to 135.10.100.6
1 135.10.56.5 0 msec 4 msec 0 msec
2 135.10.15.1 16 msec 16 msec 16 msec
3 135.10.15.1 !H
Rack05R6#trace 135.10.100.7
Type escape sequence to abort.
Tracing the route to 135.10.100.7
1 135.10.56.5 0 msec 0 msec 4 msec
2 135.10.15.1 16 msec 16 msec 17 msec
3 135.10.15.1 !H
Rack05R6#trace 135.10.100.8
Type escape sequence to abort.
Tracing the route to 135.10.100.8
1 135.10.56.5 4 msec 4 msec 0 msec
2 135.10.15.1 16 msec 12 msec 16 msec
3 135.10.15.1 !H
Rack05R6#trace 135.10.100.9
Type escape sequence to abort.
Tracing the route to 135.10.100.9
1 135.10.56.5 0 msec 0 msec 4 msec
2 135.10.15.1 16 msec 16 msec 16 msec
3 135.10.15.1 !H * !H
Rack05R6#trace 135.10.100.10
Type escape sequence to abort.
Tracing the route to 135.10.100.10
1 135.10.56.5 4 msec 4 msec 0 msec
2 135.10.15.1 16 msec 16 msec 16 msec
3 135.10.15.1 !H
Rack05R6#trace 135.10.100.11
Type escape sequence to abort.
Tracing the route to 135.10.100.11
1 135.10.56.5 4 msec 4 msec 0 msec
2 135.10.25.1 16 msec 16 msec 16 msec
3 *
Rack05R6#trace 135.10.100.12
Type escape sequence to abort.
Tracing the route to 135.10.100.12
1 135.10.56.5 4 msec 0 msec 0 msec
2 135.10.25.1 17 msec 16 msec 16 msec
3 *
Rack05R6#trace 135.10.100.13
Type escape sequence to abort.
Tracing the route to 135.10.100.13
1 135.10.56.5 0 msec 4 msec 0 msec
2 135.10.15.1 16 msec 16 msec 16 msec
3 135.10.15.1 !H
Rack05R6#trace 135.10.100.14
Type escape sequence to abort.
Tracing the route to 135.10.100.14
1 135.10.56.5 0 msec 4 msec 0 msec
2 135.10.15.1 16 msec 16 msec 16 msec
3 135.10.15.1 !H
Rack05R6#trace 135.10.100.15
Type escape sequence to abort.
Tracing the route to 135.10.100.15
1 135.10.56.5 0 msec 4 msec 0 msec
2 135.10.15.1 12 msec 16 msec 16 msec
3 135.10.15.1 !H
Rack05R6#trace 135.10.100.16
Type escape sequence to abort.
Tracing the route to 135.10.100.16
1 135.10.56.5 4 msec 0 msec 0 msec
2 135.10.15.1 16 msec 16 msec 16 msec
3 135.10.15.1 !H
Rack05R6#trace 135.10.100.17
Type escape sequence to abort.
Tracing the route to 135.10.100.17
1 135.10.56.5 0 msec 0 msec 4 msec
2 135.10.25.1 16 msec 16 msec 16 msec
3
Rack05R6#trace 135.10.100.18
Type escape sequence to abort.
Tracing the route to 135.10.100.18
1 135.10.56.5 0 msec 4 msec 0 msec
2 135.10.15.1 16 msec 16 msec 16 msec
3 135.10.15.1 !H
Rack05R6#trace 135.10.100.19
Type escape sequence to abort.
Tracing the route to 135.10.100.19
1 135.10.56.5 4 msec 0 msec 4 msec
2 135.10.15.1 16 msec 16 msec 16 msec
3 135.10.15.1 !H
Rack05R6#trace 135.10.100.20
Type escape sequence to abort.
Tracing the route to 135.10.100.20
1 135.10.56.5 0 msec 4 msec 0 msec
2 135.10.15.1 16 msec 16 msec 16 msec
3 135.10.15.1 !H
Rack05R6#
с выключенным cef
Rack05R6#trace 135.10.101.1
Type escape sequence to abort.
Tracing the route to 135.10.101.1
1 135.10.56.5 0 msec 4 msec 4 msec
2 135.10.25.1 16 msec 16 msec 16 msec
3
Rack05R6#trace 135.10.101.2
Type escape sequence to abort.
Tracing the route to 135.10.101.2
1 135.10.56.5 0 msec 0 msec 4 msec
2 135.10.15.1 16 msec 16 msec 16 msec
3 135.10.15.1 !H
Rack05R6#trace 135.10.101.3
Type escape sequence to abort.
Tracing the route to 135.10.101.3
1 135.10.56.5 4 msec 0 msec 4 msec
2 135.10.15.1 16 msec 16 msec 16 msec
3 135.10.15.1 !H
Rack05R6#trace 135.10.101.4
Type escape sequence to abort.
Tracing the route to 135.10.101.4
1 135.10.56.5 4 msec 4 msec 0 msec
2 135.10.15.1 20 msec 16 msec 16 msec
3 135.10.15.1 !H
Rack05R6#trace 135.10.101.5
Type escape sequence to abort.
Tracing the route to 135.10.101.5
1 135.10.56.5 0 msec 4 msec 4 msec
2 135.10.15.1 16 msec 16 msec 16 msec
3 135.10.15.1 !H
Rack05R6#trace 135.10.101.6
Type escape sequence to abort.
Tracing the route to 135.10.101.6
1 135.10.56.5 4 msec 0 msec 4 msec
2 135.10.15.1 16 msec 16 msec 16 msec
3 135.10.15.1 !H
Rack05R6#trace 135.10.101.7
Type escape sequence to abort.
Tracing the route to 135.10.101.7
1 135.10.56.5 0 msec 4 msec 0 msec
2 135.10.15.1 16 msec 16 msec 16 msec
3 135.10.15.1 !H
Rack05R6#trace 135.10.101.8
Type escape sequence to abort.
Tracing the route to 135.10.101.8
1 135.10.56.5 4 msec 4 msec 0 msec
2 135.10.25.1 16 msec 13 msec 12 msec
3
Rack05R6#trace 135.10.101.9
Type escape sequence to abort.
Tracing the route to 135.10.101.9
1 135.10.56.5 4 msec 4 msec 0 msec
2 135.10.25.1 16 msec 16 msec 17 msec
3
Rack05R6#trace 135.10.101.10
Type escape sequence to abort.
Tracing the route to 135.10.101.10
1 135.10.56.5 0 msec 4 msec 4 msec
2 135.10.25.1 16 msec 16 msec 16 msec
3
Rack05R6#trace 135.10.101.11
Type escape sequence to abort.
Tracing the route to 135.10.101.11
1 135.10.56.5 4 msec 4 msec 0 msec
2 135.10.25.1 12 msec 12 msec 16 msec
3
Rack05R6#trace 135.10.101.12
Type escape sequence to abort.
Tracing the route to 135.10.101.12
1 135.10.56.5 4 msec 4 msec 0 msec
2 135.10.15.1 20 msec 16 msec 16 msec
3 135.10.15.1 !H
Rack05R6#trace 135.10.101.13
Type escape sequence to abort.
Tracing the route to 135.10.101.13
1 135.10.56.5 0 msec 0 msec 4 msec
2 135.10.15.1 16 msec 16 msec 16 msec
3 135.10.15.1 !H
Rack05R6#trace 135.10.101.14
Type escape sequence to abort.
Tracing the route to 135.10.101.14
1 135.10.56.5 0 msec 0 msec 4 msec
2 135.10.15.1 16 msec 16 msec 16 msec
3 135.10.15.1 !H
Rack05R6#trace 135.10.101.15
Type escape sequence to abort.
Tracing the route to 135.10.101.15
1 135.10.56.5 0 msec 4 msec 0 msec
2 135.10.15.1 12 msec 16 msec 16 msec
3 135.10.15.1 !H
Rack05R6#trace 135.10.101.16
Type escape sequence to abort.
Tracing the route to 135.10.101.16
1 135.10.56.5 0 msec 4 msec 0 msec
2 135.10.15.1 16 msec 16 msec 16 msec
3 135.10.15.1 !H
Rack05R6#trace 135.10.101.17
Type escape sequence to abort.
Tracing the route to 135.10.101.17
1 135.10.56.5 0 msec 0 msec 4 msec
2 135.10.15.1 16 msec 16 msec 16 msec
3 135.10.15.1 !H
Rack05R6#trace 135.10.101.18
Type escape sequence to abort.
Tracing the route to 135.10.101.18
1 135.10.56.5 4 msec 4 msec 0 msec
2 135.10.25.1 16 msec 12 msec 12 msec
3
Rack05R6#trace 135.10.101.19
Type escape sequence to abort.
Tracing the route to 135.10.101.19
1 135.10.56.5 0 msec 4 msec 4 msec
2 135.10.25.1 16 msec 16 msec 16 msec
3
Rack05R6#trace 135.10.101.20
Type escape sequence to abort.
Tracing the route to 135.10.101.20
1 135.10.56.5 0 msec 4 msec 4 msec
2 135.10.15.1 16 msec 16 msec 16 msec
3 135.10.15.1 !H
Rack05R6#