Маскарадинг что это
Перейти к содержимому

Маскарадинг что это

  • автор:

Маскарадинг для дотошных чайников

Всем привет, начал наконец-то изучать iptables. Прочитал несколько статей, вроде даже примерно понял(остались вопросы по пути пакета по цепочкам, т.к. везде по разному описано, думаю решить это тыканием палочкой в каждую цепочку и вдыхания в нос результата).

$IPT -t nat -A POTROUTING -m mark --mark 10 -j MASQUERADE # натим все пакеты которые имеют метку 10 $IPT -t nat -A POTROUTING -m mark --mark 11 -j MASQUERADE # натим все пакеты которые имеют метку 11

Вопрос — разве для маскарада не нужно указывать выходящий интерфейс? Так как у автора два провайдера через какой адрес в итоге выйдет абонент? И почему?

kovalev_94
10.05.19 13:22:50 MSK

ну так почитай еще про policy-based routing и для чего нужно -m mark —mark 10/11 как думаешь?

Anoxemian ★★★★★
( 10.05.19 13:25:14 MSK )
Ответ на: комментарий от Anoxemian 10.05.19 13:25:14 MSK

Думаю для отделения одних юзеров от других. Вопрос именно с маскариднгом, в правиле написано натить и тех и других.

kovalev_94
( 10.05.19 13:26:58 MSK ) автор топика
Ответ на: комментарий от Anoxemian 10.05.19 13:25:14 MSK

Или ты хочешь намекнуть мне что внешний адрес будет переписываться в зависимости от маршрута, и это тот принцип по которому работает маскарадинг если не указывать внешний интерфейс?

kovalev_94
( 10.05.19 13:29:03 MSK ) автор топика

разве для маскарада не нужно указывать выходящий интерфейс

Не нужно. Точнее зависит от правила.

В iptables ты пишешь правило, в левой части условие, критерий отбора, а в правой части, после ‘-j’ ты указываешь действие для этого правила. В данном случае ‘-j MASQUERADE’.

Пакеты по цепочкам двигаются по разному. Пакеты, адресованные самому шлюзу и от самого шлюза двигаются через одни цепочки, а транзитные пакеты — через другие.

anonymous
( 10.05.19 13:31:56 MSK )
Ответ на: комментарий от kovalev_94 10.05.19 13:29:03 MSK

Он хочет сказать, что в случае ‘-m mark —mark 10 -j MASQUERADE’ маскарадиться будут все пакеты, которые помечены маркировкой 10.

anonymous
( 10.05.19 13:34:02 MSK )
Ответ на: комментарий от anonymous 10.05.19 13:31:56 MSK

Читал ее, правда не всю, путь пакета примерно понимаю(на опеннете в схемке не указана таблица raw, и в некоторых других схемах, из других источников написано что после цепочки output принимается еще одно routing desion). Вопрос в том с какого интерфейса будет взят адрес для inside global.

kovalev_94
( 10.05.19 13:43:45 MSK ) автор топика
Ответ на: комментарий от anonymous 10.05.19 13:34:02 MSK

Я пытаюсь понять в какой адрес они маскарадятся, и по какому правилу.

kovalev_94
( 10.05.19 13:45:05 MSK ) автор топика
Ответ на: комментарий от kovalev_94 10.05.19 13:45:05 MSK

Ну вот у меня у меня два белых ip 1.1.1.1 на eth0, 2.2.2.2 на eth1, я могу клиента занатить в 1.1.1.1 и в 2.2.2.2. Куда он занатиться если я не указываю интерфейс?

kovalev_94
( 10.05.19 13:47:29 MSK ) автор топика
Ответ на: комментарий от kovalev_94 10.05.19 13:45:05 MSK

Маскарадится по адресу исходящего интерфейса.

По этому правилу:

$IPT -t mangle -A PREROUTING -s $NET_SUB1 -d ! $NET_LOCAL -j MARK --set-mark 10 # все пакеты которые идут от $NET_SUB1 и не в $NET_LOCAL маркируем меткой 10 

пакет помечается.

А по правилу вот этому:

-A POTROUTING -m mark --mark 10 -j MASQUERADE # натим все пакеты которые имеют метку 10 

по метке натится.
anonymous
( 10.05.19 13:50:32 MSK )
Ответ на: комментарий от kovalev_94 10.05.19 13:47:29 MSK

Как ты напишешь правило, так и занатится.

anonymous
( 10.05.19 13:51:34 MSK )
Ответ на: комментарий от anonymous 10.05.19 13:50:32 MSK

Я конечно извиняюсь за мою непробиваемую тупость, но где у тебя указан интерфейс в который надо натить?

kovalev_94
( 10.05.19 14:53:32 MSK ) автор топика
Ответ на: комментарий от anonymous 10.05.19 13:51:34 MSK

Два интерфейса с белыми айпи, два интерфеса смотрящие в локалки, адреса с одной локалки, помечаем меткой 10, со второй 11. Пишем маршрутики. В какой занатяться абоненты с меткой 10, а в какой с меткой 11?

kovalev_94
( 10.05.19 14:58:18 MSK ) автор топика
Ответ на: комментарий от kovalev_94 10.05.19 14:53:32 MSK

Ты привел ссылку на статью и я разбираю в вписанное в ней.

В этих правилах исходящий интерфейс нигде не указан.

Если у тебя есть несколько исходящих адресов и ты хочешь указать адрес в который нужно натить, то тебе нужно использовать не ‘-j MASQUERADE’, а использовать ‘-j SNAT’ и уже в SNAT в соответствующем параметре указывать в какой исходящий адрес ты хочешь снатить пакет.

Почитай пожалуйста статью, ссылку на которую я привел.

anonymous
( 10.05.19 15:17:01 MSK )
Ответ на: комментарий от kovalev_94 10.05.19 14:58:18 MSK

какой занатяться абоненты с меткой 10, а в какой с меткой 11?

Они занатятся в исходящий ip адрес. А этот ip адрес будет выбран согласно соответствующей таблицы маршрутизации.

Посмотри твою статью, там создаются дополнительные таблицы маршрутизации.

В цепочке PREROUT будет выбран маршрут движения пакета и интерфейс (адрес) с которого должен уйти пакет, а в конце в цепочке POSTROUTING будет выполнена трансляция исходящего сетевого адреса. В случае, если применяется правило MASQUERADE, то трансляция будет выполнена в исходящий адрес.

anonymous
( 10.05.19 15:21:52 MSK )
Ответ на: комментарий от kovalev_94 10.05.19 14:58:18 MSK

Ты вообще читать статью по твоей ссылке пробовал?

Там все нормально расписано, шаг за шагом, что и почему делается.

anonymous
( 10.05.19 15:40:21 MSK )

Вопрос — разве для маскарада не нужно указывать выходящий интерфейс?

Можно указать, а можно не указывать. Система просто сдедает то, что ты закомандуешь. Другой вопрос: как корректно сделать. И вот тут уже ДА, правильно указать интерфейс. Но опять же, если тебе достаточно идентифтцировать пакеты по меткам, то можно и без указания интерфейса.

rumgot ★★★★★
( 10.05.19 17:40:11 MSK )
Последнее исправление: rumgot 10.05.19 17:42:32 MSK (всего исправлений: 1)

Ответ на: комментарий от anonymous 10.05.19 15:21:52 MSK

Вооооооооооооот. Теперь понял. В этом и был вопрос. На какой интерфейс натится если в правиле маскарад не указан интерфейс? Согласно таблице маршрутизации. Большое спасибо вам и всем принявшим в обсуждении.

kovalev_94
( 10.05.19 19:52:33 MSK ) автор топика
Ответ на: комментарий от anonymous 10.05.19 15:17:01 MSK

Да читал вроде)) Видимо просто не правильно формулировал вопрос. Ниже мне ответили. Тебе спасибо за участие. Кстати если два провайдера, выдают адрес по dhcp, snat бы не подошёл.

kovalev_94
( 10.05.19 19:59:27 MSK ) автор топика
Ответ на: комментарий от rumgot 10.05.19 17:40:11 MSK

Я понимаю что это конечно не аргумент, но хорошая причина для вопроса — в Cisco IOS я грубо говоря указываю «что натить куда натить» (куда натить либо интерфейс либо статический адрес ну или пул). Так вот как я понял snat это статический адрес, маскарад это интерфейс. Поэтому и встал в ступор когда увидел маскарад без указания интерфейс. Вопрос был именно про часть куда натить.

kovalev_94
( 10.05.19 20:10:05 MSK ) автор топика

targitaj ★★★★★
( 10.05.19 20:12:35 MSK )
Ответ на: комментарий от targitaj 10.05.19 20:12:35 MSK

Нет. Попробую прочитать. Но не все статьи на инглише мне даются. Спасибо.

kovalev_94
( 11.05.19 01:10:39 MSK ) автор топика

Когда ты пишешь iptables . -o $IFACE -j MASQUERADE , то -o $IFACE — это фильтр, а не указание того, через какой интерфейс пакет должен выйти. Ядро уже знает, какой интерфейс будет использован, единственное, что ты можешь менять — цель ( -j $TARGET ).

Выдержка из man iptables :

iptables [-t table] <-A|-C|-D>chain rule-specification . rule-specification = [matches. ] [target] match = -m matchname [per-match-options] target = -j targetname [per-target-options] 

tiandrey ★★★★★
( 12.05.19 01:38:18 MSK )
Последнее исправление: tiandrey 12.05.19 01:42:34 MSK (всего исправлений: 2)

Ответ на: комментарий от kovalev_94 10.05.19 20:10:05 MSK

в Cisco IOS я грубо говоря указываю «что натить куда натить»

