Темы
Введение
Постановка
Подключение к циске
Соединение с PPTP-сервером
NAT
Используем внешние ресурсы
Настройка циски в качестве DNS и DHCP сервера
Введение
Думаешь, что работать с сетевым оборудованием Cisco Systems могут только бородатые дядьки с сертификатами не ниже CCIE? Постараюсь тебя в этом переубедить.
В наше время только ленивый или далекий от компьютеров не слышал о Cisco. Эта компания довольно давно работает в сфере информационных технологий и разрабатывает сетевое оборудование, которое позволяет решить практически все возникающие задачи. Как ты понимаешь, стоят такие устройства не $10, а намного дороже. Поэтому я советую сначала потренироваться на эмуляторах (Xenomips, GNS3, Boson Router Simulator), и только потом переходить к реальным системам. А если тебе не терпится повертеть в руках железку от Cisco, то можешь походить по различным барахолкам и приобрести оборудование там. Именно так я и поступил, купив маршрутизатор Cisco 1721 и модуль расширения WIC-4ESW (Switch на 4 порта) за 10k деревянных. Вполне нормально, если сравнивать с ценами в магазинах (там бы с меня содрали еще тысяч 20, как минимум). Думаю, ты сам разберешься, какую модель прикупить, а я пока расскажу про используемое программное обеспечение.
- Код: выделить все
Cisco IOS
IOS (Internetwork Operation System, межсетевая операционная система) устанавливается на сетевое оборудование Cisco и предоставляет возможность гибкой настройки системы. По-хорошему, IOS нужно покупать, но если ты ограничен в средствах, можешь поискать нужный IOS-образ на форумах (например, torrents.ru/forum). Версию операционной системы подбирай под конкретные задачи. Допустим, имидж IOS называется так: c1700-ipbasek9-mz.124-12.bin (на моей cisco установлен именно он). В данном случае:
- c1700 означает, что IOS предназначен для оборудования 17-й серии;
- ipbasek9 - набор возможностей; ipbase расшифровывается как начальный уровень функциональности, обеспечивает базовый роутинг, то есть статические маршруты, RIP, OSPF, EIGRP, только на IPv4, включает NAT и VLAN'ы (802.1q и ISL); k9 - поддержка шифрования;
- mz показывает, что файл является бинарным (для сжатых используется tar);
- 124-12 - номер релиза.
- Код: выделить все
cisco#show version
Эта команда выдаст полную информацию о твоей cisco - количество памяти, uptime, модель процессора, доступные интерфейсы, значение конфигурационного регистра.
Постановка задачи
В начальных условиях у нас есть два провайдера: первый предоставляет доступ в интернет через локальную сеть с серым (читай: приватным) IP, второй выдает белый IP, но только после установления соединения с PPTP-сервером. Также у нас имеется две локальных сети с адресами 192.168.1.0/24 и 192.168.3.0/24. Адрес сети демилитаризованной зоны (DMZ) - 10.10.20.0/24. Формулируем задачи:
- Cisco должна устанавливать соединение с PPTP-сервером.
- Локальные сети должны выходить в интернет через первого провайдера (который выдает серый IP).
- Все запросы на внешний IP должны перенаправляться в DMZ на соответствующие сервера.
- Для локальных сетей циска должна выступать в роли DNS и DHCP серверов.
Подключение к циске
Я предпочитаю настраивать сетевое оборудование через консоль, дабы при неполадках в сети оставалась возможность продолжения настройки. Итак, один конец консольного провода цепляем к циске, другой конец - к компу, используя COM-порт. Чтобы подключиться к устройству, запускаем любую терминальную программу и соединяемся с COM-портом на скорости 9600. Как вариант, – можешь использовать HyperTerminal, который включен в состав Windows. После подключения жмем <Enter> и входим в привилегированный режим командой «enable».
В данный момент можно посмотреть состояние различных счетчиков, текущую и стартовую конфигурацию, а также произвести поиск неисправностей в сети (я имею в виду ping, traceroute). Для перехода в режим конфигурации необходимо ввести команду «configure terminal». Именно в этом режиме мы и будем производить всю дальнейшую настройку.
Подключение сетей
В принципе, здесь ничего сложного - подключаем витую пару в циску и присваиваем IP-адреса интерфейсам. Все бы хорошо, но порты модуля WIC-4ESW - это switch-порты, то есть на них нельзя выставить IP-адрес (L2 switching). Решение сводится к добавлению физических портов в определенные VLAN'ы. Для тех, кто не в курсе: VLAN - это виртуальная локальная вычислительная сеть, отличие которой от обычной сети состоит в том, что отделяется она от других сетей не физически (установка нового оборудования), а логически (на управляемом коммутаторе ставится соответствие между его портами и определенными VLAN). Другими словами, для решения нашей проблемы нам необходимо создать четыре виртуальные сети, присвоить им IP-адреса и сказать циске, что этот порт принадлежит этой сети, а этот - той. Чтобы не занимать драгоценное журнальное место и не повторяться, приведу пример только для одной сети:
- Код: выделить все
cisco#vlan database
cisco(vlan)#vlan 2
VLAN 2 added:
Name: VLAN0002
cisco(vlan)#ex
Теперь настроим наш vlan интерфейс:
- Код: выделить все
cisco#conf t
! Настраиваем vlan 2
cisco(config)#int vlan 2
! Выставляем IP адрес
cisco(config-if)#ip address 192.168.1.254 255.255.255.0
cisco(config-if)#^Z
Последнее, что необходимо сделать - добавить физический интерфейс в нужный нам vlan:
- Код: выделить все
! Конфигурируем интерфейс fastethernet 4
cisco(config)#int fa4
! Тип порта (может быть еще trunk)
cisco(config-if)#switchport mode access
! Добавляем этот порт во второй vlan
cisco(config-if)#switchport access vlan 2
Посмотрим, что получилось:
- Код: выделить все
cisco#sh ip int brief vlan 2
Interface IP-Address OK? Method Status Protocol
Vlan2 192.168.1.254 YES manual up up
cisco#sh ip int brief fa4
Interface IP-Address OK? Method Status Protocol
FastEthernet4 unassigned YES unset up up
cisco#sh vlan-switch
VLAN Name Status Ports
---- -------------------------------- --------- -----
1 default active
2 VLAN0002 active Fa4
... skipped ...
Можешь попробовать пинговать кого-нибудь. Должно получиться. В качестве упражнения советую подключить остальные сети по аналогии с тем, как мы только что это сделали. Советую также добавлять описание к интерфейсу с помощью команды description, которую необходимо вводить в режиме конфигурирования интерфейса. Это необязательная процедура, но через некоторое время без таких пометок будет сложно разобраться, что к чему относится.
Соединение с PPTP-сервером
Когда я покупал циску, то полагал, что установить соединение с VPN-сервером по протоколу PPTP - простая задача. На деле оказалось, что устройство умеет соединяться только по протоколу L2TP. Прогуглив этот вопрос, я нашел решение, которое мне кажется больше хаком, чем документированной возможностью. Нижеследующая команда не появляется по нажатию «?», и ее нужно ввести вручную. Благодаря этой команде, при выборе протокола подключения можно выбрать протокол PPTP.
- Код: выделить все
cisco(config)#service internal
Включаем и настраиваем vpdn (Virtual Private Dialup Network):
- Код: выделить все
! Включаем vpdn
cisco(config)#vpdn enable
! Создаем группу с номером 1
cisco(config)#vpdn-group 1
cisco(config-vpdn)#request-dialin
! Указываем протокол соединения
cisco(config-vpdn-req-in)#protocol pptp
cisco(config-vpdn-req-in)#rotary-group 0
! Указываем VPN сервер
cisco(config-vpdn)#initiate-to ip _vpn_server_ip_
Понятное дело, что вместо «_vpn_server_ip_» необходимо подставить IP-адрес своего VPN-сервера. Теперь создаем сам интерфейс, на котором укажем параметры соединения:
- Код: выделить все
! Настраиваем интерфейс VPN-клиента
cisco(config)#interface Dialer0
! Указываем mtu
cisco(config-if)#mtu 1440
! Автоматически получать IP адрес
cisco(config-if)#ip address negotiated
! Благодаря данной команде наш интерфейс будет всегда в состоянии "up"
cisco(config-if)#ip pim dense-mode
! Выставляем инкапсуляцию ppp
cisco(config-if)#encapsulation ppp
cisco(config-if)#dialer in-band
cisco(config-if)#dialer idle-timeout 0
cisco(config-if)#dialer string 123
cisco(config-if)#dialer vpdn
! Номер dialer-list'а - для просмотра подходящих данных
cisco(config-if)#dialer-group 1
! Отрубаем поддержку cisco discovery protocol на этом интерфейсе
cisco(config-if)#no cdp enable
! Указываем логин и пароль для аутентификации
cisco(config-if)#ppp chap hostname _login_
cisco(config-if)#ppp chap password 0 _password_
И добавляем dialer-list, где будут задаваться типы данных (в нашем случае – весь протокол IP), которые будут заставлять циску устанавливать соединение:
- Код: выделить все
cisco(config)#dialer-list 1 protocol ip permit
И добавляем dialer-list, где будут задаваться типы данных (в нашем случае – весь протокол IP), которые будут заставлять циску устанавливать соединение:
- Код: выделить все
cisco(config)#dialer-list 1 protocol ip permit
Вот вроде бы и все. Теперь соединение с VPN-сервером должно пройти нормально. Проверяем:
- Код: выделить все
cisco#sh ip int dial0
Interface IP-Address OK? Method Status Protocol
Dialer0 xxx.xxx.xxx.xxx YES IPCP up up
Соединение успешно установлено! Переходим к самому интересному - выпуск пользователей в интернет.
NAT
Как сказано в техзадании, нам необходимо выпускать пользователей в интернет через первого провайдера, а второго оставить только для внешних сервисов. Самым простым будет установить дефолтный маршрут на первого провайдера и NAT'ить все пакеты, идущие из наших сетей. Так и поступим:
- Код: выделить все
cisco(config)#ip route 0.0.0.0 0.0.0.0 ISP1_GW
Маршрут добавили. Теперь создаем Access List. Он будет ловить необходимые нам пакеты, для которых нужно делать NAT. Прошу заметить, что в данных правилах используется не обычная маска, а инверсная:
- Код: выделить все
! Создаем access-list номер 1
cisco(config)#access-list 1 permit 192.168.1.0 0.0.0.255
cisco(config)#access-list 1 permit 192.168.3.0 0.0.0.255
Введенный ACL не применяется на интерфейсе для разграничения доступа, и правила permit и deny следует понимать не как «разрешить» или «запретить», а как просмотр подходящих (permit) и неподходящих (deny) пакетов. При написании NAT-правил нам придется указать адреса источников, которые необходимо будет заменить. Именно для этих целей нам пригодится наш ACL. В итоге, схема выглядит так: адрес источника будет модифицироваться только в тех пакетах, которые подошли под этот ACL.
- Код: выделить все
! Указываем в качестве исходных адресов access-list 1
cisco(config)#ip nat inside source list 1 interface Vlan4 overload
Здесь мы меняем адреса на адрес интерфейса vlan 4. В завершающей стадии нам нужно указать, какие интерфейсы являются внутренними, а какие - внешними. Делается это с помощью команд «ip nat inside» и «ip nat outside» соответственно. Команды вводятся при конфигурировании интерфейса:
- Код: выделить все
cisco(config)#int vlan 2
cisco(config-if)#ip nat inside
cisco(config-if)#int vlan 4
cisco(config-if)#ip nat outside
В этом случае vlan2 является внутренней сетью, а vlan4 - внешней.
Используем внешние ресурсы
Следующим шагом будет перенаправление всех данных от внешних клиентов к внутренним серверам. Не станем сразу переходить к настройке, а сначала разберемся, как это должно работать. Итак, на внешний интерфейс приходят запросы на порт 80. Наша циска перенаправляет полученные данные Web-серверу, который стоит в DMZ. После обработки данных Web-сервер начинает отвечать, и тут возникает большая проблема. Ответ попадает к циске, у которой default route стоит ISP1_GW – именно через этот шлюз она его и отправит. Если непонятно, в чем косяк, то представь ситуацию, когда ты спрашиваешь у кого-то «как дела», а отвечает тебе совершенно другой, незнакомый человек. На незнакомца ты, естественно, внимания не обращаешь. Тут ситуация аналогична: запрос мы отправили на один IP, а ответ пришел с какого-то совершенно левого. Исправлять будем с помощью Policy Based Routing. Необходимо создать ACL, определяющий пакеты, которые должны быть отправлены через канал второго провайдера:
- Код: выделить все
! Создаем расширенный access-list номер 100
! Так как в расширенных листах нет отрицания, то перед разрешающими правилами пишем запрещающие
cisco(config)#access-list 100 deny tcp host 10.10.20.2 eq www 192.168.1.0 0.0.0.255
cisco(config)#access-list 100 deny tcp host 10.10.20.2 eq www 192.168.3.0 0.0.0.255
cisco(config)#access-list 100 permit tcp host 10.10.20.2 eq www any
Первые два правила deny означают, что к пакетам, идущим от веб-сервера к локальным сетям, не будет применяться политика маршрутизации. А остальные пакеты попадут в политику WEB:
- Код: выделить все
cisco(config)#route-map WEB permit 10
! Определяем область действия политики - только на адреса, подпадающие под access-list 100
cisco(config-route-map)#match ip address 100
cisco(config-route-map)#set ip next-hop 172.17.0.1
Директива match указывает, какие данные попадают под эту политику; команда «set ip next-hop» задает следующий hop. Для полного счастья осталось сделать три очень простых действия. Во-первых, перенаправить данные из интернета к Web-серверу. Во-вторых, выполнить трансляцию ответов от Web-сервера. В-третьих, применить политику маршрутизации на интерфейсе, который смотрит в DMZ. Первое действие осуществляется в одну строчку:
- Код: выделить все
cisco(config)#ip nat inside source static tcp _web_server_ip_ 80 xxx.xxx.xxx.xxx 80 extendable
Второе также не отличается особой сложностью:
- Код: выделить все
cisco(config)#ip nat inside source list 100 interface Dialer0 overload
Напоминаю, что имя внешнего интерфейса - Dialer0, и что на нем необходимо сделать «ip nat outside», иначе IOS не будет NAT'ить данные.
Третьим действием применяем политику маршрутизации:
- Код: выделить все
cisco(config)#int vlan 5
cisco(config-if)#ip policy route-map WEB
В принципе, на этом можно было бы закончить настройку нашего боевого роутера, если бы не его возможности по работе DNS и DHCP.
Настройка циски в качестве DNS и DHCP сервера
Вообще говоря, оборудование Cisco ориентировано на маршрутизацию и коммутацию данных в сетях, но никак не на работу в качестве DNS-сервера. Для этого лучше выделить отдельную машинку или использовать уже существующую. Я же покажу пример настройки сервера DNS чисто в образовательных целях. Настройка сводится к указанию адресов вышестоящих DNS и, если нужно, созданию каких-либо внутренних зон. Ниже представлен пример настройки с комментариями:
- Код: выделить все
! Указываем DNS сервера провайдера
cisco(config)#ip name-server abc.abc.abc.abc
cisco(config)#ip name-server bca.bca.bca.bca
! Включаем наш DNS сервер
cisco(config)#ip dns server
! Создаем primary зону test
cisco(config)#ip dns primary test soa ns.test postmaster.test
! Добавляем запись типа NS
cisco(config)#ip host test ns ns.test
! Добавляем записи типа A
cisco(config)#ip host ns.test 192.168.1.254
cisco(config)#ip host anyhost.test 192.168.1.250
DHCP также лучше вынести на отдельный сервер, но если нет такой возможности, воспользуемся встроенными средствами. Настраивать, по сути, необходимо пулы, которые привязываются к конкретным сетям командой network. Для каждого пула выставляются специфические настройки - адреса DNS серверов, адрес маршрута по умолчанию, WINS сервера и т.д.:
- Код: выделить все
! Создаем первый пул
cisco(config)#ip dhcp pool FirstPool
! Указываем сеть
cisco(dhcp-config)#network 192.168.1.0 255.255.255.0
! Специфические настройки
cisco(dhcp-config)#default-router 192.168.1.254
cisco(dhcp-config)#dns-server 192.168.1.254
cisco(dhcp-config)#domain-name domain1
cisco(dhcp-config)#exit
! Создаем второй пул
cisco(config)#ip dhcp pool SecondPool
! Указываем сеть
cisco(dhcp-config)#network 192.168.3.0 255.255.255.0
! Специфические настройки
cisco(dhcp-config)#domain-name domain2
cisco(dhcp-config)#default-router 192.168.3.2
cisco(dhcp-config)#dns-server 192.168.3.2
cisco(dhcp-config)#exit
! Указываем, какие адреса DHCP не будет присваивать клиентам
cisco(config)#ip dhcp excluded-address 192.168.1.200 192.168.1.254
cisco(config)#ip dhcp excluded-address 192.168.3.1 192.168.3.10
Мне кажется, настройка DHCP - довольно прозрачная процедура, и вопросов тут быть не должно. А если они и возникнут, то в официальной документации есть хорошие примеры с объяснениями.