Поиск...

вторник, 28 июня 2011 г.

Настройка Inter-vlan routing, ACL и NAT на оборудовании cisco

Доброго времени суток!!!


В прошлом посте мы настроили несколько vlan на cisco switch, познакомились с протоколом VTP и посмотрели, как он работает. После наших настроек, если помните, сетевой доступности между vlan не было. Сегодня, я хочу предложить вам это исправить и организовать сетевое взаимодействие между vlan, а так же контролируемый доступ во внешнюю сеть («интернет») с помощью ACL и NAT (Network address translation).
Кому интересно, добро пожаловать под кат…

Я предлагаю реализовать задуманное по принципу построения сети «Роутер на палочке» (Router on the stick). Это решение очень распространено в малых сетях (небольшое предприятие, офис и т.д.). Так что думаю, нашу схему можно будет взять, при необходимости, за основу для построения реальной сети :).
Вот эта схема:



Добавим немного условий :):
  • 1 – хосты из vlan 2 и vlan 4 имеют доступ в «Internet» (прохождение ping на loopback роутера ISP);
  • 2 – хост из vlan 3 не имеет доступа в «Internet», но должен ping-овать хосты из vlan 2 и vlan 4.
Раскладка по портам на коммутаторе:
  • - f1/0 – 802.1q Trunk;
  • - f1/1 – f1/3 vlan 1 (Native);
  • - f1/4 – f1/7 vlan 2;
  • - f1/8 – f1/11 vlan 3;
  • - f1/12 – f1/15 vlan 4.
Доступ в «интернет» предлагаю организовать через NAT (Network address translation), ограничение доступа будем реализовывать с помощью ACL. Теорию по NAT и ACL можно посмотреть тут и тут, соответственно.
Схема определена, условия поставлены :). Переходим к настройкам.
Начнем с настроек нашего Switch:
  • R3>en
  • R3#conf t
  • R3(config)#hostname Switch
  • Switch(config)#int vlan 1
  • Switch(config-if)#ip address 192.168.1.2 255.255.255.0
  • Switch(config-if)#no shutdown
  • Switch(config-if)#exit
  • Switch(config)#vlan 2
  • Switch(config-vlan)#name vlan_2
  • Switch(config-vlan)#exit
  • Switch(config)#vlan 3
  • Switch(config-vlan)#name vlan_3
  • Switch(config-vlan)#exit
  • Switch(config)#vlan 4
  • Switch(config-vlan)#name vlan_4
  • Switch(config-vlan)#exit
  • Switch(config)#exit
  • Switch(config)#int range f1/4 - 7
  • Switch(config-if-range)#switchport mode access
  • Switch(config-if-range)#switchport access vlan 2
  • Switch(config-if-range)#exit
  • Switch(config)#int range f1/8 - 11
  • Switch(config-if-range)#switchport mode access
  • Switch(config-if-range)#switchport access vlan 3
  • Switch(config-if-range)#exit
  • Switch(config)#int range f1/12 - 15
  • Switch(config-if-range)#switchport mode access
  • Switch(config-if-range)#switchport access vlan 4
  • Switch(config-if-range)#exit
  • Switch(config)#int fa 1/0
  • Switch(config-if)#switchport mode trunk
  • Switch(config-if)#switchport trunk encapsulation dot1q
  • Switch(config-if)#exit
  • Switch(config)#exit
  • Switch#wr
  • Switch#
Посмотрим, что у нас получилось:



Vlan созданы, IP-адрес назначен. Если сейчас попробовать команду ping между хостами, то ничего не получится, так как они находятся в разных сетях (vlan).
Теперь настроим роутер ISP:
  • R2>en
  • R2#conf t
  • R2(config)#hostname ISP
  • ISP(config)#int serial 0/0
  • ISP(config-if)#ip address 192.168.10.2 255.255.255.252 – в сторону роутера Corp
  • ISP(config-if)#no shutdown
  • ISP(config-if)#exit
  • ISP(config)#int loopback 0
  • ISP(config-if)#ip address 172.16.1.1 255.255.255.255 – имитируем «интернет»
  • ISP(config)#exit
  • ISP#wr
  • ISP#