«Натить» ничего не знает ни про «что», ни про «куда». NAT — это технология подмены адреса в пакете и только. «Куда» определяется таблицей маршрутизации, которая не имеет никакого отношения к NAT. У тебя в системе есть LO и, возможно, еще какие-то интерфейсы. Допустим, у тебя есть eth0, который смотрит в локалку, и eth1, который смотрит в Интернет. Если пакет пришел из eth и целью является локальный процесс, то это INPUT. Если пакет от локального процесса хочет выйти в eth, то это OUTPUT. Если пакет хочет из eth попасть в eth (мимо LO), то это комбинация из PREROUTIMG — FORWARD — POSTROUTING. Технология NAT позволяет подменить ip адрес в пакете. Адрес источника и/или получателя. Эта подмена сочетается с таблицей маршрутизации. Маскарадинг отличается от DNAT/SNAT только отсутствием знания какой ip ты будешь подставлять, маскарад сам будет определять. Если ты знаешь какой ip будешь подставлять, то маскарадинг использовать НЕ следует, для этого есть SNAT/DNAT. Кроме того, с помощью iptables можно ставить метки на пакетах, которые тоже можно использовать для маршрутизации. Просто пойми, что это два разных механизма (iptables и routing), которые могут работать совместно. Там еще есть механизм traffic control из пакета iproute2, который может задавать пропускные способности для соединений.

targitaj ★★★★★
( 12.05.19 02:13:32 MSK )
Ответ на: комментарий от targitaj 12.05.19 02:13:32 MSK

Хммм. Я вроде как понял, но сбила с толку фраза — «не знает про что ни про куда». Это ты надеюсь говоришь в контексте ядра Linux? Иначе я совсем запутался))) И разве в правиле ты не задаешь «что»?

kovalev_94
( 12.05.19 08:05:16 MSK ) автор топика
Ответ на: комментарий от kovalev_94 10.05.19 20:10:05 MSK

Забудь про маскарад в циске — там всё несколько по другому. Начать хотя бы с того, что если ты не укажешь входной и выходной интерфейсы — NAT там не взлетит(момент с interface templates опустим пока)

В Cisco NAT — это отдельный набор операций, который может быть объединен с файрволом посредством общих route-map например.

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

Некоторые ограничения при этом правда раздражают — то же отсутствие возможности указать входящий интерфейс в POSTROUTING. Это к слову тот случай, когда можно выкрутиться метками.

Pinkbyte ★★★★★
( 12.05.19 08:35:27 MSK )
Последнее исправление: Pinkbyte 12.05.19 08:37:43 MSK (всего исправлений: 1)

Ответ на: комментарий от Pinkbyte 12.05.19 08:35:27 MSK

Прошу меня простить за N-ую тучу вопросов, но все же: 1. Я думал файрвол в циске и прочих это acl, а route map как понял это Policy Based Routing. 2. Как метки помогают выкрутиться? Это же лишь маркировка для дальнейшего роутинга? Или это и имеется ввиду(как в моем примере).

P.S. Знаю что умность вопросов зашкаливает, но вдруг вы еще какой нибудь интересный способ расскажете)))

kovalev_94
( 12.05.19 13:37:08 MSK ) автор топика
Ответ на: комментарий от kovalev_94 12.05.19 13:37:08 MSK

Вопросы у тебя как раз нормальные для того, у кого не было опыта. Бывает и хуже, поверь.

Я думал файрвол в циске и прочих это acl

На ACL-ях строится только stateless файрвол. Если нужны гибкие правила — лучше смотреть в стороны Zone-based firewall. На тех цисках с которыми я работаю — он единственный вариант организации stateful-файрвола.

Не, бесспорно, не всегда нужен firewall с поддержкой соединений, но на серьезных масштабах без него очень-очень тоскливо.

Именно поэтому лучше уж писюк с Linux, чем дрыще-аппаратный роутер. Ну а Cisco как всегда недостаток — это ценник 🙂

route map как понял это Policy Based Routing

Не только. Но можно использовать и как PBR в том числе

Как метки помогают выкрутиться? Это же лишь маркировка для дальнейшего роутинга? Или это и имеется ввиду(как в моем примере).

Задача — необходимо всё пришедшее в интерфейс eth0 натить с одним source-адресом, а пришедшее с eth2 — с другим. Указать -i в POSTROUTING нельзя. Вариант решения проблемы: маркируем пакеты с eth0 меткой допустим 10, а с eth2 — 20 в PREROUTING. В правилах -j SNAT указываем соответствующий -m mark.

Pinkbyte ★★★★★
( 12.05.19 13:50:52 MSK )
Последнее исправление: Pinkbyte 12.05.19 13:53:00 MSK (всего исправлений: 3)

Маскарадинг что это

Маскарадинг (masquerading) и трансляции ip-адресов (NAT)

Проблема маскарада (masquerading) и трансляции ip-адресов в Линуксе. Что это такое, что там можно и что нельзя.

Автор оригинала Иван Н. Песин

