Часто возникает потребность в соединении нескольких географически
разрозненных сетей (ethernet) в единый broadcast domain. Такая
потребность, например, может возникнуть при соединении нескольких
отделений одной компании, в которой используется smb-протокол
(частично основанный на широковещательных сообщениях). Также одним из
вариантов использования описываемой схемы являются игровые клубы
(несколько клубов одной игровой сети, будучи объединенными в
единое пространство для широковещательных запросов могут обеспечить
пользователям возможность сетевой игры без наличия выделенного
сервера).
В каждой из рассматриваемых сетей должен присутствовать один сервер,
предназначенный для организации бриджинга. Две наших сети могут быть
соединены друг с другом любыми средствами, которые позволяют передачу
IP-трафика между шлюзовыми машинами данных сетей.
Технические детали: В описываемой конфигурации мы соединяем две
локальных сети в одну с адресным пространством 192.168.1.0/24 (хотя
физически наличие мостов предполагает полную прозрачность для
протокола IP и ограничений на адресацию в полученной сети нет). На
шлюзовых машинах имеется по 2 сетевых интерфейса: один (у нас - eth0)
направлен в локальную сеть, и второй (eth1), используемый как
транспортный для соединения сетей. После поднятия ethernet-тунеля
между шлюзами обоих сетей, тунельные интерфейсы соединяются c
соответствующими сетевыми интерфейсами для локальной сети при помощи
мостов (bridge-interfaces). Схематически эту конфигурацию можно
изобразить следующим образом:
Примечание: В данной статье рассматривается настройка серверов под
управлением ОС GNU/Linux (дистрибутив Debian Unstable). В случае
использования другого дистрибутива возможно понадобятся небольшие
изменения в описанной конфигурации (чаще всего в отношении сетевых
настроек и системы управления пакетами).
Для начала нужно убедиться в наличии модулей tun и bridge для текущего
ядра. Если их нет - пересобрать ядро с их поддержкой (опции CONFIG_TUN
и CONFIG_BRIDGE).
Далее требуется создание файла устройства для поднятия тунеля:
# cd /dev
# ./MAKEDEV tun
# mkdir misc
# ln -s /dev/net /dev/misc/net
Примечание: последняя команда нужна для того, чтобы vtun в авторской
сборке смог получить доступ к устройству /dev/misc/net/tun
(объективную причину, по которой он ищет этот файл именно там мне
выяснить не удалось).
Для поднятия ethernet-тунеля между машинами мы будем использовать
программу vtun. Пакет для Debian (а также исходные тексты или пакеты
для других дистрибутивов или ОС) можно скачать с сайта производителей.
После скачивания файла пакета vtun_X.Y-Z_i386.deb нужно установить его
и все требуемые для дальнейшей работы пакеты:
После установки vtun требуется определиться с тем, какая из сторон
соединения будет ведущей (сервер), а какая ведомой (клиент). Затем на
сервере и на клиенте нужно внести изменения в файлы vtund-start.conf и
vtund.conf в каталоге /etc/. Ниже приведены конечные результаты
редактирования файлов конфигурации на
сервере.
/etc/vtund-start.conf
--server-- 5000
/etc/vtund.conf
options {
port 5000; # Listen on this port.
# Syslog facility
syslog daemon;
# Path to various programs
ifconfig /sbin/ifconfig;
route /sbin/route;
firewall /sbin/iptables;
ip /sbin/ip;
}
default {
compress no;
encrypt no;
speed 0;
}
rembridge {
passwd Pa$$Wd;
type ether;
proto udp;
keepalive yes;
compress no;
encrypt yes;
up {
# Connection is Up
ifconfig "%% up";
program "brctl addif br0 %%";
};
down {
# Connection is Down
ifconfig "%% down";
};
}
Файлы конфигурации для клиента:
/etc/vtund-start.conf
rembridge 10.1.1.1 -p
Примечание: В данном случае 10.1.1.1 - это транспортный адрес сервера,
к которому подключается данный клиент.
/etc/vtund.conf
options {
# Path to various programs
ifconfig /sbin/ifconfig;
route /sbin/route;
firewall /sbin/iptables;
}
korsar {
pass Pa$$Wd; # Password
type ether; # Ethernet tunnel
up {
# Connection is Up
ifconfig "%% up";
program "brctl addif br0 %%"
};
down {
# Connection is Down
ifconfig "%% down";
};
}
Для поднятия моста между сетевым интерфейсом, направленным в локальную
сеть, и поднятым тунелем необходимо создать bridge-интерфейс. Для
этого нужно добавить описание интерфейса br0 в файл
/etc/network/interfaces:
Примечание: IP-адреса и маска подсети на обоих сторонах выбирается в
соответствии с соглашениями в вашей локальной сети. Главное требование
- уникальность этих адресов в пределах обоих соединяемых сетей. eth0 -
интерфейс, направленный в локальную сеть.
Далее необходимо поднять этот интерфейс:
# ifup br0
После поднятия bridge-интерфейса можно запускать сервер и клиент vtun.
# /etc/init.d/vtund restart
В случае правильной настройки всей конструкции мы получим на обоих
шлюзах интерфейсы tap0 и br0:
Команда brctl позволяет нам посмотреть на статус bridge-интерфейсов:
# brctl show br0
bridge name bridge id STP enabled interfaces
br0 8000.0002442a0330 no eth0
tap0
#
После выполнения все описанных выше действий машины, находящиеся в
обоих соединяемых локальных сетях смогут прозрачно общаться друг с
другом. Для диагностики соединения могут служить IP-адреса на обоих
bribge-интерфейсах
шлюзовых машин. Также, в случае надобности возможно
включение/выключение шифрования и сжатия данных, проходящих через
созданный тунель.
712 Прочтений • [Прозрачное Соединение Двух Удаленных Локальных Сетей (Remote Bridging) (linux tunnel bridge vtun debian)] [08.05.2012] [Комментариев: 0]