Небольшая конфигурация, но этого нам достаточно.
Осталось настроить роутер Corp. Это займет немного больше времени. Итак, приступаем :).
  • R1>en
  • R1#conf t
  • R1(config)#hostname Corp
  • Corp(config)#int serial 0/0
  • Corp(config-if)#ip address 192.168.10.1 255.255.255.252 – в сторону «интернета»
  • Corp(config-if)#no shutdown
  • Corp(config-if)#exit
  • Corp(config)#int fa 0/0
  • Corp(config-if)#no shutdown
  • Corp(config-if)#exit
  • Corp(config)#int fa 0/0.1 – настраиваем субинтерфейс для каждого vlan
  • Corp(config-subif)#description For Manage
  • Corp(config-subif)#encapsulation dot1Q 1 native – прописываем режим инкапсуляции (в данном случае еще дописываем, что этот vlan будет native
  • Corp(config-subif)#ip address 192.168.1.1 255.255.255.0 – назначаем IP-адрес, который будет являться шлюзом по умолчанию для соответствующего vlan
  • Corp(config-subif)#exit
  • Corp(config)#int fa 0/0.2
  • Corp(config-subif)#encapsulation dot1Q 2 – обращаю внимание, что цифра должна совпадать с номером (tag) vlan-а
  • Corp(config-subif)#ip address 192.168.2.1 255.255.255.0
  • Corp(config-subif)#exit
  • Corp(config)#int fa 0/0.3
  • Corp(config-subif)#encapsulation dot1Q 3
  • Corp(config-subif)#ip address 192.168.3.1 255.255.255.0
  • Corp(config-subif)#exit
  • Corp(config)#int fa 0/0.4
  • Corp(config-subif)#encapsulation dot1Q 4
  • Corp(config-subif)#ip address 192.168.4.1 255.255.255.0
  • Corp(config-subif)#exit
  • Corp(config)#ip route 0.0.0.0 0.0.0.0 192.168.10.2 – прописываем маршрут по умолчанию
  • Corp(config)#exit
  • Corp#wr
  • Corp#
Практически мы уже настроили Inter-vlan Routing. Остановимся и проверим, что у нас получилось:


  • 1 – обращу внимание на этот параметр. Если вы делаете настройки в GNS3, как и я, то у вас может возникнуть ошибка о несогласованности duplex. Для ее устранения необходимо в режиме конфигурации интерфейса на роутере жестко прописать параметр full duplex.

    где:
  • 1- роутер ISP;
  • 2- «интернет»;
  • 3- коммутатор Switch;
  • 4- хост №1 (vlan_2);
  • 5- хост №2 (vlan_3);
  • 6- хост №3 (vlan_4).
Видно, что сетевая доступность присутствует. На данный момент, хосты из разных vlan тоже ping-уют друг друга, но пока не имеют доступа к «интернет».
Для устранения этой проблемы нам необходимо настроить NAT на роутере Copr.
Network address translation бывает трех видов:
  • 1 – статический NAT (вручную прописываем соответствие внутреннего (незарегистрированного) адреса внешнему (зарегистрированному) адресу в формате один к одному);
  • 2 – динамический NAT (задается определенный pool адресов и при трансляции автоматически производится соответствие внутренних адресов, свободным адресам из pool);
  • 3 – port address translation (PAT). Трансляция внутренних (незарегистрированных) адресов в один внешний (зарегистрированный) адрес, но в разные порты.
Рассмотрим все три случая.
Статический NAT.
Возвращаемся на роутер Corp и делаем следующее:
  • Corp#
  • Corp#conf t
  • Corp(config)#int fa 0/0.2
  • Corp(config-subif)#ip nat inside – определяем интерфейс для NAT, за которым находится хост(ы) с внутренним(и) IP-адресами;
  • Corp(config-subif)#exit
  • Corp(config)#int fa 0/0.4
  • Corp(config-subif)#ip nat inside – определяем интерфейс для NAT, за которым находится хост(ы) с внутренним(и) IP-адресами;
  • Corp(config-subif)#exit
  • Corp(config)#int serial 0/0
  • Corp(config-if)#ip nat outside – определяем интерфейс для NAT, который является внешним и имеет внешний (зарегистрированный) IP-адрес;
  • Corp(config-if)#exit
  • Corp(config)#ip nat inside source static 192.168.2.20 192.168.10.1 – прописываем соответствие одного внутреннего IP-адреса одному внешнему. Для хоста из vlan_4 мы не сможем этого прописать, так как внешний IP-адрес только один;
  • Corp(config)#exit
  • Corp#wr