Но так как статья морально устарела, то она будет взята лишь за основу. (претензии автора принимаются). Каждому Linux админу рано или поздно приходится сталкиваться с проблемой маскарада (masquerading) и трансляции ip-адресов на Линуксе (кроме тех у кого есть куча реальных адресов и они раздают их всем компам в локальной сети :-)). Если у Вас есть локальная сеть, подключенная к сети Интернет через linux сервер, то без маскарада не обойтись.
Начнем, пожалуй, с определений.
1. Маскарад (masquerade) и трансляция адресов (NAT) в мире Linux не являются синонимами.
2. Маскарад — замена адреса на адрес машины, выполняющей маскарад.
3. Трансляция адресов — замена адреса на любой указанный.
Если вы используете ОС Linux с ядром 2.0 или 2.2, Вам нужно будет опустить глаза вниз — в конце этой статьи находится авторское описание настроек ipfwadm и ipchains.
Я же опишу настройку NAT, masquerading для ОС Linux с ядром 2.4- 2.6, де используются iptables.
Для чего это вообще нужно? Вы имеете сеть с адресами:
10.0.0.0-10.255.255.255 — сеть класса А
172.16.0.0 — 172.31.255.255 — сеть класса B
192.168.0.0-192.168.255.255 — сеть класса С
Эти сети зарезервированы для использования в локальных сетях (intranet) и в сети Интернет не используются.
Допустим ваш компьютер в локальной сети с ip 192.168.0.2 получает доступ к Интернет через сервер с внутренним ip адресом 192.168.0.1 (eth1) и внешним адресом 111.111.111.111 (eth0).
Если пакет с вашего компьютера будет иметь ваш адрес источника (192.168.0.2) то он просто не придет обратно, так как удаленный хост не будет знать по какому маршруту отослать его обратно. Для того, чтобы этого не случилось и придуманы NAT и masquerading.
Итак как работает маскарад.
Ваш пакет (например на проходит через сервер и в нем адрес источника меняется на адрес сервере (111.111.111.111). Пакет приходит на и хост отвечает по адресу в пакете (111.111.111.111). Так как Ваш сервер запомнил, что пакет для посылали вы, то он принимает пакет и отдает его вашему компьютеру.
Вот и все пакет ушел и вернулся.
Включается маскарад в iptables очень просто:
iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT
(этой командой вы разрешили прохождение пакетов между сетевыми интерфейсами из локальной сети 192.168.0.0/24)
iptables -A FORWARD -d 192.168.0.0/24 -j ACCEPT
(этой командой вы разрешили прохождение пакетов между сетевыми интерфейсами в локальную сеть 192.168.0.0/24)
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j MASQUERADE
(и последняя команда — ей вы включили маскарад для сети 192.168.0.0/24).
Еще вам нужно проверить чтобы был включен forward ip в вашем ядре.
Сделать это можно командой
cat /proc/sys/net/ipv4/ip_forward
если Вы получили 1 на выходе значит все в порядке, если 0, тогда вам нужно включить ip forward командой
echo 1 >/proc/sys/net/ipv4/ip_forward
Как работает NAT ?
Ваш пакет (например на проходит через сервер и в нем адрес источника меняется на указанный адрес (мы укажем адрес сервера (111.111.111.111). Пакет приходит на и хост отвечает по адресу в пакете (111.111.111.111). Пакет приходит на Ваш сервер и происходит обратная замена.
Включается NAT в iptables так:
iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT
(этой командой вы разрешили прохождение пакетов между сетевыми интерфейсами из локальной сети 192.168.0.0/24)
iptables -A FORWARD -d 192.168.0.0/24 -j ACCEPT
(этой командой вы разрешили прохождение пакетов между сетевыми интерфейсами в локальную сеть 192.168.0.0/24)
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j SNAT —to-source 111.111.111.111
(и последняя команда — ей вы включили трансляцию адресов сети 192.168.0.0/24 на адрес 111.111.111.111).
Еще вам нужно проверить чтобы был включен forward ip в вашем ядре.
Сделать это можно командой
cat /proc/sys/net/ipv4/ip_forward
если Вы получили 1 на выходе значит все в порядке, если 0, тогда вам нужно включить ip forward командой
echo 1 >/proc/sys/net/ipv4/ip_forward
Вот собственно и все. Дальше идет статья Ивана Песина
Решение проблемы маскарада, на ядрах разных версий отличается, и потому мы разделим нашу повесть на две части, ядра версии от, если не ошибаюсь, 2.0.29 до 2.2.9ас, и от 2.2.10 до 2.4.0. Ядра версии 2.4.х я обсуждать не буду, потому как там имеется вполне сносное описание. Итак,

Ядра версий 2.0.29 — 2.2.9

Для функции маскарада в этих версиях необходим пакет ipfwadm либо ipchains, зависит от версии. Установив их можно приступать к осмысленным действиям. Очень тривиальная задача решается следующим образом:

ipchains -A forward -i ethX -s 192.168.1.0/24 -j MASQ

результатом этой команды будет замена исходных адресов пакетов из сети 192.168.1.0 класса С, при маршрутизации их через интерфейс ethX, на адрес машины на которой выполнены команды.

Перейдем теперь к более сложным случаям. Допустим, вам необходимо, в зависимости от адреса источника/назначения маскарадить под разными адресами. Как же это выполнить? Тут нам придется обратиться к нестандартным средствам.

Для начала посмотрим урл Хотя там написано не очень много, зато содержательно. После прочтения остается лишь вытащить соответствующий архив с программой и патчем ядра. Пропатчив ядро, его надо перекомпилировать (прочитать почитайки обязательно!) с соответствующими изменениями в конфигурации. Устанавливаем скомпилированное ядро, при этом не забываем про «ядро на всякий случай» (рабочее ядро, которое вы будете загружать, если новое ядро не загрузится). После перезагрузки станет возможным использование команды ipnatadm. Название говорит само за себя ;). Теперь легко можно изобразить команды вроде:

ipnatadm -O -i -b -S 192.168.1.1/24 -M 207.46.230.219
ipnatadm -O -i -b -S 192.168.1.2/24 -M 207.46.230.229

ну и так далее, думаю, разобраться можно. Есть еще полезная опция -W, позволяющая задавать интерфейс. Да, не забудьте, что псевдонимы интерфейсов не понимаются ни ipchains, ни ipfwadm, ни ipnatadm. Перейдем теперь к теме

Ядра версий 2.2.10 — 2.4.0

На этих версиях, к сожаленью, программа ipnatadm предательски перестает функционировать. Почему предательски? Потому что удается пропатчить ядро, скомпилировать, загрузиться и даже приконнектиться с помощью telnet, например. Но при попытке выполнить, допустим, даже вышеописанные команды, интерфейс подвисает. Ну что ж, значит нужно искать другие ходы. Если нужно, значит надо.

Внимательно прочитав информацию, размещенную на сайте с ipnatadm, можно обнаружить любопытный факт. А именно то, что один наш земляк Алексей Кузнецов, пишет часть ядра, которая, в том числе, ведает маршрутизацией и маскарадом. Из этого прямо следует, что функциональность этого кода огромна, а документация — м-да, хромает, мягко выражаясь. Сам Кузнецов советует разбирать исходники ядра — для тех, кто сможет, захочет, имеет время, и т.д. и т.п.

Ну а я попробую, насколько это возможно, сжато рассмотреть стандартный и нестандартные методы маскарада, и NAT´а. Стандартный случай: необходимо маскарадить исходящие пакеты хоста 192.168.1.1 в 207.46.230.219. Подход к решению этой задачи полностью аналогичен случаю с более ранними ядрами. Необходимо лишь учесть, что в системах с этими ядрами утилиты ipfwadm нет, вместо нее используется ipchains. Сразу перейдем к рассмотрению более сложных случаев. Допустим, как и в предыдущем примере, пакеты с разных машин, необходимо транслировать в разные адреса.

Тут придется прибегнуть к утилите ip из пакета iproute. Изобразим следующие команды:

ip rule add from 192.168.1.1 nat 207.46.230.219
ip rule add from 192.168.1.2 nat 207.46.230.229

ip route add nat 207.46.230.219 via 192.168.1.1
ip route add nat 207.46.230.229 via 192.168.1.2

Результатом этих действий будет маскарад и демаскарад адресов 192.168.1.1 и 192.168.1.2, соответственно в 207.46.230.219 и 229.

Вот такие пирожки. Это все теория и стандартные случаи, давайте рассмотрим более интересный и совсем реальный пример. Имеется сеть на ~250 машин, линукс красная шапочка версии 6.2, в роли маршрутизатора, и выполняющий маскарад внутренних машин под адрес, допустим, 207.46.230.219. Линукс включен в машину провайдера витой парой, из сетевой в сетевую. Кроме того, провайдер, естественно, не желает тратить отдельный ip-адрес на сетевую в которую включен наш линукс. Другими словами (рисунком) ситуация следующая

http://linuxportal.ru/images_pub/nat.jpg

Вопрос: как это реализовать на линуксе? Вообще-то весьма просто. Для начала объясним линуксу, как посылать пакеты на машину провайдера. Она находиться не в одной логической сети с нами, а потому изначально линукс не знает как туда попасть. Для этого укажем:

route add -host 192.168.100.1 eth1

что означает: машина 192.168.100.1 подсоединена непосредственно к интерфейсу eth1. Далее, укажем, что все пакеты, предназначенные для интернета отсылать через машину провайдера:

route add default gw 192.168.100.1

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

ipchains -A forward -s 192.168.1.101 -j MASQ
ipchains -A forward -s 192.168.1.102 -j MASQ
ipchains -A forward -s 192.168.1.103 -j MASQ
ipchains -A forward -s 192.168.1.104 -j MASQ
ipchains -A forward -s 192.168.1.105 -j MASQ

ipchains -A forward -j REJECT -l

Ну вот, в общем, на сегодня и все.

Copyright (С) 2001, Иван Песин.
Лицензия


©»Linuxportal.Ru». Материалы сайта можно
использовать свободно при условии
сохранения этой свободы при дальнейшем
распространении, если явно не указано иное

Дизайн и программирование:

Поставьте
нашу кнопку:
Получить код кнопки
Наш партнер:

Маскарадинг для начинающих

В статье об SNMP было упомянуто понятие маскарадинга. После данной статьи
в мой ящик приходили письма и вопросы о том, что
предcтавляет собой маскарадинг. Здесь я попытаюсь объяснить данное понятие на простых примерах.

Хотя я еще не объяснил, что такое маскарадинг, я начну с того, что вам
надо, чтобы использовать маскарадинг. Итак, вам нужно:

  • несколько (более 2) компьютеров
  • сеть, соединяющая эти компьютеры
  • разные IP адреса на этих хостах
  • один компьютер с модемом и доступом к Интернет
  • операционная система Линукс с ядром 2.2.х и старше на этом компьютере
  • что-нибудь перекусить :))

