Данный блок состоит их двух лабораторных работ, в которых будут рассмотрены широко используемые методы организации трансляции сетевых адресов в сетях 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.