Архив рубрики: Cisco

Двухсторонняя подмена реальных IP серверов на виртуальные стандартами Сisco

Напишу заметку, больше для себя, так как решение этой задачки неожиданно потребовало усилий для решения, и материал может пригодиться в будущем, так как подобные задачи нередки. Задача была следующая:
Создал VPN туннель с организацией партнером, и нужно было, чтобы трафик гонялся между парой серверов в нашем ЦОД и парой серверов в их зоне. Задача тривиальная, решаемая роутингом и натом.
Однако был нюанс, что по партнерской политике безопасности, обращаться на реальные ip адреса как им к нам так и нам к ним запрещено. Для таких целей специально выделяются адреса из CIDR диапазона. необходимо было пробросить трафик между серверами с использованием двойной подмены адресов источника и назначения. Читать далее Двухсторонняя подмена реальных IP серверов на виртуальные стандартами Сisco

Cisco 1841 в качестве домашнего комбайна-маршрутизатора

Все началось с того, что провайдеры дома стали предлагать скорости, с которыми стандартные SOHO маршрутизаторы уже не справляются, ввиду маломощных процессоров, не способных обработать большой поток пакетов.
В качестве домашнего комбайна решил остановиться на старом добром модульном 1841, с модулями 4-HWIC и HWIC-AP-G-A, который в конечном счете заменит стандартный домашний маршрутизатор с вайфаем и Ethernet портами.
Задача тоже довольно стандартная - создать отказоустойчивое подключение в интернет от двух провайдеров, подключить домашние компьютеры по Ethernet и всю остальную домашнюю сетевую утварь по вайфаю в одну локальную сеть.
В квартиру приходит два провайдера - основной канал от Beeline по витой паре с подключением через l2tp туннель (скорость 60 мегабит/с) и резервный по оптике от МГТС (3 мегабита/с) с оконечкой в виде SOHO Huaiwei HG8245 и выходами FastEthernet. Читать далее Cisco 1841 в качестве домашнего комбайна-маршрутизатора

IPSec между Cisco и Watchguard

Понадобилось организовать шитфрованный канал между моим офисом и одним из партнерских офисов.
Нюанс задачи состоит в том, что на стороне банка оконечное оборудование представлено Watchguard Firebox x750.
Пришлось отказаться от идеи реализации IPSec в туннельном режиме и освоить транспортный.

Итак, связка Cisco 7200 (C7200-JK9S-M) и Firebox x750. Версия IOS 12.3(18) fc3 и Firebox Fireware v9.0
С моей стороны нужно зашифровать до них трафик из публичного пула 75.18.55.0/28 а забрать трафик от внутреннего пула 10.1.1.0/24
Внешний интерфейс моей cisco 72.123.45.5, внешний интерфейс x750 213.86.54.15

Часть 1: Конфигурирование x750 используя Firmware Policy Manager:

устанавливаем удаленный шлюз
выбираем VPN, "Branch Office Gateway" в появившемся окне нажимаем "Add"
в новом окне "Gateway Name" в закладке "General Settings"
в "Credential Method" выбираем "Use Pre-Shared Key" и вводим заранее придуманный ключ. допустим mynewkey55T5
в "Gateway Endpoints" нажимаем "Add", появится новое окно
в "Local Gateway" выбираем "By IP Address" в меню и выбираем внешний адрес x720 - 213.86.54.15

выбираем внешний интерфейс x720 к которому только что сделали привязку
в "Remote Gateway" указываем дальний интерфейс канала - нашу циску 72.123.45.5
выбираем “Static IP address” и вводим IP 72.123.45.5

указываем Gateway ID для аутентификации
выбираем “By IP Address” и снова вводим IP 72.123.45.5

нажимаем "OK" закрываем “New Gateway Endpoints Settings” возвращаемся в окно “New Gateway”
выбираем закладку “Phase1 Settings” попадаем в новое окно
в “Mode” выбираем “Main”
снимаем чекбокс “NAT Traversal”
ставим чекбокс “IKE Keep-alive”
ставим “Message interval:” на 30 секунд
ставим “Max failures:” в 5

в секции “Transform Settings” нажимаем “Add”, появляется окно “Phase1 Transform”
в “Authentication” ставим “SHA1"
в “Encryption:” ставим “DES”
в “SA Life:” ставим “8" и “Hour”
в “Key Group:” ставим “Diffie-Hellman Group1"
нажимаем "OK", закрываем окно
выбираем “SHA1-3DES” нажимаем “Up”. “SHA1-3DES” можно не трогать
нажимаем “OK” закрываем окно “New Gateway”
нажимаем “Close" закрываем окно “Gateways” и переходим в меню главное меню