Теперь, когда мы определились с необходимым оборудованием, можно
приступить к объяснению понятия маскарадинга.

Маскарадинг — это подмена некоторых параметров в заголовках IP пакетов,
позволяющая машинам, не имеющим реальных IP адресов полноценно работать
в Интернет. Рассмотрим этот факт на реальном примере. Мальчик А любит девочку В, но
она не учится с ним и он не знает ее номер телефона. Есть еще их общий друг С,
который учится с В и живет рядом с А. А просит С поговорить с В, не
упоминая при этом А. Теперь представьте, что В — Интернет, А — клиент, С —
сервер на котором установлена функция маскарадинга.
Здесь необходимо упомянуть о протоколе TCP/IP. Принцип действия TCP/IP
мы уже на Хакере рассматривали, ну да
повторимся еще раз:

=> Я 1.2.3.4 я хочу установить соединение с 1.2.3.3
-> Я 1.2.3.3 вы ко мне обращались?
=> Я 1.2.3.4 я к вам обращался.
-> Я 1.2.3.3 готов
=> Я 1.2.3.4 и мне нужен этот файл
-> Я 1.2.3.3 посылаю первую часть к 1.2.3.4
=> Я 1.2.3.4 получил ее
-> Я 1.2.3.3 посылаю вторую часть к 1.2.3.4
=> Я 1.2.3.4 не получил ничего
-> Я 1.2.3.3 посылаю еще раз
=> Я 1.2.3.4 получил ее
-> Я 1.2.3.3 ожидаю
=> Я 1.2.3.4 готов, до свидания
-> Я 1.2.3.3 до свидания

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