Проверим нашу работу:






После ping с Host 1 (192.168.2.20) видно, что в таблице трансляций появилось соответствие. Значит, Host 1 получил свой доступ в «интернет» :). Если проверить доступ к «интернет» с других хостов, то его не будет.
Динамичский NAT.
Для динамического NAT нам понадобится Access Control List. Они тоже бывают разных видов. Мы будем использовать расширенный ACL.
Возвращаемся на роутер Corp и продолжаем:
  • Corp#conf t
  • Corp(config)#ip access-list extended ACL_NAT – создаем расширенный список доступа (ACL) для определения тех сетей, которые будут подпадать под NAT;
  • Corp(config-ext-nacl)#permit ip 192.168.2.0 0.0.0.255 any – определяем сеть для NAT (согласно нашему условию в начале поста);
  • Corp(config-ext-nacl)#permit ip 192.168.4.0 0.0.0.255 any – определяем сеть для NAT (согласно нашему условию в начале поста);
  • Corp(config-ext-nacl)#exit
  • Corp(config)#no ip nat inside source static 192.168.2.20 192.168.10.1 – удаляем статический NAT;
  • Corp(config)#ip nat pool NAT_POOL 192.168.10.1 192.168.10.1 netmask 255.255.255.0 – определяем pool внешних IP-адресов;
  • Corp(config)#ip nat inside source list ACL_NAT pool NAT_POOL – включаем динамический NAT;
  • Corp(config)#exit
  • Corp#wr
  • Corp#
Если сейчас мы вернемся на Host 1 и сделаем ping на «интернет» у нас все удачно пройдет, но если сразу после этого мы попробуем сделать это с Host 3, то нас ждет неудача. Это связано с тем, что у нас только один внешний адрес (192.168.10.1/30) и кто первый займет его, тот и будет иметь доступ в «интернет» :). Чтобы дать возможность поработать и Host 3, надо отчистить таблицу трансляций командой Corp#clear ip nat translation * и сделать ping с Host 3 еще раз:




Все работает. Так что, если вы хотите применять динамический NAT, то лучше вам иметь целый pool зарегистрированных IP-адресов.
Но самым распространенным видом NAT, который используется практически везде, является PAT (Port Address Translation). Его мы, в итоге, и оставим для нашей схемы. Он даст возможность одновременно работать с «внешним миром» всем заинтересованным хостам :).
Вновь возвращаемся на наш роутер Corp и немного переделаем конфигурацию:
  • Corp#conf t
  • Corp(config)#no ip nat inside source list ACL_NAT pool NAT_POOL – отключаем динамический NAT;
  • Corp(config)#no ip nat pool NAT_POOL 192.168.10.1 192.168.10.1 netmask 255.255.255.0 – убираем наш pool адресов (он нам больше не понадобиться);
  • Corp(config)#ip nat inside source list ACL_NAT interface serial 0/0 overload – включаем PAT;
  • Corp(config)#exit
  • Corp#wr
  • Corp#

    (определение inside и outside интерфейсов, а так же ACL мы делали ранее)
Все готово к окончательным проверкам. Зайдем по очереди на наши хосты и проверим условия, поставленные в начале поста:


    где:
  • 1- IP-адрес «интернет»;
  • 2- IP-адрес Host 2 из vlan_3;
  • 3- IP-адрес Host 3 из vlan_4;

    где:
  • 1- IP-адрес «интернет»;
  • 2- IP-адрес Host 1 из vlan_2;
  • 3- IP-адрес Host 3 из vlan_4;

    где:
  • 1- IP-адрес «интернет»;
  • 2- IP-адрес Host 1 из vlan_2;
  • 3- IP-адрес Host 2 из vlan_3;


Как видно из рисунков, у нас все получилось. Все условия выполнены (хосты пингуют друг друга, а в «интернет» имеют доступ только vlan_2 и vlan_4). Из последнего рисунка видно, что трансляция адресов работает корректно (два внутренних IP-адреса (Inside local) транслируются в один внешний IP-адрес (Inside global), но в разные порты).

