Мне нужно сделать решение, которое будет работать как сетевой коммутатор с двумя портами: один порт расположен в одной стране, а второй порт находится в другой стране.
+------------ Virtual switch ----------------+
+---------+ | +-------+ +----------+ +-------+ | +--------+
|Client A |<--+-->| BOX 1 |<-->|VPN server|<-->| BOX 2 |<--+-->|Client B|
+---------+ | +-------+ +----------+ +-------+ | +--------+
+--------------------------------------------+
Клиент A и Клиент B чувствуют это как обычный переключатель уровня 2. VPN-соединение между двумя боксами - OpenVPN. Поэтому мне нужно как-то переслать кадры Ethernet через VPN-туннель между двумя блоками. На Box 1 и 2 работает Debian Джесси. Я надеюсь не писать свое собственное программное обеспечение для него :) Кто-нибудь может предложить возможные решения?
PS Необходимо подключить два устройства, предназначенных для работы только в локальной сети.
UPD: я установил 4 виртуальные машины для имитации такой настройки (vpnserver был опущен):
- Все машины являются коробками Debian
- Box 1 и Box 2 имеют GRE-туннель между ними (Ethernet через IP)
- На клиенте Локальный интерфейс, соединенный с интерфейсом gretap: мост имеет адрес 10.0.0.253
- На локальном интерфейсе клиента B, соединенном с интерфейсом gretap: мост имеет адрес 10.0.0.254
- Клиент А имеет статический IP 192.168.1.1.
- Клиент B имеет статический IP 192.168.1.2
От Клиента A я отправляю ICMP-эхо-запрос на 192.168.1.2 и вижу ARP-запрос «Кто имеет 192.168.1.2 расскажите 192.168.1.1» на мосту на Box 1, на мосту на Box 2 и на клиенте B. Но ответ ARP виден только на клиенте B. Таким образом, ответ ARP как-то не возвращается на Box2. И все сети между 10.0.0.253 и 10.0.0.254 работают хорошо. Итак, я полагаю, что проблема вызвана соединением.
UPD2: Теперь я удалил туннелирование GRE и установил обычную сеть между Box 1 и Box 2. Когда я создал мосты, пинг начал работать. Что может вызвать проблемы при выполнении GRE туннеля?
Решение: я наконец все настроил в виртуальных машинах с помощью GRE-TAP. Я использовал туннель GRE-TAP по обычной сети между Box 1 и Box 2. И тогда я соединял туннельный интерфейс с локальным интерфейсом на каждом боксе. Ниже мои шаги:
Коробка 1
ip link add tunnel0 type gretap remote 192.168.0.2 local 192.168.0.1
brctl addbr br0
brctl addif br0 eth2 # eth2 - is a local interface on Box 1
brctl addif br0 tunnel
ip addr add 10.0.0.253 dev tunnel0
ip link set br0 up
ip link set tunnel0 up
Box 2
ip link add tunnel0 type gretap remote 192.168.0.1 local 192.168.0.2
brctl addbr br0
brctl addif br0 eth2 # eth2 - is a local interface on Box 2
brctl addif br0 tunnel
ip addr add 10.0.0.254 dev tunnel0
ip link set br0 up
ip link set tunnel0 up
Спасибо всем!