Компьютерные сети

Недавно я в целях ликвидации безграмотности посмотрел видеокурс GeekBrains по компьютерным сетям (автор — Алексей Степченко). Курс великолепный, то как автор доносит информацию до слушателей — выше всяких похвал. Зиждется данный курс на практических примерах и заданиях, которые выполняются в программе Cisco Packet Tracer, которая эмулирует компьютерные сети, то бишь хосты, серверы, свичи, роутеры и пр. Причем эмулирует, я бы сказал, с высокой степенью реалистичности. В этой программе вы настраиваете сетевое оборудование и можете в реальном времени наблюдать функционирование сети. Есть там еще т. н. режим симуляции, когда вы можете наблюдать распространение по сети пакетов данных и рассматривать их содержимое. Packet Tracer можно скачать бесплатно. Версию 6.2 можно скачать без регистрации, более новые версии, соответственно, с регистрацией.

Основная работа при изучении сетей в курсе связана с настройкой свичей и роутеров при помощи командной строки операционной системы Cisco IOS. Команд там много, к тому же они выстраиваются в определенную иерархию уровней вложенности. Чтобы не забыть, я решил законспектировать «рецепты» для настройки свичей и роутеров Cisco плюс немного теории.

Для справки. Свич — устройство, которое коммутирует пакеты внутри одной подсети, т. е. свичи объединяют некоторое количество «хостов» в одну подсеть. Роутеры же служат мостиками между различными подсетями.

Обозначения

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

hostname <name>

Реальная же команда может выглядеть так:

hostname switch1

или так:

hostname providers_router

Если аргумент команды может принимать только определенный набор значений, то я записываю аргумент так:

<value1|value2|value3|value4>

Например:

duplex <auto|full|half>

А реальная команда может выглядеть так:

duplex auto

Команды в Cisco IOS выстроены в иерархию — дерево. Некоторые команды изменяют режим (состояние) командной строки. В каждом режиме можно выполнить специфический набор команд. Когда сетевое устройство только загрузилось, вы находитесь в т. н. пользовательском режиме. Если вы введете команду enable, то попадете в привилегированный режим. В этом режиме вы можете выполнить определенный набор команд — посмотреть какие команды в него входят можно выполнив команду ?. Находясь в привилегированном режиме, вы можете выполнить команду configure terminal, и тогда попадете в режим глобальной конфигурации, в котором есть свой набор допустимых команд. И так далее. Можно вернуться в предыдущий режим при помощи команды exit. Также из любого режима можно вернуться прямиком в привилегированный режим при помощи команды end. Вложенность команд я обозначаю при помощи отступов. Например, если я пишу

enable
    configure terminal
        hostname <name>

… то это значит, что команду hostname можно выполнить только в режиме глобальной конфигурации, в который можно попасть из привилегированного режима, выполнив команду configure terminal. А в привилегированный режим в свою очередь можно попасть из пользовательского режима, выполнив команду enable.

Некоторые команды имеют смысл и для свичей, и для роутеров, другие — только для свичей или только для роутеров. Если не оговорено, для какого типа устройства актуальна команда, значит она работает и для свичей, и для роутеров.

Команды общего назначения

Посмотреть список доступных команд в текущем режиме:

?

Перейти в привилегированный режим:

enable

Получить справку по интересующей вас команде:

enable
    <command> ?

Перейти в режим глобальной конфигурации:

enable
    configure terminal

Задать имя, которое будет отображаться в качестве приглашения в командной строке:

enable
    configure terminal
        hostname <name>

Отменить ранее выполненную команду:

enable
    configure terminal
        no <command>

Вернуться в предыдущий режим:

exit

Вернуться сразу в привилегированный режим:

end

Сохранить текущую конфигурацию в ПЗУ:

enable
    write

Посмотреть текущую конфигурацию:

enable
    show running-config

Канальный уровень: настройка интерфейсов

У всех сетевых устройств есть интерфейсы. У ПК как правило один интерфейс, у свичей и роутеров интерфейсов много. Физические интерфейсы бывают разные, например: оптический интерфейс, коаксиальный кабель, витая пара, телефонная линия. В локальных сетях по большей части используется интерфейс стандарта ethernet на витой паре. На канальном уровне у ethernet интерфейсов есть настройки:

  • дуплексный режим: автоматическое определение, полный дуплекс, полудуплекс.
  • скорость: автоматическое определение, 10 Мбит/с, 100 Мбит/с, 1000 Мбит/с (для интерфейсов gigabit ethernet).