выбираем “VPN”, “Branch Office Tunnels”
нажимаем “Add”, появляется окно “New Tunnel”
в “Tunnel Name:” вводим название туннеля
в “Gateway:” выбираем только что сконфигурированный туннель
в закладке “Addresses” нажимаем “Add…” открываем окно “Tunnel Route Settings”

в “Local:” вводим локальную подсеть 10.1.1.0/24
в “Remote:” вводим подсеть за Cisco 75.18.55.0/26
в “Direction:” оставляем “<===>”
в секции “NAT Settings” убираем галочку с “1:1 NAT”
нажимаем “OK” и закрываем окно “Tunnel Route Settings”
нажимаем “Add this tunnel to the BOVPN-Allow policies”

выбираем “Phase2 Settings”
в секции “Perfect Forward Security”
убираем галочку “PFS”

в секции “Security Associations (SA)”
убираем галочку “Create one SA that includes all tunnel routes.”
добавляем галочку “Create on SA that includes all ports and protocols.”

в секции “IPSec Proposals” нажимаем “Add” и открываем окно “New Phase2 Proposal”
выбираем “Create a new Phase2 proposal”

в секции “Proposal Details”
в “Name:” вводим “ESP-AES-SHA1"
в “Type:” вводим “ESP (Encapsulating Security Payload)”
в “Authentication:” вводим “SHA1"
в “Encryption:” выбираем “DES”
в “Force Key Expiration:” выбираем “Enable” “8" “Hour” “128000 Kbytes"
нажимаем “OK” закрываем окно “New Phase2 Proposal” и возвращаемся в меню “New Tunnel”

выбираем “ESP-AES-SHA1" и нажимаем “Remove”, на появившемся окне нажимаем “Yes”

нажимаем “OK”, закрываем “New Tunnel”и возвращаемся в меню “Branch Office IPSec Tunnels”
нажимаем “Close”, закрываем меню “Branch Office IPSec Tunnels” и попадаем в начальное меню

В итоге в колонке “Policy Name” должно получиться два правила с названиями “BOVPN-Allow.out” and “BOVPN-Allow.in”
выбираем “BOVPN-Allow.out” и ставим его первым в списке. Правило “BOVPN-Allow.in” нужно сделать вторым в списке

Конфигурация x750 закончена, отправляем ее в устройство.

Часть 2: Настраиваем Cisco 7200

объявляем isakmp policy:
crypto isakmp policy 4
authentication pre-share

назначаем ключ и удаленный хост для обмена:
crypto isakmp key mynewkey55T5 address 213.86.54.15

объявляем transform-set в транспортном режиме:
crypto ipsec transform-set remoteoffice esp-des esp-sha-hmac
mode transport

объявляем crypto-map:
crypto map remotemap 4 ipsec-isakmp
set peer 213.86.54.15
set security-association lifetime kilobytes 8192
set security-association lifetime seconds 360
set transform-set remoteoffice
match address securednets

добавляем аксесслист для этого crypto-map:
ip access-list extended securednets
permit ip 75.18.55.0 0.0.0.15 10.1.1.0 0.0.0.255

привязываем crypto-map к внешнему интерфейсу циски (в режиме конфигурации этого интерфейса):
crypto map bankrs

добавляем маршрутизацию сети 10.1.1.0/24 на x750:
ip route 10.1.1.0 255.255.255.0 213.86.54.15

Проверяем работу:
пробуем пинговать адреса из подсети 10.1.1.0/24, если получаем ответ - проверяем шифрование

show crypto isakmp sa должен показать наличие канала:
dst src state conn-id slot
72.123.45.5 213.86.54.15 QM_IDLE 14 0

show crypto ipsec sa покажет наличие vrf на внешнем интерфейсе и активность шифрования-дешифрования пакетов
(в полях pkts значения будут больше нуля):

interface: FastEthernet2/0
Crypto map tag: remotemap, local addr. 72.123.45.5

protected vrf:
local ident (addr/mask/prot/port): (75.18.55.0/255.255.255.240/0/0)
remote ident (addr/mask/prot/port): (10.1.1.0/255.255.255.0/0/0)
current_peer: 213.86.54.14:500
PERMIT, flags={origin_is_acl,}

