Краткая теоретическая справка. Данный блок состоит их двух лабораторных работ, в которых будут рассмотрены широко используемые методы организации трансляции сетевых адресов в сетях

Данный блок состоит их двух лабораторных работ, в которых будут рассмотрены широко используемые методы организации трансляции сетевых адресов в сетях IPv4/IPv6.

Трансляция сетевых адресов является универсальным способом расширения адресного пространства. Появление системы трансляции сетевых адресов, или NAT (Network Address Translation) обусловлено бурным ростом небольших сетей, в то время относящихся к классу С, и, как следствие, сокращение IP-адресов данного класса. Тогда одним из способов расширения адресного пространства наравне с введением бесклассовой адресации стало использование неуникальных IP-адресов, иногда называемых маскарадными. Традиционно это адреса вида 192.168.0.0 и 10.0.0.0, но в последнее время могут использоваться некоторые другие. Такие адреса уникальны только в пределах закрытой сети (например, корпоративной или сети провайдера). Для выхода в общедоступную сеть необходим уникальный адрес, который присвоен шлюзу. Система NAT позволяет осуществлять подмену адресов на шлюзе.

В первой работе мы рассмотрим такие виды трансляции сетевых адресов, как Source NAT (SNAT) и Destination NAT (DNAT). Как следует из названий, данные виды NAT подменяют адреса отправителя и получателя пакета соответственно. Маскарадингом (Masquerade) называется разновидность SNAT, в которой подменяемый адрес отправителя может изменяться динамически в соответствии с текущим адресом шлюзового интерфейса.

В операционной системе Linux за трансляцию сетевых адресов отвечает утилита iptables (или ip6tables для IPv6). Вообще, iptables является одним из командных интерфейсов межсетевого экрана Netfilter и используется для настройки разнообразных правил фильтрации сетевого трафика. Однако, в рамках данной работы, мы рассмотрим только одну из его возможностей – NAT.

Рассмотрим некоторые ключевые понятия iptables:

− Правило – состоит из критерия, действия и счетчика. Если пакет соответствует критерию, к нему применяется действие, и он учитывается счетчиком. Критерия может и не быть – тогда неявно предполагается критерий «все пакеты».

− Критерий – логическое выражение, анализирующее свойства пакета и/или соединения и определяющее, подпадает ли данный конкретный пакет под действие текущего правила.

− Действие – описание действия, которое нужно проделать с пакетом и/или соединением в том случае, если они подпадают под действие этого правила.

− Цепочка – упорядоченная последовательность правил. Цепочки можно разделить на пользовательские и базовые.

− Базовая цепочка – цепочка, создаваемая по умолчанию при инициализации таблицы. Каждый пакет, в зависимости от того, предназначен ли он самому хосту, сгенерирован им или является транзитным, должен пройти положенный ему набор базовых цепочек различных таблиц. Имена базовых цепочек всегда записываются в верхнем регистре (PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING).

− Пользовательская цепочка – цепочка, созданная пользователем. Может использоваться только в пределах своей таблицы.

− Таблица – совокупность базовых и пользовательских цепочек, объединенных общим функциональным назначением. Имена таблиц записываются в нижнем регистре, так как в принципе не могут конфликтовать с именами пользовательских цепочек. При вызове команды iptables таблица указывается в формате -t имя_таблицы. При отсутствии явного указания, используется таблица filter.

Все пакеты пропускаются через определенные для них последовательности цепочек. При прохождении пакетом цепочки, к нему последовательно применяются все правила этой цепочки в порядке их следования. Таким образом, во-первых, пакет проверяется на соответствие критерию, а во-вторых, если он соответствует данному критерию, то к нему применяется указанное действие. Под действием может подразумеваться как элементарная операция (например, ACCEPT, REJECT), так и переход в одну из пользовательских цепочек. Действия ACCEPT, REJECT и DROP являются терминальными, т.е. прекращающими обработку пакета в рамках данной базовой цепочки.

В обобщенном виде добавление правила iptables можно представить так:

iptables -t <имя_таблицы> -A <цепочка> <критерий> -j <действие>

 

Здесь -A обозначает, что данное правило будет дописано в конец заданной цепочки заданной таблицы. Просмотр правил в цепочке происходит последовательно сверху вниз.

В данной работе нас будет интересовать только таблица NAT. Эта таблица содержит три базовые цепочки: PREROUTING, OUTPUT и POSTROUTING. В цепочку PREROUTING попадают все входящие пакеты, адресованные данному хоста или транзитные, до принятия хостом решения о маршрутизации пакета. Пакеты, отсылаемые данным хостом, будут проходить цепочку OUTPUT, а транзитные пакеты на выходе из узла попадут в цепочку POSTROUTING. Таким образом, можно заметить, что для организации SNAT/Masquerade на транзитном шлюзе нужно применять правила цепочки POSTROUTING, в то время как цепочка PREROUTING будет использоваться при организации DNAT.

В операциях NAT, производимых с помощью iptables, отслеживание состояний используется автоматически. Вам достаточно указать критерии, под которые подпадет лишь первый пакет в соединении – и трансляция адресов будет применена ко всем пакетам в этом соединении, а также в связанных с ним соединениях.

С появлением сетей IPv6 возникла необходимость совместной работы сегментов сетей с разной адресацией. Скорее всего, еще довольно долгое время доминирующим протоколом останется IPv4. В таких условиях особую актуальность приобретают методы конвергенции и взаимодействия сетей различных типов. На данный момент разработано множество решений этой проблемы, из наиболее распространенных можно назвать 6to4, 6rd, Teredo, NAT64 и др. В лабораторной работе №8 мы рассмотрим универсальный способ передачи трафика IPv6 через сети IPv4, основанный на использовании протокола 6to4 (рис.1).

 

Рис. 1 – Туннель 6to4

 

Протокол 6to4 предназначен для связи двух подсетей IPv6 через IPv4 и инкапсулирует пакеты версии 6 в тело обыкновенных IPv4-пакетов. Подробное описание работы протокола 6to4 вы можете найти в RFC3056

 

Задание на лабораторную работу:

1. Соберите сеть для выполнения лабораторной работы согласно полученному заданию (рис. 2, табл. 4).

2. Настройте SNAT/маскарадинг на soft-core1 согласно приведенной схеме подключившись к программному маршрутизатору.

3. Подключитесь к компьютеру управления mnlin и запустите генератор трафика Ostinato. Создайте для порта eth1 поток UDP-пакетов с произвольными портами (1024-65535), фиксированным IPv4-адресом отправителя (из указанных в задании подсети) и адресом назначения.

4. Настройте DNAT на маршрутизаторе soft-core2. Измените созданный ранее UDP-поток таким образом, чтобы портом назначения был 34001.

5. Проведите проверку правильности конфигурации NAT.