LINUX.ORG.RU
ФорумAdmin

OpenVPN + tap + bridge + DHCP проброс трафика L2

 , ,


0

1

День добрый!

Столкнулся со следующей задачей - есть машина на винде (1), есть линуксовая машина в том же датацентре(2), есть линуксовая машина в удалённом офисе (3) и проприетарная железка (4), которая адрес может получать исключительно по DHCP. Нужно заставить общаться железку и проприетарный софт на винде, поместив их в одну подсеть 10.20.27.0/24. Возможно для этого есть более подходящий способ (GRE туннель или что-то подобное - советам тоже буду рад).

На машине 2 поднял два OpenVPN на разных портах (XXXX и YYYY) с preshared key. Поднял два tap интерфейса в promisc mode, подключил их к одному шлюзу. На бридже выставлен айпишник 10.20.27.1/24.

С машины 1 устанавливается соединение к машине 2 на порт XXXX, машина получает из OpenVPN конфига адрес 10.20.27.5/24.

С машины 3 устанавливается соединение к машине 2 на порт YYYY, tap0 интерфейс на стороне машины 3 поднимается с адресом 0.0.0.0 и подключается к мосту (допустим, br0), на мосте поднят адрес 10.20.27.10/24. Так же есть интерфейс eth1, который добавлен в тот же мост без адреса (0.0.0.0). На интерфейс br0 смотрит dnsmasq в режиме только DHCP, раздающий адреса из диапазона 10.20.27.100 - 10.20.27.200.

На время активных экспериментов iptables на машинах 2 и 3 iptables по всем таблицам выставлен в ACCEPT, таблицы очищены.

Win(1)             Linux(2)         Linux(3)        
OVPN Client --> XXXX     YYYY <-- OVPN Client
10.20.27.5      tap0-br0-tap1    tap0-br0-eth1     HARDWARE(4)   
                 10.20.27.1       10.20.27.10     10.20.27.117
                                    DNSMASQ   <--  DHCPCLIENT

Все три машины видят друг-друга по адресам 10.20.24.(1/5/10), трафик идёт, пинги есть, всё хорошо. Железка 4 по dhcp у dnsmasq получает адрес (10.20.27.117) и с машины 3 её видно (как минимум, пинги идут). Но для машин 1 и 2 она недоступна.

1<->2, 1<->3, 2<->3, 3<->4 - трафик идёт. 1<->4, 2<->4 - трафик не идёт.

По какой причине два разных openvpn-сервера? Обчно одинм обходятся. И почему винда цепляется к Linux(2), зачем он здесь? Почему нельзя пробросить транспортные пакеты (udp) от Win(1) к Linux(3), сделав OpenVPN сервер там.

Ну и:

(как минимум, пинги идут)

вобще не зачёт. Есть ″tcpdump″, есть ″brctl showmacs″ — диагностируйте что именно происходит.

mky ★★★★★ ()
Ответ на: комментарий от mky

Пробовал один, при подключении второго тап интерфейса до первого трафик пропадал. С двумя всё работает отлично.

Win(1) к Linux(3) подключить теоретически можно, но Linux(3) находится в удалённом офисе за натом, ещё и с динамическим адресом.

Трафик уходит в одну сторону с 1 или 2. brctl showmacs показывает то же, что и арп - мак есть на машинах 2 и 3, в поле «is local» на обеих стоит «no».

tcpdump показывает то, о чём я писал выше - трафик уходит в одну сторону

21:32:07.615101 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 10.20.27.117 tell 10.20.27.1, length 28
21:32:07.658187 ARP, Ethernet (len 6), IPv4 (len 4), Reply 10.20.27.117 is-at 00:17:fc:6f:89:61, length 46
21:32:08.575157 IP (tos 0x0, ttl 64, id 24245, offset 0, flags [DF], proto ICMP (1), length 84)
    10.20.27.1 > 10.20.27.117: ICMP echo request, id 7576, seq 7, length 64
21:32:09.599150 IP (tos 0x0, ttl 64, id 24353, offset 0, flags [DF], proto ICMP (1), length 84)
    10.20.27.1 > 10.20.27.117: ICMP echo request, id 7576, seq 8, length 64
corpse ()
Ответ на: комментарий от mky

На linux(2), между linux(3) и конечным устройством трафик ходит.

corpse ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.