В Cisco IOS интерфейсы устройства идентифицируются именами вида fa0/0, fa0/1, fa1/0, ge1/1 и т. д. Первые две буквы обозначают стандарт ethernet: fa — fast ethernet, ge — gigabit ethernet.
Ниже приведены команды, которые надо выполнить, чтобы настроить и включить конкретный интерфейс:

enable
    configure terminal
        interface <interface-name>
            duplex <auto|full|half>
            speed <auto|10|100>
            no shutdown

Можно настроить одинаковым образом сразу группу интерфейсов при помощи команды interface range. Например следующая команда настраивает и включает сразу 25 интерфейсов:

enable
    configure terminal
        interface range fa0/0-24
            duplex auto
            speed auto
            no shutdown

На канальном уровне ethernet-устройства идентифицируются 6-байтовыми MAC-адресами (MAC — Media Access Control). MAC-адрес условно уникален. В нем есть две части: идентификатор производителя устройства и идентификатор самого устройства.

Канальный и сетевой уровни: ARP table

ARP означает Address Resolution Protocol (связывает канальный и сетевой уровни). Одноименная таблица ставит в соответствие IP-адрес и MAC-адрес устройства в сети (на канальном уровне устройства идентифицируются MAC-адресами, на сетевом — IP-адресами). Как правило, отправитель сообщения знает IP-адрес получателя, но не знает его MAC-адрес (а он-то как раз и нужен для того, чтобы отправить сообщение). Для того, чтобы узнать MAC-адрес устройства по его IP-адресу, в сеть посылается широковещательный запрос — ARP-запрос «whois ip A.B.C.D?», на который должно ответить то устройство, которое имеет данный IP-адрес, прислав свой MAC-адрес. Устройства запоминают соответствие IP и MAC-адресов в ARP-таблице, которую можно посмотреть при помощи команд, приведенных ниже.
На роутере команда:

enable
    show arp

… отображает ARP-таблицу вида:

Protocol  Address          Age (min)  Hardware Addr   Type   Interface
Internet  1.0.0.2                 0   0001.434A.7170  ARPA   FastEthernet0/0.99
Internet  8.0.0.1                 -   00D0.D399.7502  ARPA   FastEthernet0/1
Internet  8.8.8.8                 1   0003.E4C1.148A  ARPA   FastEthernet0/1

На хосте под управлением Windows или Linux:

arp -a

… отображает ARP-таблицу вида:

Internet Address      Physical Address      Type
192.168.1.1           0001.434a.7170        dynamic
192.168.1.2           00d0.bc4e.0359        dynamic

Сетевой уровень: настройка интерфейсов

Настройка интерфейсов на сетевом уровне имеет смысл главным образом для роутеров.
Команда:

enable
    show ip interface brief

… отображает таблицу настроек интерфейсов роутера на сетевом уровне. В этой таблице наиболее интересно поле IP-Address.

Interface           IP-Address      OK?    Method    Status    Protocol
FastEthernet0/0     10.0.0.1        YES    manual    up        up
FastEthernet0/1     192.168.1.1     YES    manual    up        up
FastEthernet0/2     8.0.0.1         YES    manual    up        up

Чтобы интерфейс роутера нормально работал у него обязательно должен быть IP-адрес. Этот адрес ему можно задать при помощи команды:

enable
    configure terminal
        interface <intefrace-name>
            ip address <ip> <subnet-mask>

Пример:

enable
    configure terminal
        interface fa0/0
            ip address 10.0.0.1 255.0.0.0
        interface fa0/1
            ip address 192.168.1.1 255.255.255.0

Помимо адреса задается т. н. маска подсети — битовая маска, которая разбивает IP-адрес на две части: адрес сети и адрес устройства в этой сети. Например, команда ip address 192.168.1.1 255.255.255.0 говорит о том, что интерфейс принадлежит к сети 192.168.1.0 и имеет в ней адрес 192.168.1.1. Если на какой либо другой интерфейс роутера, например на тот, который имеет адрес 10.0.0.1, придет пакет, адресованный узлу с адресом (например 192.168.1.2), входящим в сеть 192.168.1.0, то роутер отправит этот пакет на свой интерфейс 192.168.1.1. Короче говоря, адрес и маска подсети интерфейса играют роль при маршрутизации пакетов (об этом речь ниже). В маске всегда старшие биты — единицы, а младшие — нули. Поэтому запись маски часто сокращают указывая только количество битов, равных 1. К примеру:

255.0.0.0 /8
255.255.0.0 /16
255.255.255.0 /24
255.255.255.252 /30

Помимо реальных интерфейсов, можно создать в роутере виртуальный интерфейс (loopback):

enable
    configure terminal
        interface loopback <0-2147483647>
            ip address 127.0.0.1 255.255.255.0

Чем виртуальный интерфейс отличается от реального? Только тем, что к нему не подключен никакой физический «провод», т. е. если роутер станет посылать пакеты на этот интерфейс, то получить их сможет только он сам. Но зато другие устройства в сети вполне могут посылать пакеты на виртуальный интерфейс роутера и даже получать от роутера ответы. Т. е. например какой-нибудь хост спокойно может пропинговать loopback-интерфейс того роутера, к которому он подключен.

IP-адресация

Поскольку речь зашла об IP-адресах, уместно будет рассказать здесь о классовой и бесклассовой адресации и о специальных диапазонах IP-адресов.
В классовой адресации, маска подсети, к которой принадлежит IP-адрес, закодирована в старших битах этого самого IP-адреса:

Класс подсети Старшие биты IP-адреса Маска подсети 1-й октет Число различных подсетей Число хостов в одной подсети
A 0 255.0.0.0 0-127 128 16M
B 10 255.255.0.0 128-191 16K 16K
C 110 255.255.255.0 192-223 2M 254

В бесклассовой адресации, которая и используется ныне, уже не считается, что IP несет информацию о подсети, поэтому там, где необходимо, он должен сопровождаться маской подсети.

В каждой подсети есть два специальных адреса, которые не могут быть выделены хостам: адрес самой подсети (в хостовой части адреса — нули) и широковещательный адрес (в хостовой части адреса — единицы). Например, в подсети 172.16.0.0/16 адрес 172.16.0.0 — это адрес подсети, а 172.16.255.255 — широковещательный адрес.

Уникальных IP-адресов на всех не хватает, поэтому все множество адресов поделили на те, которые обязаны быть уникальными («белые»), и те, которые не обязаны быть уникальными («серые» или «частные»). С серого IP-адреса можно послать сообщение на белый IP-адрес, и с белого можно послать сообщение на белый, а вот послать сообщение с белого на серый — нельзя (не пугайтесь, проблему в этом случае решает технология NAT, о которой речь впереди). Частные диапазоны адресов следующие:

  • 1 подсеть класса A — 10.0.0.0
  • 16 подсетей класса B — 172.16.0.0-172.31.0.0
  • 256 подсетей класса C — 192.168.0.0-192.168.255.0

Также есть диапазон 127.0.0.0-127.255.255.254, в котором находятся только loopback-адреса.

Сетевой уровень: статическая маршрутизация

Роутеры — это устройства, которые связывают между собой различные сети. Что здесь понимается под сетью? Я понимаю сеть (или подсеть) как совокупность устройств, которые соединены и обмениваются между собой информацией при помощи одной и той же технологии канального уровня (например, Ethernet). Внутри одной и той же (под)сети устройствам, вообще говоря, необязательно знать IP-адреса друг-друга, чтобы обмениваться информацией, если в технологии канального уровня предусмотрена своя система адресации устройств (например, в технологии Ethernet устройствам достаточно знать MAC-адреса друг-друга). А вот чтобы передать сообщение из одной сети в другую, нужна система адресации независимая от канального уровня — это и есть IP-адресация. На пути от отправителя к получателю сообщение проходит ряд роутеров, и каждый роутер выполняет маршрутизацию этого сообщения, т. е. определяет адрес следующего роутера, которому надо его передать (адрес «следующего хопа»). Маршрутизацию роутеры выполняют на основе таблиц маршрутизации. Таблица может быть настроена администратором сети, тогда это называется «статическая маршрутизация».

Следующая команда отображает таблицу маршрутизации:

enable
    show ip route

… следующего вида:

S    10.0.0.0/8      [1/0] via 192.168.0.2
S    172.17.0.0/16   [1/0] via 172.18.1.1
S    192.168.6.0/24  [1/0] via 172.18.1.1
C    172.18.0.0/16   is directly connected, FastEthernet0/1
C    192.168.0.0/24  is directly connected, FastEthernet0/0
C    192.168.4.0/24  is directly connected, FastEthernet1/0
C    192.168.20.0/24 is directly connected, FastEthernet1/1

Символ «S» означает, что маршрут настроен статически (администратором), символ «C» означает, что указанная подсеть непосредственно подсоединена к интерфейса роутера (и указано, к какому именно).

Чтобы добавить маршрут к таблице маршрутизации, надо ввести следующие команды:

enable
    configure terminal
        ip route <destination-prefix> <mask> <router-ip>

Пример:

enable
    configure terminal
        ip route 10.0.0.0 255.0.0.0 192.168.0.2

А в следующем примере мы задаем адрес т. н. шлюза по-умолчанию — роутера, на который отправляются все пакеты, для которых специально не задан маршрут.

enable
    configure terminal
        ip route 0.0.0.0 0.0.0.0 <default-gateway-ip>

Сетевой уровень: динамическая маршрутизация — протокол RIP

RIP означает Routing Information Protocol (протокол сетевого уровня). По этому протоколу роутеры могут обмениваться между собой маршрутной информацией, что позволяет им автоматически создавать таблицы маршрутизации, избавляя от этой работы администратора сети. При настройке протокола RIP на роутере надо 1) включить его 2) задать версию протокола (версия 2 в отличие от версии 1 поддерживает бесклассовую IP-адресацию) 3) указать подсети, информацию информацию о которых роутеру разрешается посылать другим роутерам.

enable
    configure terminal
        router rip
            version 2
            network <subnet1>
            network <subnet2>

Сетевой уровень: DHCP

DHCP — Dynamic Host Control Protocol. Есть несколько настроек, которыми должен обладать практически любой хост в сети, чтобы нормально работать:

  • IP-адрес хоста
  • IP-адрес шлюза по-умолчанию. Шлюз по-умолчанию — это роутер, на который устройство отправляет все сообщения, для которых не прописан маршрут.
  • IP-адрес DNS-сервера. DNS-сервер — это сервер, который является частью системы DNS, которая представляет собой распределенную базу данных (состоящую из многих серверов), которая хранит записи, сопоставляющие доменные имена и IP-адреса хостов в сети.

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

enable
    configure terminal      
        ip dhcp pool <pool-name>
            default-router <ip>
            network <subnet> <mask>
            dns-server <ip>

Также можно указать диапазон IP-адресов, которые DHCP-сервер не должен давать хостам — как правило это — адреса, которые администратор резервирует для роутеров и серверов:

enable
    configure terminal
        ip dhcp excluded-address <ip-start> <ip-end>

Ну и вот конкретный пример настройки сервера DHCP на роутере:

enable
    configure terminal
        ip dhcp pool ip_address_pool
            network 192.168.1.0 255.255.255.0
            default-router 192.168.1.1
            dns-server 8.8.8.8
            exit
        ip dhcp excluded-address 192.168.1.0 192.168.1.100

Что касается самих хостов, то для них надо включить получение адреса автоматически, т. е. по протоколу DHCP. Роутеры тоже могут получать IP-адрес по DHCP, для этого при настройке интерфейса надо вместо IP-адреса указать dhcp:

enable
    configure terminal
        interface <interface-name>
            ip address dhcp

DHCP-relay

Предположим, имеется несколько локальных сетей, подключенных к одному роутеру. И надо сделать для этих локальных сетей, чтобы хосты в них получали настройки по DHCP. Можно в каждой локальной сети поставить DHCP-сервер. Можно настроить DHCP-сервер на роутере, к которому подключены локальные сети. Но предположим, что мы хотим один DHCP-сервер на все локальные сети и не хотим делать его на роутере, а хотим делать его на отдельной машине. Такой сервер очевидно не может входить ни в одну из обслуживаемых им локальных сетей. С другой стороны, DHCP-запросы от хостов — это broadcast’овые UDP-пакеты, поэтому они могут распространяться только в пределах локальной сети, в которую входит хост-отправитель. Как быть? Оказывается, можно настроить роутер, к которому подключены локальные сети, так чтобы он передавал эти broadcast’овые UDP-пакеты на наш DHCP-сервер, а ответы DHCP-сервера переправлял обратно в локальную сеть хоста-отправителя. Это называется DHCP-relay. Чтобы настроить DHCP-relay, надо для всех интерфейсов, к которым подключены локальные сети, указать адрес DHCP-сервера, на который надо переправлять DHCP-запросы. Это команда ip helper-address. Ну а на DHCP-сервер надо создать несколько пулов адресов — по одному на каждую из обслуживаемых локальных сетей.