На этом, я хочу закончить этот пост. Надеюсь, что он был вам интересен, и вы что-то из него почерпнули или вспомнили :). Жду вас в следующих постах.



Если возникли вопросы или комментарии, то смело пишите!!! С радостью отвечу!!!!


С уважением, Ant0ni0n.

17 комментариев:

  1. не совсем понял Inter-vlan Routing...

    ОтветитьУдалить
  2. Хорошая статья
    Тока исправь оишбки в конце гле пинги описываешь
    Хост 4 из влан 4 поменять на хост 3 из влан 4

    ОтветитьУдалить
    Ответы
    1. Спасибо за отзыв!!
      Исправил. Заходите еще :)

      Удалить
  3. Анонимный21 мая 2012 г., 12:05

    Подскажите, пожалуйста, как проверить работу ACL с разными типами трафика в GNS?

    ОтветитьУдалить
    Ответы
    1. Добрый день, не совсем понял вопроса...
      Можно создать access-list в котором разрешить определенные порты и IP-адреса, а последней строчкой в этом листе написать deny ip any any log. Тогда любое запрещенное действие по этому листу будет отображаться в логе (show log). Если, конечно, логирование настроено.
      Если речь не о том, то уточните пожалуйста, вопрос.

      Удалить
  4. Приветствую!
    Скажите, а как сделать чтобы, хост 3 не имел доступа в интернет и к хостам из vlan 2, но при этом имел доступ к хостам из vlan 4?

    ОтветитьУдалить
    Ответы
    1. Добрый день!!!
      Сделать так можно и очень просто :). Для этого необходимо создать access-list, который разрешает хождение трафика в сеть хоста 4 (это будет destination) и запрещает трафик в другие сети. После этого, применить этот лист на in сабинтерфейса int fa 0/0.3.

      Удалить
  5. Добрый день!
    В настройках роутера ISP не хватает маршрута на роутер Corp. Иначе пинги с ПК не пройдут до Loopback-интерфейса роутера ISP. Т.к. на какой интерфейс слать ответ на запрос, к примеру, от 192.168.2.20, роутер ISP просто не знает.

    ОтветитьУдалить
  6. Так же хочу внести поправочку в высказывание относительно статического NAT-а:
    "Если проверить доступ к «интернет» с других хостов, то его не будет." - доступ с других хостов будет и пинг пройдет в данном случае, т.к.маршрутизацию NAT не отменяет, разве что хост 192.168.2.20 попадет под NAT и будет подменяться на 192.168.10.1. Для других хостов будет пропускать пинг обычная маршрутизация. Для его ограничения нужно накладывать на outside-интерфейс access-list.

    ОтветитьУдалить
  7. не понимаю одну проблему. у меня 3 vlan сети, хосты пингуют друг-груга, но почему то не могут заходить в открытые шары на этих хостах: то есть, хост (WinXP) из одного vlan'а не может зайти на шару другого хоста (WinXP)из другого vlan'а, а с linux хостами такой проблемы нет. Куда копать?????

    ОтветитьУдалить
  8. Привет. Подскажи пожалуйста. Ситуация след.
    Есть несколько sub-int: f0/0.10, f0/0.11, f0/0.x
    Нужен nat inside на хост, который в сети 10.0.11.x
    ip nat inside source static tcp 10.0.11.x 3389 int f0/0.100 3389 не работает.
    ip nat inside source static tcp 10.0.10.x 3389 int f0/0.100 3389 работает.
    где копать?

    ОтветитьУдалить
    Ответы
    1. Доброго времени суток!
      Так сразу и не скажу. Мне необходимо видеть схему и полную конфигурацию, по двум строчкам ничего не понять. Пришли мне на почту, будет время, гляну.

      Удалить
  9. у меня не отработал протокол icmp ? Пинги все отлично но вот что то сообщение не приходит при проверке на роутере.

    ОтветитьУдалить
  10. привет asa cisco 5520 как можно настроит как прокси сервера чтобы фильтровать трафик,есть примеры!

    ОтветитьУдалить
  11. cisco asa 5520 вот тока не давно привезли на работу и изучаю проста

    ОтветитьУдалить