Эта статья рассмотрит преимущества и недостатки ПО для
организации туннелей между двумя компьютерами под управлением
ОС Linux.
Что это такое и с чем это едят..
Что такое туннелинг? Многие из вас
задавались этим вопросом кто-то
находил ответ, кто-то нет. Я попробую разъяснить. Туннелинг это подобие
выделенной линии, но только поверх уже существующей сети. Используется
это для, например, для соединения нескольких IPX или NETBEUI
сетей через Internet
в единую. Вы спросите, а нельзя обойтись без туннелинга и просто
соединить
их в одну? Ответ нет. Особенность Internet такова, что в нем
используется
один единый протокол - IP (Internet Protocol).
Для чего это нужно?
Самым простым примером может служить данная
схема:

С помощью IP-тунеля внутренняя IPX сеть может
быть объединена
в единую корпоративную сеть.
Как это работает?
Примерно так:

IPX пакеты из Сети А адресованные
компьютеру в Сети Б запаковываются
внутрь пакетов IP-тунеля Компьютером А и передаются Компьютеру
Б,
который в свою очередь их распаковывает и отправляет адресату в Сети Б.
Как это реализовать?
Реализуется это на уровне маршрутизаторов.
Например, данная функция
есть в маршрутизаторах Cisco и Bay Networks, но я не стану
на этом
задерживаться - эта статья посвящена реализации IP-тунелинга на
ОС Linux.
Первым способом послужит встроенная в
ядро системы функция IP-тунелинга.
IP-in-IP
Естественно не достаточно ее просто
включить, требуется специальная
настройка. Вот пример настройки IP-тунеля:
Компьютер А: 111.112.101.37
Компьютер Б: 111.112.100.86
по какой-то причине между ними требуется поднять IP-тунель. (Компьютер А и Б в одной подсети)
Необходимые действия на Компьютере А:
# ifconfig tunl 111.112.100.87 pointopoint 111.112.100.86 # ifconfig tunl netmask 255.255.255.0 - устанавливаем нет-маску # route add 111.112.100.86 dev eth0 - делаем запись в таблицу статических роутов для Компьютера Б # route add -net 111.112.100.0 dev tunl - Настраиваем таблицу роутов для подсети Компьютера Б.
Необходимые действия на Компьютере Б:
# ifconfig tunl 111.112.100.86 pointopoint 111.112.101.37 # ifconfig tunl netmask 255.255.255.0 - устанавливаем нет-маску # route add 111.112.100.87 dev eth0 - делаем запись в таблицу статических роутов для Компьютера Б # arp -s 111.112.100.87 EE.EE.EE.EE.EE pub - Настраиваем ARP таблицу.
Команда "arp -s"
необходима чтобы Компьютер Б знал ARP
адрес
Компьютера А, т.к. они в разных IP-подсетах,то Компьютер Б
не
будет знать ARP адрес Компьютера А, и ему надо помочь :-)
Недостаток данного варианта в том, что в
данном случае надо произвести
много манипуляций с ядром системы и производимые действия требуют
довольно
глубоких познаний в устройстве протокола TCP/IP и новичкам это
порой неподсилу.
Но есть и преимущества - установка IP-тунеля не требует специального ПО,
все что может понадобиться идет в комплекте с ОС.
Вторым вариантом может послужить
программа CIPE
v0.5.
CIPE расшифровывается как Crypto
IP Encapsulation, из этого явственно
следует, что это не просто программа для образования туннеля, а ПО для
организации туннеля с криптованием передаваемых данных. Настройка CIPE
проще чем встроенного в ядро драйвера туннелинга. Может показаться, что
этот вариант лучше во всех отношениях, но нет ничего идеального и у
CIPE свои недостатки, на них я остановлюсь далее, а сейчас о
настройке.
Предположим, что Серверу 1 надо
организовать туннель с Сервером 2,
условием является то что сервера находятся в разных странах. Конечно
можно воспользоваться первым вариантом, но это потребует произвести
гораздо больше действий, чем описано, поэтому предпочтительней данный.
Для начала надо , скомпилировать и инсталлировать CIPE. После
этого требуется сделать следующее на Сервере 1:
# insmod cip3b.o - загружаем модуль тунеля
Далее надо отредактировать файл /etc/cipe/options:
device cip3b0 - имя интерфейса туннеля. ptpaddr 10.0.0.2 - адрес Сервера 2 ipaddr 10.0.0.1 - адрес Сервера 1 me 194.67.110.8:6789 - настоящий адрес Сервера 1 peer 195.16.96.96:6543 - настоящий адрес Сервера 2 key 3238fd21adf9c10ccf9ecу2393bbb6e4 - секретный ключ для криптования
Далее:
# /ciped # /etc/cipe/ip-up cip3b0 10.0.0.1 194.67.110.8 195.16.96.96
На Сервере 2 проделываем тоже самое только изменяем /etc/cipe/options:
device cip3b0 - имя интерфейса туннеля. ptpaddr 10.0.0.1 - адрес Сервера 1 ipaddr 10.0.0.2 - адрес Сервера 2 me 195.16.96.96:6543 - настоящий адрес Сервера 2 peer 194.67.110.8:6789 - настоящий адрес Сервера 1 key 3238fd21adf9c10ccf9ecу2393bbb6e4 - секретный ключ для криптования
ВАЖНО: параметр key должен совпадать на Сервере 1 и на Сервере 2.
# /ciped # /etc/cipe/ip-up cip3b0 10.0.0.2 195.16.96.96 194.67.110.8
Основные преимущества CIPE перед
"родным" туннелем в Linux в том
что он гораздо более прост в настройке, защищен он перехвата
пакетов (ведь данные закриптованы), не требует больших познаний в
TCP/IP и что не маловажно не требует специальной настройки ядра
системы, CIPE использует собственный драйвер туннелинга. Но есть
большой недостаток если CIPE неправильно настроить он вызывает
сбой системы и в нее можно попасть только с локальной консоли.
Согласитесь большой недостаток, особенно если ваш Сервер 2
находится
в другом городе или стране, тут сказывается выигрышность "родного"
драйвера туннелинга, как ни как он гораздо более отказоустойчив.
Итак, выбор за вами! |