enable
    configure terminal
        interface <interface-name>
            ip helper-address <dhcp-server-ip>

        interface <interface-name>
            ip helper-address <dhcp-server-ip>

Конкретный пример c двумя обслуживаемыми локальными сетями:

enable
    configure terminal
        interface fa0/0
            ip address 8.0.0.1 255.0.0.0

        interface fa0/1
            ip address 15.0.0.1 255.255.255.252
            ip helper-address 8.8.8.5

        interface fa0/2
            ip address 15.0.0.5 255.255.255.252
            ip helper-address 8.8.8.5

На DHCP сервере же надо настроить два пула адресов:

Pool Name    Default Gateway    DNS Server    Start IP Address    Subnet Mask
pool1        15.0.0.1           8.8.8.8       15.0.0.2            255.255.255.252
pool2        15.0.0.5           8.8.8.8       15.0.0.6            255.255.255.252

Прикладной уровень: DNS

DNS — Domain Name System — распределенная база данных, которая ставит в соответствие доменным именам хостов IP-адреса. Распределенная база данных располагается на множестве серверов, которые образуют иерархию (дерево). Имя хоста состоит из отдельных частей, которые тоже выстраиваются в иерархию. Например рассмотрим доменное имя www.dvsav.ru. В конце этого имени должна стоять точка, которая обозначает т. н. корневой домен, но поскольку она присутствует во всех доменных именах, ее всегда опускают. На самом деле, чтобы понять структуру доменного имени, лучше читать его задом наперед: .ru.dvsav.www:
. — корневой домен
ru — домен 1-ого уровня (национальная доменная зона)
dvsav — домен 2-ого уровня (название сайта)
www — домен 3-его уровня (имя сервера)
За каждую часть имени отвечает свой набор DNS-серверов. Обратившись к одному из корневых серверов (.), можно получить список DNS-серверов для любого домена 1-ого уровня (ru). Обратившись к одному из DNS-серверов 1-ого уровня, можно получить список DNS-серверов хостера, на котором размещен сайт (dvsav). Обратившись к DNS-серверу хостера, можно получить IP-адрес сайта.

Сетевой уровень: NAT

Выше уже говорилось о том, что не все IP-адреса обязаны быть уникальными. Серые IP-адреса не уникальны и поэтому сообщения, идущие с этих адресов либо на эти адреса не маршрутизируются в сети Интернет (во-первых, благодаря access-list’ам на роутерах, которые запрещают трафик с серых адресов; во-вторых, потому, что для серых адресов на роутерах в Интернете никак не пропишешь маршруты) — ведь такие адреса не могут уникально идентифицировать устройство в сети. Серые IP-адреса используются только в локальных сетях: в пределах локальной сети серый IP-адрес должен быть уникальным. Но ведь и машинам в локальной сети хочется иметь доступ в Интернет. Как же быть, если серый IP-адрес не может ни отправить сообщение на белый IP-адрес, ни принять сообщение с белого IP-адреса? На помощь приходит технология NAT — Network Address Translation. Суть ее вкратце такова: локальную сеть с Интернетом соединяет роутер, который называется «шлюз». Шлюз со стороны локальной сети имеет интерфейс с серым IP-адресом, со стороны Интернета — интерфейс с белым IP-адресом. Предположим, хост в локальной сети отправляет сообщение на некий белый IP-адрес в сети Интернет — это сообщение приходит на шлюз. Шлюз подменяет адрес источника (серый) в сообщении своим белым адресом и отправляет сообщение дальше. Сервер в сети Интернет что-нибудь посылает обратно на белый IP-адрес шлюза, шлюз подменяет в этом сообщении адрес назначения (свой белый адрес) серым адресом хоста в локальной сети и шлет сообщение в локальную сеть, где его принимает тот самый хост. Поскольку в локальной сети хостов много, а белый IP-адрес у роутера всего один, эти самые хосты надо как-то различать между собой. К счастью в разных протоколах есть дополнительные средства адресации, которые можно применить для идентификации хостов в локальной сети: в TCP и UDP это — номер порта; в ICMP — порядковый номер сообщения. Таким образом разным хостам в TCP например будут соответствовать разные номера портов. Собственно NAT — это трансляция следующего вида:

серыйIP:портX <-> белыйIP:портY

Напомню, что хостов с серыми IP в локальной сети в общем случае много, портов тоже много, а вот белый IP — один.

Чтобы настроить NAT на шлюзе, надо указать какой интерфейс смотрит в Интернет, а какой — в локальную сеть. Также надо указать адрес локальной сети в т. н. access-list’е:

enable
    configure terminal
        ip nat inside source list <1-199> interface <intefrace-looking-into-internet> overload
        access-list <1-199> permit <local-subnet> <inverted-subnet-mask>

        interface <local-network-interface-name>
            ip nat inside

        interface <intefrace-looking-into-internet>
            ip nat outside

Конкретный пример:

enable
    configure terminal
        interface fa0/0
            ip nat inside

        interface fa0/1
            ip nat outside

        ip nat inside source list 1 interface fa0/1 overload
        access-list 1 permit 192.168.1.0 0.0.0.255

Если в локальной сети есть сервер (у сервера серый IP), и хочется сделать его доступным из Интернета (из Интернета доступны только хосты с белым IP), то и это можно сделать с помощью NAT. Называется это «проброс порта». Суть в том, что шлюз все сообщения, поступающие из Инетрнета на определенный его порт, транслирует на сервер в локальной сети. Пользователи из Интернета при этом думают, что IP сервера — это белый IP шлюза. Настройка проброса порта на роутере выглядит так:

enable
    configure terminal
        ip nat inside source static tcp <inner-server-ip> <tcp-port> <out-router-interface-ip> <tcp-port>

Пример проброса 80-го порта для HTTP-сервера:

enable
    configure terminal
        ip nat inside source static tcp 192.168.1.2 80 15.0.0.2 80

SPT

SPT — Spanning Tree Protocol. Протокол, который используется свичами с одной целью — предотвратить явление под названием «петля коммутации». Петля коммутации возникает когда в сети свичей существует замкнутый путь. Это явление приводит к безудержному размножению широковещательных пакетов и перегрузке сети. Чтобы предотвратить это, свичи обмениваются между собой информацией, и каждый свич строит т. н. дерево коммутации (spanning tree). Затем свичи сами отключают те интерфейсы, которые приводят к возникновению петли. В эмуляторе Packet Tracer можно указать один из двух SPT-протоколов (pvst либо rapid pvst):

enable
    configure terminal
        spanning-tree mode <pvst|rapid-pvst>

Протокол SPT можно выключить (по-умолчанию SPT включен) например так:

enable
    configure terminal
        no spanning-tree vlan 1-1024

Ну включить так:

enable
    configure terminal
        spanning-tree vlan 1-1024

Также можно посмотреть дерево spanning-tree, которое построил свич:

enable
    show spanning-tree

… отобразит информацию следующего вида:

  Spanning tree enabled protocol rstp
  Root ID    Priority    32769
             Address     0005.5ECB.9206
             Cost        19
             Port        1(FastEthernet0/1)
             Hello Time  2 sec  Max Age 20 sec  Forward Delay 15 sec

  Bridge ID  Priority    32769  (priority 32768 sys-id-ext 1)
             Address     00D0.D3A6.9A32
             Hello Time  2 sec  Max Age 20 sec  Forward Delay 15 sec
             Aging Time  20

Interface        Role Sts Cost      Prio.Nbr Type
---------------- ---- --- --------- -------- --------------------------------
Fa0/2            Desg FWD 19        128.2    P2p
Fa0/3            Altn BLK 19        128.3    P2p
Fa0/1            Root FWD 19        128.1    P2p

… в которой можно увидеть, что дерево состоит из нашего свича плюс еще два, один из которых является корневым. Нас также могут интересовать статуты портов свича. Про состояния портов… Когда порт свича включается, он переходит в состояние Listening, т. е. обменивается информацией с подключенным к нему другим свичом. Затем он переходит в состояние Learning — вычисляет дерево коммутации. А затем, в зависимости от результатов вычислений он переходит либо во включенное Forwarding либо выключенное Blocked состояние.

VLAN

VLAN — Virtual Local Area Network. Штука, простая, хотя словами объяснить трудно. Предположим имеется две локальные сети (напомню, что принадлежность хоста к той или иной локальной сети определяется его IP-адресом и маской подсети), подключенные к одному свичу. Свич (в определенных обстоятельствах) дублирует приходящие на один из его интерфейсов пакеты на всех остальных своих интерфейсах, из-за чего пакеты из одной локальной сети могут попадать в другую. Это само по себе не страшно, но порождает ненужный трафик между двумя сетями. Использование VLAN’ов позволяет логически разделить две подсети, как бы создав два логических свича из одного физического. Так можно изолировать трафики локальных сетей друг от друга.

Во-первых VLAN надо на свиче создать. По-умолчанию в свиче всегда присутствует один VLAN, который называется vlan 1. Создать VLAN и дать ему удобочитаемое имя можно так:

enable
    configure terminal
        vlan <1-1005>
        vlan name <vlan-name>

Конкретный пример: если к свичу подключены две локальных сети, то можно создать например два VLAN’а:

enable
    configure terminal
        vlan 2
        name marketing_department

        vlan 3
        name it_department

Далее те интерфейсы свича (access-порты), к которым подключены указанные локальные сети, надо сопоставить с созданными VLAN’ами (удобно работать сразу с диапазонами интерфейсов при помощи команды interface range). Пример:

enable
    configure terminal
        interface range fa0/1-10
            switchport mode access
            switchport access vlan 2

        interface range fa0/11-20
            switchport mode access
            switchport access vlan 3

Однако не все интерфейсы свича могут быть подключены к указанным локальным подсетям — например может быть интерфейс, подключенный к роутеру, через который осуществляется доступ обеих локальных сетей в Интернет. По такому интерфейсу будет передаваться трафик из обоих VLAN’ов, поэтому этот интерфейс надо пометить как trunk:

enable
    configure terminal
        interface range fa0/21
            switchport mode trunk

Вот и всё. Можно посмотреть информацию о VLAN’ах при помощи команды:

enable
    show vlan brief

… которая выведет информацию следующего вида:

VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
1    default                          active    Fa0/22, Fa0/23, Fa0/24
2    marketing_department             active    Fa0/1, Fa0/2, Fa0/3, Fa0/4
                                                Fa0/5, Fa0/6, Fa0/7, Fa0/8
                                                Fa0/9, Fa0/10
3    it_department                    active    Fa0/11, Fa0/12, Fa0/13, Fa0/14
                                                Fa0/15, Fa0/16, Fa0/17, Fa0/18
                                                Fa0/19, Fa0/20

В приведенном вывода отсутствует trunk’овый интерфейс. Чтобы его увидеть, надо выполнить следующую команду:

enable
    show interfaces trunk

… которая отобразит информацию о trunk’овых интерфейсах:

Port        Mode         Encapsulation  Status        Native vlan
Fa0/21      on           802.1q         trunking      1

Port        Vlans allowed on trunk
Fa0/21      1-1005

Port        Vlans allowed and active in management domain
Fa0/21      1,2,3

Port        Vlans in spanning tree forwarding state and not pruned
Fa0/21      1,2,3

Ну хорошо, а как всё это работает? Как свич отделяет трафик одной подсети от трафика другой? Он помечает пакеты каждой сети тегом, который идентифицирует тот или иной VLAN, это называется тегированием трафика. Если пакет входит в access-порт свича, то он помечается тегом, соответствующим тому VLAN’у, которому принадлежит порт. Если пакет выходит из access-порта, то тег, которым он был (если был) помечен, снимается. Что касается trunk-портов, то для них никаких действий с тегами не производится. Далее, в зависимости от того, каким тегом помечен тот или иной пакет, свич решает, на какой порт (или порты) его отправить.

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

enable
    configure terminal
        interface <interface>.<subinterface>
            ip address <ip> <subnet-mask>
            encapsulation dot1Q <vlan-ID>

Пример:

enable
    configure terminal
        interface fa0/0.2
            encapsulation dot1Q 2
            ip address 85.0.0.1 255.255.255.252

        interface fa0/0.3
            encapsulation dot1Q 3
            ip address 85.0.0.5 255.255.255.252

Если на интерфейс роутера помимо трафика из VLAN’ов приходит еще и нетегированный трафик, то надо создать логический интерфейс и для него:

enable
    configure terminal
        interface fa0/0.1
            encapsulation dot1Q 1 native
            ip address 10.0.0.1 255.0.0.0

Access-list

Access-list’ы позволяют отбрасывать трафик, выходящий (outbound) из заданного интерфейса либо входящий (inbound) в заданный интерфейс, адрес источника которого удовлетворяет заданному правилу:

enable
    configure terminal
        access-list <1-199> deny <subnet> <inverted-mask>

        interface <interface-name>
            ip access-group <1-199> <in|out>

Пример. Отбрасывать трафик, который выходит из интерфейса fa0/0.3 и адрес источника которого принадлежит к подсети 192.168.0.0/24:

enable
    configure terminal
        access-list 1 deny 192.168.0.0 0.0.0.255

        interface fa0/0.3
        ip access-group 1 out

Другой пример. Отбрасывать трафик, который входит в интерфейс fa0/0.3 и адрес источника которого принадлежит к подсети 192.168.1.0/24:

enable
    configure terminal
        access-list 2 deny 192.168.1.0 0.0.0.255

        interface fa0/0.3
        ip access-group 2 in

Удаленное управление свичом или роутером по протоколу telnet

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

enable
    configure terminal
        enable password <password>
        line vty <0-15> <0-15>
            login
            password <password>

Пример:

enable
    configure terminal
        enable password admin_pswd
        line vty 0 4
            login
            password telnet_pswd

Чем один пароль отличается от другого? Один (telnet_pswd) позволяет получить доступ к командной строке, второй (admin_pswd) — перейти в привилегированный режим и настроить устройство.

Однако для того, чтобы можно было получить удаленный доступ к устройству, устройство должно иметь IP-адрес. С роутером всё просто — любой его интерфейс имеет IP-адрес. А свич? Оказывается для свича можно указать IP-адрес для VLAN’а. Как правило это — vlan 1:

enable
    configure terminal
        interface vlan1
            ip address <ip>
            no shutdown

VPN: GRE-туннель

VPN — Virtual Provate Network. GRE — Generic Routing Encapsulation. VPN — технология (набор протоколов), благодаря которой можно для двух разных удаленных друг от друга подсетей создать иллюзию, что они «соединены одним свичом».

Предположим, есть две локальных подсети 192.168.0.0/24 и 192.168.4.0/24, которые подключены к роутерам соответственно r1 и r2, и надо для них создать VPN. На обоих роутерах интерфейс fa0/0 смотрит в локальную сеть (адреса r1:192.168.0.1/24, r2:192.168.4.1/24), а fa0/1 — в Интернет (адреса r1:1.0.0.2/8, r2:2.0.0.2/8).

На роутере r1 создаем виртуальный интерфейс Tunnel0 и
1) даем ему IP-адрес
2) указываем интерфейс-источник роутера r1: fa0/1
3) указываем внешний IP-адрес роутера r2 в качестве адреса назначения

r1>enable
    configure terminal
        interface tunnel 0
            ip address 10.0.0.1 255.0.0.0
            tunnel source fa0/1
            tunnel destination 2.0.0.2

Аналогично поступаем с роутером r2:

r2>enable
    configure terminal
        interface tunnel 0
            ip address 10.0.0.2 255.0.0.0
            tunnel source fa0/1
            tunnel destination 1.0.0.2

Далее надо для обоих роутеров прописать маршрут до локальных подсетей друг-друга:

r1>enable
    configure terminal
        ip route 192.168.4.0 255.255.255.0 10.0.0.2
r2>enable
    configure terminal
        ip route 192.168.0.0 255.255.255.0 10.0.0.1

… либо на обоих роутерах включить протокол RIP

r1>enable
    configure terminal
        router rip
            version 2
            network 192.168.0.0
r2>enable
    configure terminal
        router rip
            version 2
            network 192.168.4.0

После всего этого подсети 192.168.0.0/24 и 192.168.4.0/24 оказываются как бы соединены одним свичом, и хост в одной сети может например пропинговать хост в другой сети:

host192.168.0.101>ping 192.168.4.102

Консольные утилиты

Напоследок вот набор команд командной строки (для хостов, а не для роутеров и свичей), которые пригождаются при работе с сетью:

ping <ip>
ping -t <ip>
tracert <ip>
telnet <ip>
nslookup <domain-name>

Добавить комментарий

Ваш адрес email не будет опубликован.