Прозрачное соединение двух удаленных локальных сетей (linux tunnel bridge proxy route vpn) Печать
08.12.10 11:00

Прозрачное соединение двух удаленных локальных сетей (linux tunnel bridge proxy route vpn)

 

From: Alexey N. Kovyrin <kovyrin (at) kremenchug.net>
Newsgroups: email
Date: Mon, 30 Jun 2004 14:31:37 +0000 (UTC)
Subject: Прозрачное соединение двух удаленных локальных сетей


ПРОЗРАЧНОЕ СОЕДИНЕНИЕ (REMOTE BRIDGING) ДВУХ УДАЛЕННЫХ ЛОКАЛЬНЫХ СЕТЕЙ
ЧЕРЕЗ Internet (ИЛИ ЛЮБУЮ ДРУГУЮ ПУБЛИЧНУЮ СЕТЬ)


Автор: Alexey N. Kovyrin <kovyrin (at) kremenchug.net>


Часто возникает потребность в соединении нескольких географически
разрозненных сетей (ethernet) в единый broadcast domain. Такая
потребность, например, может возникнуть при соединении нескольких
отделений одной компании, в которой используется smb-протокол
(частично основанный на широковещательных сообщениях). Также
одним из вариантов использования описываемой схемы являются игровые
клубы (несколько клубов одной игровой сети, будучи объединенными в
единое пространство для широковещательных запросов могут обеспечить
пользователям возможность сетевой игры без наличия выделенного сервера).

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

Технические детали: В описываемой конфигурации мы соединяем две локальных
сети в одну с адресным пространством 192.168.1.0/24 (хотя физически наличие
мостов предполагает полную прозрачность для протокола IP и ограничений на
адресацию в полученной сети нет). На шлюзовых машинах имеется по 2 сетевых
интерфейса: один (у нас - eth0) направлен в локальную сеть, и второй (eth1),
используемый как транспортный для соединения сетей. После поднятия
ethernet-тунеля между шлюзами обоих сетей, тунельные интерфейсы соединяются
c соответствующими сетевыми интерфейсами для локальной сети при помощи
мостов (bridge-interfaces). Схематически эту конфигурацию можно изобразить
следующим образом:

+-------+ +-------+
| br0 | | br0 |
+-------+ +-------+
| | | |
Network 1 | | | | Network 2
----------eth0 tap0---eth1........eth1---tap0 eth0---------------


НАСТРОЙКА ШЛЮЗОВЫХ МАШИН
------------------------

Примечание: В данной статье рассматривается настройка серверов под
управлением ОС 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 (а также исходные тексты или пакеты для других
дистрибутивов или ОС) можно скачать с сайта производителей:
http://vtun.sourceforge.net/download.html

После скачивания файла пакета vtun_X.Y-Z_i386.deb нужно установить его и все
требуемые для дальнейшей работы пакеты:

# apt-get install bridge-utils ebtables iptables libssl0.9.6
...
# dpkg -i vtun_X.Y-Z_i386.deb

После установки vtun требуется определиться с тем, какая из сторон соединения
будет ведущей (сервер), а какая ведомой (клиент). Затем на сервере и на клиенте
нужно внести изменения в файлы vtund-start.conf и vtund.conf в каталоге /etc/.
Ниже приведены конечные результаты редактирования файлов конфигурации на
сервере.

/etc/vtund-start.conf
----cut-here------------------------------------
--server-- 5000
----cut-here------------------------------------

/etc/vtund.conf
----cut-here------------------------------------
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";
};
}
----cut-here------------------------------------



Файлы конфигурации для клиента:

/etc/vtund-start.conf
----cut-here------------------------------------
rembridge 10.1.1.1 -p
----cut-here------------------------------------

Примечание: В данном случае 10.1.1.1 - это транспортный адрес сервера, к
которому подключается данный клиент.


/etc/vtund.conf
----cut-here------------------------------------
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";
};
}
----cut-here------------------------------------


Для поднятия моста между сетевым интерфейсом, направленным в локальную сеть,
и поднятым тунелем необходимо создать bridge-интерфейс. Для этого нужно
добавить описание интерфейса br0 в файл /etc/network/interfaces:

auto br0
iface br0 inet static
address 192.168.1.199
netmask 255.255.255.0
bridge_ports eth0

Примечание: IP-адреса и маска подсети на обоих сторонах выбирается в
соответствии с соглашениями в вашей локальной сети. Главное требование -
уникальность этих адресов в пределах обоих соединяемых сетей. eth0 - интерфейс,
направленный в локальную сеть.

Далее необходимо поднять этот интерфейс:

# ifup br0

После поднятия bridge-интерфейса можно запускать сервер и клиент vtun.

# /etc/init.d/vtund restart

В случае правильной настройки всей конструкции мы получим на обоих шлюзах
интерфейсы tap0 и br0:

# ifconfig tap0
tap0 Link encap:Ethernet HWaddr 00:FF:B2:91:CA:DE
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:701818 errors:0 dropped:0 overruns:0 frame:0
TX packets:405939 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:975889241 (930.6 MiB) TX bytes:44704104 (42.6 MiB)

# ifconfig br0
br0 Link encap:Ethernet HWaddr 00:02:44:2A:03:30
inet addr:192.168.1.199 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2660 errors:0 dropped:0 overruns:0 frame:0
TX packets:42 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:239368 (233.7 KiB) TX bytes:2338 (2.2 KiB)

#

Команда brctl позволяет нам посмотреть на статус bridge-интерфейсов:

# brctl show br0
bridge name bridge id STP enabled interfaces
br0 8000.0002442a0330 no eth0
tap0
#

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


источник: http://www.kumanov.com/software/remote_bridging.html
Последнее обновление 08.12.10 11:02