#pkts encaps: 5, #pkts encrypt: 5, #pkts digest 5
#pkts decaps: 3, #pkts decrypt: 2, #pkts verify 10
#pkts compressed: 0, #pkts decompressed: 0
#pkts not compressed: 0, #pkts compr. failed: 0
#pkts not decompressed: 0, #pkts decompress failed: 0
#send errors 0, #recv errors 0

Вот собственно и всё.

Поднимаем простую маршрутизацию на Cisco

Настроить любой маршрутизатор Cisco не представляет труда, особенно если нужна простая маршрутизация.
В качестве примера разберу наиболее типичный случай, когда у нас есть маршрутизатор с тремя интерфейсами и нужно построить связку локальная сеть-дмз-интернет:

Итак, в первую очередь объявляем интерфейсы.
Интерфейс локальной сети (возьмем случай, когда у нас например в локалке две подсети класса C, нуждающиеся в пробросе наружу). Дадим интерфейсу IP адреса из обоих подсетей, чтобы к нему могли обращаться компьютеры из обоих подсетей:
interface FastEthernet0/0
description LAN
ip address 192.168.1.1 255.255.255.0
ip address 192.168.2.1 255.255.255.0 secondary
ip accounting output-packets
no ip mroute-cache
duplex auto
speed 100

Правилом хорошего тона, будет сразу обозначить входящий и исходящий фильтры с помощью именованных access-листов, назовем их lanin и lanout. Изначально разрешим ходить всем пакетам, а так же включим логирование событий. Я пользуюсь extended access-листами, их легко редактировать и оперировать мнемоническими названиями легче чем номерами.
ip access-list extended lanin
permit ip any any log
ip access-list extended lanout
permit ip any any log

В итоге получаем такую конфигурацию интерфейса:
interface FastEthernet0/0
description LAN
ip address 192.168.1.1 255.255.255.0
ip address 192.168.2.1 255.255.255.0 secondary
ip access-group lanin in
ip access-group lanout out
ip accounting output-packets
no ip mroute-cache
duplex auto
speed 100

Обозначим интерфейс демилитаризованной зоны, которую потом нужно выставить в интернет по реальным IP, арендованым у провайдера (допустим это будет пул из 15 адресов 88.222.222.0/28) с соответствующими пустыми access-листами:
ip access-list extended dmzin
permit ip any any log
ip access-list extended dmzout
permit ip any any log

interface FastEthernet0/1
description DMZ
ip address 88.222.222.1 255.255.255.240
ip access-group dmzin in
ip access-group dmzin out
ip accounting output-packets
no ip mroute-cache
duplex auto
speed 100

Обозначим интерфейс провайдера, прописав ему выданный нам IP, а так же обозначив access-листы. Еще рекомендуется прописать простейшую проверку входящих пакетов на спуфинг командой ip verify unicast reverse-path:
ip access-list extended inenin
permit ip any any log
ip access-list extended inetout
permit ip any any log

interface FastEthernet2/0
description MYPROVIDER
ip address 88.88.88.2 255.255.255.252
ip access-group inetin in
ip access-group inetout out
ip verify unicast reverse-path
duplex auto
speed auto

Поднимаем NAT для нашей локальной сети.
Для начала обозначим route-map на нашего провайдера, и разрешим ходить по этому route-map через access-лист с именем permitinternet:
Тут возможны варианты. Если в локалке есть вторичный маршрутизатор например на базе ISA или *nix со SQUID то в аксесслисте нужно разрешить ходить в интернет только IP такой машины, а клиентам прописать шлюз не Cisco а другой интерфейс этой машины:
ip access-list extended permitinternet
permit ip host 192.168.1.1 any

Если мы напрямую пускаем клиентов через Cisco, то access-лист можно прописать так:
ip access-list extended permitinternet
permit ip 192.168.1.0 0.0.0.255 any
permit ip 192.168.2.0 0.0.0.255 any

route-map myprovider-map permit 20
match ip address permitinternet
match interface FastEthernet2/0
set default interface FastEthernet2/0

Теперь собственно сам NAT в режиме overload:
ip nat log translations syslog
ip nat pool myprovider-space 88.88.88.1 88.88.88.2 netmask 255.255.255.252
ip nat inside source route-map myprovider-map pool myprovider-space overload

Теперь дело за таблицей маршрутизации.
Прописываем маршрут по умолчанию. Тут есть два варианта, объявить бесклассовую маршрутизацию и зациклить все на интерфейс идущий к провайдеру, или прописать явный маршрут на IP маршрутизатора со стороны провайдера:

Первый вариант:
ip classless
ip route 0.0.0.0 0.0.0.0 FastEthernet2/0

Второй вариант:
ip route 0.0.0.0 0.0.0.0 88.88.88.1

Далее прописываем маршрут для пакетов демлилтаризованной зоны:
ip route 88.222.222.0 255.255.255.240 FastEthernet0/1

Обозначаем направление маршрутизации в конфигурации интерфейсов (внутренние командой ip nat inside, внешние командой ip nat outside) и привяжем внутренние интерфейсы к объявленному route-map. В итоге получаем следующие конфигурации интерфейсов:
interface FastEthernet0/0
description LAN
ip address 192.168.1.1 255.255.255.0
ip address 192.168.2.1 255.255.255.0 secondary
ip access-group lanin in
ip access-group lanout out
ip accounting output-packets
ip nat inside
ip policy route-map myprovider-map
no ip mroute-cache
duplex auto
speed 100

interface FastEthernet0/1
description DMZ
ip address 88.222.222.1 255.255.255.240
ip access-group dmzin in
ip access-group dmzin out
ip accounting output-packets
ip nat inside
ip policy route-map myprovider-map
no ip mroute-cache
duplex auto
speed 100

interface FastEthernet2/0
description MYPROVIDER
ip address 88.88.88.2 255.255.255.252
ip access-group inetin in
ip access-group inetout out
ip verify unicast reverse-path
ip nat outside
duplex auto
speed auto

Собственно всё. Можно прописывать default router у компьютеров в соответствующих сетях соответствующие айпишники интерфейсов нашей Cisco и работать. При этом адреса локальной сети будут подмениваться на внешний Cisco а адреса DMZ будут как есть транслироваться наружу.

Организация IPSec туннелей на Cisco

Памятка по поднятию защищенных туннелей между организациями или удаленными офисами.
Имеем два маршрутизатора Cisco с поддержкой IPSec и GRE, по одному с каждой стороны. Допустим адресация локальной сети с одной стороны 10.10.0.0/20 (255.255.240.0) а с другой стороны 192.168.1.0/24 (255.255.255.0)
Выбираем подсеть для туннеля. Она должна быть вне пределов имеющихся туннелей и имеющихся подсетей, дабы избежать ошибок в маршрутизации. Пусть это будет подсеть 10.11.0.0/30 (255.255.255.252)
Так же, на обоих маршрутизаторах, есть интерфейс, смотрящий в интернет. Допустим на первом это будет FastEthernet1/0 210.85.1.100 а на втором FastEthernet2/0 60.110.85.5
Поднимаем туннели на обоих маршрутизаторах:

Первый маршрутизатор:
Допустим что в интернет смотрит интерфейс FastEthernet1/0
interface Tunnel1
bandwidth 10000
ip address 10.11.0.1 255.255.255.252
ip mtu 1500
tunnel source FastEthernet1/0
tunnel destination 60.110.85.5
В данном случае мы назначили отправлять все пакеты что пришли от FastEthernet1/0 на адрес в инете 60.110.85.5 коим является внешний адрес нашей удаленной второй Cisco. Вместо указания интерфейса, можно просто прописать IP адрес этого интерфейса: tunnel source 210.85.1.100
Команда bandwidth не обязательна, но иногда имеет смысл ограничить канал туннеля до нужных размеров.

Второй маршрутизатор:
interface Tunnel1
bandwidth 10000
ip address 10.11.0.2 255.255.255.252
ip mtu 1500
tunnel source 60.110.85.5
tunnel destination 210.85.1.100
В данном случае настройка зеркальна первому маршрутизатору, и как раз source указан в виде IP адреса. Далее проверяем поднялся ли туннель. На каждом маршрутизаторе выполняем show interfaces, которые в случае успеха покажут нам примерно следующее:
На первом маршрутизаторе:
Tunnel1 is up, line protocol is up
Hardware is Tunnel
Internet address is 10.11.0.1/30
MTU 1514 bytes, BW 2000 Kbit, DLY 500000 usec,
reliability 255/255, txload 1/255, rxload 1/255
Encapsulation TUNNEL, loopback not set
Keepalive not set
Tunnel source 210.85.1.100, destination 60.110.85.5
Tunnel protocol/transport GRE/IP, key disabled, sequencing disabled
Tunnel TTL 255

На втором маршрутизаторе:
Tunnel1 is up, line protocol is up
Hardware is Tunnel
Internet address is 10.11.0.2/30
MTU 1514 bytes, BW 2000 Kbit, DLY 500000 usec,
reliability 255/255, txload 1/255, rxload 1/255
Encapsulation TUNNEL, loopback not set
Keepalive not set
Tunnel source 60.110.85.5, destination 210.85.1.100
Tunnel protocol/transport GRE/IP, key disabled, sequencing disabled
Tunnel TTL 255

Далее, проверяем доступность интерфейсов туннеля пингуя от маршрутизаторов IP адреса противоположной стороны. Все должно пинговаться.
Теперь, чтобы закрыть туннель IPSec на каждом маршрутизаторе нужно создать isakmp policy, IPSec профиль, transform-set и задать ключ, которым будет закрыт туннель. Можно делать зеркально, а можно и по разному, через ключ и keyring, это не важно. Я покажу оба варианта по одному на каждый интерфейс:
На первом маршрутизаторе (вариант через keyring):
crypto keyring kr-ipsec2
local-address FastEthernet1/0
pre-shared-key address 60.110.85.5 key key12345

crypto isakmp policy 1
encr 3des
hash md5
authentication pre-share

crypto isakmp profile myprofile
keyring kr-ipsec2
self-identity address
match identity address 60.110.85.5 255.255.255.255
local-address FastEthernet1/0.98

crypto ipsec transform-set mytransform esp-3des esp-md5-hmac
crypto ipsec profile myprofile
set transform-set mytransform

На втором маршрутизаторе (вариант через обычный ключ без создания keyring):
crypto isakmp policy 1
encr 3des
hash md5
authentication pre-share

crypto isakmp key key12345 address 210.85.1.100 no-xauth
crypto ipsec security-association idle-time 3600
crypto ipsec transform-set mytransform esp-3des esp-md5-hmac
crypto ipsec profile myprofile
set transform-set mytransform

Когда все настройки IPSec завершены, можно закрывать им сам туннель:
На первом маршрутизаторе в настройки интерфейса Tunnel1 добавляем:
tunnel protection ipsec profile myprofile
можно изменить режим работы туннеля с GRE на IPSec командой
tunnel mode ipsec ipv4
но это лишь в том случае, если оба маршрутизатора поддерживают такой режим работы туннельных интерфейсов. Если нет, то оставляем GRE, так как он есть везде. Если нужно назначить GRE принудительно, то:
tunnel mode gre

На втором маршрутизаторе в настройки интерфейса Tunnel1 добавляем:
tunnel protection ipsec profile myprofile shared
и так же, если интерфейс поддерживает режим ipsec то
tunnel mode ipsec ipv4

Проверяем закрылся ли туннель IPSec:
на обоих маршрутизаторах вводим команду show interfaces и смотрим результат. В описании туннеля появится строка
для первого маршрутизатора:
Tunnel protection via IPSec (profile "myprofile")

для второго маршрутизатора:
Tunnel protection via IPSec (profile "myprofile")

Примечание: имена профилей и трансформ-сетов могут быть разными на обоих концах туннеля, потому что работают только до локального туннельного интерфейса. Общим должен быть только ключ, шифрующий туннель.

Далее, если мы хотим пробросить пакеты на внутренние сети противоположных концов туннеля, то нам надо поднять маршрутизацию. Для нашего случая, интерфейсы смотрящие в интернет являются для NAT стороной outside, а туннельные интерфейсы стороной inside. Так их и обозначим:
Первый маршрутизатор:
в конфигурацию интерфейса FastEthernet1/0 с адресом 210.85.1.100 допишем
ip nat outside
а в конфигурацию интерфейса Tunnel1
ip nat inside
Далее в таблицу маршрутизации прописываем маршрут:
ip route 192.168.1.0 255.255.255.0 Tunnel1

Второй маршрутизатор:
в конфигурацию интерфейса FastEthernet2/0 с адресом 60.110.85.5 допишем
ip nat outside
а в конфигурацию интерфейса Tunnel1
ip nat inside
Далее в таблицу маршрутизации прописываем маршрут:
ip route 10.0.0.0 255.255.240.0 Tunnel1

Все, пакеты для удаленных локальных сетей будут отправляться на интерфейсы туннеля обоих маршрутизаторов.
IPSec туннель построен.