Построение нешифрованных туннелей в локальной сети на базе L2TP

    Общий рейтинг статьи: 0 (проголосовало 0 )
    Опубликовано:  [просмотров 570]


    В одном из проектов мне понадобилось объединить несколько Bridge-интерфейсов с собственной моделью адресации на разных серверах. Эта задача решилась максимально просто, если бы эти сервера были объединены при помощи оборудования с поддержкой VLAN-ов, но сеть была неуправляемая и пришлось как то выкручиваться.

    L2TP тунель в Linux пример реализации 

    Первое, что пришло в голову - объединить мосты при помощи OpenVPN без шифрования (когда-то давно похожая модель уже была реализована), но как оказалось, в текущих версиях OpenVPN построить туннель без шифрования трафика больше не получится, а генерировать ключи и шифровать трафик для текущей задачи создавало слишком много накладных расходов. Задача была решена с использованием L2TP туннеля между двумя серверами, а теперь рассмотрим подробнее как именно это было реализовано (представленные скрипты можно добавить в if-up скрипты старта сетевых интерфейсов или создать отдельный скрипт, запускаемый при старте сервера).

    IP-адреса серверов, которые объединяли в этом проекте 172.16.3.26 и 172.16.3.59 и они находятся в одной сети без использования NAT и проброса портов. Для начала, построим простой туннель и проверим его работоспособность.

    Настраиваем туннель на первом сервере:

    # ip l2tp add tunnel tunnel_id 1 peer_tunnel_id 1 udp_sport 5000 udp_dport 5000 encap udp local 172.16.3.59 remote 172.16.3.26

    Запускаем туннель:

    # ip l2tp add session tunnel_id 1 session_id 1 peer_session_id 1

    Назначем ip-адрес на интерфейсе:

    # ifconfig l2tpeth0 10.0.0.1/24

    Проверяем статус и состояние туннеля:

    # ip l2tp show tunnel
    # ip l2tp show session

    Настраиваем аналогичным образом тунель на втором сервере (адрес источника и приемника стали естественно наоборот):

    # ip l2tp add tunnel tunnel_id 1 peer_tunnel_id 1 udp_sport 5000 udp_dport 5000 encap udp local 172.16.3.26 remote 172.16.3.59
    # ip l2tp add session tunnel_id 1 session_id 1 peer_session_id 1
    # ifconfig l2tpeth0 10.0.0.2/24

    Обратите внимание, что sport и dport у нас одинаковые, так как не используется проброса портов и NAT. Теперь мы останавливаем интерфейсы и заново поднимаем их, но уже без назначения ip-адреса:

    # ifconfig l2tpeth0 down
    # ifconfig l2tpeth0 up 0.0.0.0

    И ,в конце концов, объединим этот интерфейс с сетевым мостом на обоих серверах:

    # brctl addif az-dmz l2tpeth0

    Вот ,собственно, такой костыль мы сегодня рассмотрели. Дешево и сердито и ,самое главное, работает.


    Обсуждение статьи

    Ваш комментарий: