Настройка L2-туннелей

Все параметры в одном конфигурационном файле могут быть заданы только однократно.

Текст, начинающийся с ‘#’ и до конца строки, считается комментарием и игнорируется Продуктом.

Опции конфигурационного файла также можно задать в командной строке при прямом запуске бинарного файла /opt/l2svc/bin/l2svc, указав перед ними «--».

Опишем возможные параметры конфигурационного файла:

Обязательные параметры

      vif <name> – имя виртуального интерфейса (TAP). Рекомендуется tapN, где N – цифра.

      capture <name> – имя сетевого интерфейса, с которого будет осуществляться захват ethernet-фреймов. Этому интерфейсу не рекомендуется назначать IP-адрес.

      bridge <name> – имя виртуального интерфейса моста. Рекомендуется brN, где N – цифра.

 

Опциональные параметры

      local <host> – ip-адрес или символьное имя локального хоста.

      remote <host> [port] – ip-адрес или символьное имя и порт удалённого хоста.

      port <port> – номер используемого UDP-порта, используемый и для локального и для удалённого хостов. Значение по умолчанию – 1194 (порт протокола Openvpn).

      local_port <port> – номер порта на локальном хосте. Значение по умолчанию – 1194 (порт протокола Openvpn).

      hwaddr <hw> – MAC-адрес виртуального интерфейса.

      bonding [name] – включение bonding-режима. В данном режиме трафик с одного физического интерфейса разделяется на два l2-туннеля. При этом возможно увеличение производительности tcp трафика либо многопоточного трафика. Имя bond-интерфейса – bond0. Дополнительный параметр name может использоваться для использования другого bond-интерфейса, но только совместно с дополнительной настройкой bond-драйвера.
При использовании bonding-режима нужно создать два конфигурационных файла (по одному на туннель), отличающихся портами и tap-интерфейсами. Настройка должна быть произведена с обеих сторон туннеля.
При распределении пакетов между tap-интерфейсами используется режим balance xor с политикой хеширования (xmit_hash_policy) layer2+3. В этом случае, на какой из tap-интерфейсов направить пакет, вычисляется по полям: source mac, destination mac, source ip, destination ip.
Возможно использование политики хэширования layer3+4, в этом режиме для вычисления хэша будут учитываться поля: source ip, destination ip, source port, destination port. Для этого надо отредактировать скрипт /opt/l2svc/bin/up, а именно строку:
modprobe bonding mode=2 xmit_hash_policy=layer2+3 >/dev/null 2>&1

      log <file> – писать логи в файл вместо протоколирования в syslog.

      verb <n> – уровень подробности протоколирования. Уровни:

      0 – только критические ошибки

      1 – информация о старте продукта и построении соединений, а также не критические сетевые ошибки;

      2 – показ информации об измеренном MTU, открытии/закрытии TAP-интерфейсов, рестартах продукта и соответствии опций туннеля на локальном и удалённом хостах;

      3 – на каждый входящий/исходящий UDP-пакет в лог будет писаться R/W, на каждый прочитанный/записанный TAP-интерфейсом пакет – r/w.

Значение по умолчанию – 1.

      mute [n] – не повторять более n однотипных сообщений подряд. Если n не указано, оно считается равным 1. По умолчанию в Продукте выставлено mute=1000.

      nice <n> – изменить приоритет процесса.

      status <file> [n] – писать в <file> каждые n секунд информацию о текущем состоянии туннеля. Если n не указано, обновление раз в минуту. В файл пишется информация о количестве переданных и полученных байт по udp-туннелю, а также количество байт, записанных и прочитанных TAP-интерфейсом.

      compression [always|adaptive] – использование сжатия библиотекой LZO. Adaptive – использование адаптивного алгоритма, позволяющее избежать проблем при передаче уже сжатого трафика. При этом регулярно проводится проверка, насколько удалось сжать пакет. Если выигрыш составляет менее 5%, то сжатие выключается до следующей проверки (на 1 минуту). Если не указано always либо adaptive, используется adaptive. Пакеты размером 100 байт и меньше не сжимаются. По умолчанию отключено.

      tun_mtu <n> – MTU туннеля, а именно mtu следующих интерфейсов: capture-интерфейса, виртуального tap-интерфейса (vif) и виртуального интерфейса моста (bridge). Значение по умолчанию – 1500.

      mssfix [n] [force] – при включении данной опции поле MSS всех проходящих через туннель tcp-пакетов будет выставлено в n, если текущее значение mss в пакете больше n. Также, если определены tun_mtu либо fragment, и их значения меньше указанного в mssfix, в пакет будет прописано минимальное из них. При указанной опции force будет прописано именно указанное в конфигурационном файле значение mssfix, даже если оно больше имеющегося в пакете. При этом tcp/ip стек отправителя и получателя сам уменьшит максимальный размер пакета, не прибегая к использованию icmp. Это позволит избежать фрагментации. Если параметр n отсутствует, будет взято значение параметра fragment, если оно определено. Работает только для tcp-трафика. Значение по умолчанию – 1380.

      fragment n – если задано, то все пакеты, большие n байт, будут фрагментированы самим продуктом (а не ip-стеком). Это происходит в usermode-режиме, поэтому выполняется медленнее, чем фрагментация IP-стеком. Однако фрагментация ip-стеком завязана на path mtu discovery и в реальных условиях может не работать. Фрагментирование производится после сжатия, если оно включено. Опции добавляет 4 байта к размеру пакета. Включение данной опции может искажать результаты mtu_test. По умолчанию отключено.

      passtos – выставить ToS-поле отправляемого UDP-пакета такое же, как у захваченного пакета. По умолчанию отключено.

      txqueuelen <n> – длина очереди отправки пакетов виртуального (TAP) интерфейса. Значение по умолчанию – 1000.

      sndbuf <n> – размер буфера отправки UDP-сокета. Значение по умолчанию – 65536 байт.

      rcvbuf <n> – размер буфера приёма UDP-сокета. Значение по умолчанию – 65536 байт.

      keepalive <n> <m> – при указании данного параметра Продукт будет посылать по туннелю keepalive-пакеты собственного формата раз в n секунд. Если на отправленный пакет не будет ответа в течение m секунд либо от партнёра не придёт любого другого пакета – будет произведён частичный перезапуск продукта (будут пересозданы сокеты и виртуальный интерфейс, произойдёт пересоздание моста. Конфигурационные файлы перезачитываться не будут). Так как происходт пересоздание моста (bridge), использование keepalive невозможно при построении топологии «звезда». Рекомендуется выставлять keepalive на обоих концах туннеля и с одинаковыми значениями параметров. По умолчанию отключено.

      no_timestamps – не писать время в логи. По умолчанию время пишется.

      no_paging – запретить использование файла подкачки. По умолчанию отключено.

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

#just another l2-tunnel

vif tap0

capture eth0

bridge br0

 

remote 1.2.3.4 2345

tun_mtu 6000

mssfix 1380