У нас есть компьютер, с локальным адресом 10.0.0.1, подключенный к
Интернет через телефонное соединение, который получил у своего провайдера
адрес 11.1.1.4. Если кто-то пытается достичь 11.1.1.4, то они получат
ответ, но при попытке установить соединение с 10.0.0.1, они не получат
ответ, хотя это один и тот же компьютер, но 10.0.0.1 не узнаваем в сети
Интернет. Еще есть 10.0.0.2, подключенный к 10.0.0.1. В этом случае
10.0.0.1 является гейтвеем (gateway), своего рода выход в другую сеть.

=> Я 10.0.0.2 хочу установить соединение с 1.2.3.3
-> Я 1.2.3.3 но у меня нет представления как тебя найти (конечно, это
сообщение не передается, т.к. нет логического пути между этими двумя
компьютерами, в данном случае остается лишь запись в логах).

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

=> Я 10.0.0.2 хочу установить соединение с 1.2.3.3
-> Я 10.0.0.1 продолжу процесс запроса к 1.2.3.3
-> Я 11.1.1.4 хочу установить соединение с 1.2.3.3
_> Я 1.2.3.3 ожидаю ваших дальнейших команд

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

Подготовка компьютера

Я думаю у вас стоит компьютер с установленной ОС Линукс и существует
учетная запись для подключения к Интернет. Для использования маскарадинга
предпочтительно использовать ядро 2.2.х, т.к. более старые версии ядра
могут содержать ошибки, не поддерживать ваше оборудование и быть
подвержены уязвимостям. Последние версии ядер можно скачать с
ftp://ftp.kernel.org/. Существуют более полные документы по компиляции ядра, здесь же я укажу
лишь основные шаги. Допустим, вы скачали новую версию ядра
newkernel.tar.gz

$ mv newkernel.tar.gz /usr/src
$ cd /usr/src
$ rm linux (удаляем символьную ссылку на старые исходники)
$ tar zxvf newkernel.tar.gz (ядро извлекается в папку linux)
$ cd linux
# make menuconfig

Можно выбрать: mak config для текстового режима, make manuconfig для
графического режима, make xconfig под Х режимом. Для включения функции маскарадинга нужно ответить YES в следующих опциях:

> Prompt for development and or incomplete code / drivers
>Enable loadable module support
>Networking support
>Network firewalls
>TCP/IP Networking
>IP:forwarding/gatewaying
>IP:firewalling
>IP:masquerading
>IP:ipportfw masq support
>IP:ipautofw masq support
>IP:ICMP masquerading
>IP:always defragment
>Dummy net driver support
>IP:ip fwmark masq-forwarding support

Далее следует процесс компиляции, зависящий от скорости компьютера.

# make dep
# make clean
# make bzImage
# cp /usr/src/linux/arch/i386/boot/bzImage /boot/kernel
# make modules
# make modules_install

После этого следует отредактировать файл /etc/lilo.conf. Нужно добавить
что-то типа этого:

image=/boot/kernel
label=masqkernel
root=/dev/hdaX (заменить на вашу root файловую систему, раздел)
read-only

Эти изменения в файле позволят менеджеру загрузки найти новое ядро при
загрузке. В следующий раз при lilo-приглашении напечатайте masqkernel.

/sbin/lilo
added linux-2.2.5-15 *
added dos
added masqkernel

Теперь необходимо отредактировать /etc/rc.d/rc.local, чтобы необходимые
модули загружались при старте.

.
.
/sbin/depmode -a
/sbin/modprobe ip_masq_ftp
/sbin/modprobe ip_masq_raudio
/sbin/modprobe ip_masq_irc
.
.

Эти модули необходимы для ftp, real audio и irc. Остался последний шаг
перед перезагрузкой, это активация форвардинга (forwarding).

# echo «1» /proc/sys/net/ip_forward (на некоторых новых системах каталог будет /proc/sys/net/ipv4/ip_forward)

Теперь осталось перезагрузить систему с новым ядром. Если свежее ядро
загрузилось правильно — мои поздравления, осталось недолго. Осталось лишь
установить новые правила ipchains для правильного
функционирования маскрадинга.

# /sbin/ipchains -P forward DENY
# /sbin/ipchains -A forward -s 10.0.0.0/4 -j MASQ

Для того чтобы все работало правильно, вам нужно подправить параметр -s на
свой адрес сети. Ваш сервер теперь должен работать. Осталось только
упомянуть, что у ваших клиентских машин должен быть прописан адрес гейтвея
(адрес сервера с функцией маскардинга). Вот, в принципе, и все что касается функции маскарадинга. Надеюсь, что
здесь я насколько мог объяснил что это такое и дальнейших вопросов
возникнуть не должно. Те, кто заинтересовался функционированием сетей,
могут найти огромное количество информации в Сети. Главное —
любознательность. Удачи.

Маскарадинг что это

Гвидо давно является сторонником Linux. Его домашняя страница, посвященная этой ОС находится на : www.oche.de/~bearix/g/.

  • Введение
  • Принципы IP-Masquerade
  • Установки ядра
  • Конфигурирование IP-Masquerade
  • Заключение

Настройка IP-Masquerade

IP-Masquerade предоставляет возможность использования Интернета несколькими компьютерами через компьютер, работающий под ОС Linux с доступом в Интернет. Это значит, что вы можете использовать Интернет всей локальной сетью, в то время, ваш ISP(internet service provider) будет регистрировать только одно соединение. В этой заметке рассказывается как сконфигурировать IP-Masquerade в ядре версии 2.2.х. Заметка не рассматривает вопросы построения сетей. Для понимания основ компьютерных сетей я рекомендую посмотреть заметку в январском выпуске о домашних сетях.

Введение

  • 10.0.0.0 — 10.255.255.255
  • 172.16.0.0 — 172.31.255.255
  • 192.168.0.0 — 192.168.255.255 (мы используем этот диапазон)

Принципы IP-Masquerade

Основная задача IP-Masquerade-трансляция внутреннего IP-адреса во внешний. Это называется-трансляцией сетевых адресов(NAT). ОС Linux выполняет это используя номера портов. Из внешнего мира все соединения будут выглядеть исходящими из этого компьютера. Подробная информация в январском номере.

Иногда IP-пакеты специфичны и IP-Masquerade возможно не будет работать для всех приложений, но во многих случаях оно работает. Существуют различные модули-для ICQ, для ftp, для Quake, которые необходимо встроить в ядро для корректной работы этих приложений из локальной сети. Но в общем, приложения, использующие только HTTP(браузеры), telnet, ssh или smtp(электронная почта) будут работать корректно.

Установки ядра

Пользователи, использующие не входящее в стандартную поставку ядро любого крупного дистрибьютора ОС Linux(RedHat, Mandrake, Debian, Suse), могут пропустить этот раздел, т.к. ядро их ОС уже подготовлено к использованию IP-Masquerade.

Я обычно делаю резервную копию /usr/src/linux/.config после компиляции стабильно работающего ядра. В следующий раз, когда мне необходимо перекомпилировать ядро, я восстанавливаю резервную копию и получаю ядро предыдущей конфигурации. Затем относительно просто можно сконфигурировать небольшие изменения — такие как IP-Masquerade.

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

  • Prompt for development and/or incomplete code/drivers
    CONFIG_EXPERIMENTAL
    (this will allow you to select experimental IP Masquerade code compiled into the kernel)
  • Enable loadable module support
    CONFIG_MODULES
  • Networking support
    CONFIG_NET
  • Network firewalls
    CONFIG_FIREWALL
  • TCP/IP networking
    CONFIG_INET
  • IP: forwarding/gatewaying
    CONFIG_IP_FORWARD
  • IP: firewalling
    CONFIG_IP_FIREWALL
  • IP: masquerading
    CONFIG_IP_MASQUERADE
  • IP: ipportfw masq support
    CONFIG_IP_MASQUERADE_IPPORTFW
  • IP: ipautofw masquerade support
    CONFIG_IP_MASQUERADE_IPAUTOFW
  • IP: ICMP masquerading
    CONFIG_IP_MASQUERADE_ICMP
  • IP: always defragment CONFIG_IP_ALWAYS_DEFRAG
  • Dummy net driver support
    CONFIG_DUMMY
  • IP: ip fwmark masq-forwarding support
    CONFIG_IP_MASQUERADE_MFW

Конфигурирование IP-Masquerade

Для автоматизации процесса конфигурирования IP-Masquerade напишем небольшой скрипт. Поместим его в /etc/rc.d/init.d/ и назовем ipmasq. Изменим права доступа с помощью команды chmod 755 ipmasq — чтобы сделать его исполняемым. Скрипт подразумевает, что локальный адрес компьютера 192.168.0.1(ifconfig eth0 192.168.0.1 netmask 255.255.255.0). Измените скрипт при необходимости. На рисунке изображена структура сети, используемая нами.

#!/bin/sh echo "Setting up IP masquerading . " # People still using windows to surf the web must convert this # to a UNIX text file before using it. # # Support masquerading of FTP file transfer. /sbin/modprobe ip_masq_ftp # #-------------- # Note: the modules below are commented out from loading. Remove the # comment sign if you want to use the corresponding applications form # one of the computers inside your internal network. # # Support masquerading of RealAudio over UDP. #/sbin/modprobe ip_masq_raudio # # Supports the masquerading of IRC DCC file transfers #/sbin/modprobe ip_masq_irc # # Support masquerading of Quake and QuakeWorld # Quake I / QuakeWorld (ports 26000 and 27000) #/sbin/modprobe ip_masq_quake # # Quake I/II/III / QuakeWorld (ports 26000, 27000, 27910, 27960) #/sbin/modprobe ip_masq_quake ports=26000,27000,27910,27960 # # Support masquerading of the CuSeeme video conferencing software #/sbin/modprobe ip_masq_cuseeme # #Support masquerading of the VDO-live video conferencing software #/sbin/modprobe ip_masq_vdolive #-------------- # Important: Enable IP forwarding. It is disabled by default in # the 2.2.x Kernels echo "1" > /proc/sys/net/ipv4/ip_forward # # NOTE: This is an example for an internal Network address of # 192.168.0.x The sub netmask is 255.255.255.0 or "24" bit # Please change this if you use different internal IP addresses. # /sbin/ipchains -P forward DENY /sbin/ipchains -A forward -s 192.168.0.0/24 -j MASQ # #--- end of file

Перед запуском этого скрипта убедитесь, что все компьютеры вашей локальной сети в качестве шлюза по умолчанию(. ) имеют IP-адрес 192.168.0.1(маскируемый Linux хост). Скрипт запускается с привилегией root на маскируемом хосте. По завершении работы скрипта выполните команду ‘ping’ с любого компьютера вашей локальной сети к любому компьютеру в Интернет(например: ping 195.53.25.18).
Если команда завершена успешно-IP-Masquerade сконфигурировано верно. Попробуйте также: ping www.linuxfocus.org. Результат должен быть тот же. Если команда ping возвращает ошибки-проверьте файл /etc/resolv.conf на компьютерах локальной сети. Этот файл должен присутствовать на каждом компьютере с указанным в нем именем сервера DNS(domain name system) вашего ISP(internet service provider).
На компьютерах локальной сети, работающих под ОС Windows 9x, необходимо связать сетевую конфигурацию TCP/IP стека с сетевой картой и активизировать DNS(domain name system) добавлением сервера DNS(domain name system) вашего ISP(internet service provider) в поле Search order for DNS server.
Если команда ‘ping’ завершена успешно-значит другие приложения(например браузер) тоже будут работать.

Наконец необходимо изменить конфигурацию таким образом, чтобы скрипт /etc/rc.d/init.d/ipmasq выполнялся автоматически при каждой загрузке ОС. По моему мнению, лучшее решение-отредактировать файл /etc/rc.d/init.d/network(этот файл уже есть в вашей системе)-выполнить /etc/rc.d/init.d/ipmasq В КОНЦЕ «start» секции этого файла. Найдите оператор ‘case’ и дальше «start)».

Заключение

Как видите процесс конфигурации IP-Masquerade не сложен. IP-Masquerade- необходимое приложение для домашних, школьных и офисных сетей.

Более подробная информация содержится в IP-Masquerading mini howto и IPCHAINS-HOWTO.

Для использования IP-Masquerade прежде всего необходимо правильно сконфигурировать сеть. Об этом можно подробнее прочитать в заметках : Home networking article, Net 3 howto, The Network Administrator Guide. Я планирую написать еще одну заметку по сетевой тематике позже в этом году, но может быть вы не хотите так долго ждать 🙂

Webpages maintained by the LinuxFocus Editor team
© Guido Socher
LinuxFocus.org 2000
Click here to report a fault or send a comment to Linuxfocus
Translation information:

en -> Guido Socher
en -> ru Kirill Poukhliakov

2000-07-05, generated by lfparser version 1.5

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *