Еще немного про использование VPN в Билайн

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Привет! В этой статье я расскажу о ещё двух вариантах VPN, используемых нами для включения клиентов с помощью Мультисим Резервирования, это L2TP и L2-VPN. Первый используется для включения сервисов Интернет, второй для включения каналов L2 MPLS.

Самый первый — L2TP

Исторически этот вариант был самым первым внедренным вариантом для предоставления сервиса Интернет клиентам, именно на нем мы обкатывали все бизнес-процессы включений, набивали первые шишки со сложностью настройки СРЕ, процессами активации Sim-карт и прописывания их в выделенные APN, выбирали наиболее оптимальные варианты настроек и конфигураций СРЕ и РЕ оборудования, суммарно за первые полгода мы подготовили восемь различных версий конфигураций оборудования. Такой итеративный подход позволил найти баланс между потребностями клиентов и нашими возможностями, мы посмотрели, что и как стоит настраивать, как выстроить процессы, а за что лучше не браться вообще.

Архитектурно схема выглядит так:

Описание:

В роутер устанавливаются две Sim-карты, прописываются APN и настраивается радио-интерфейс, плюс настраивается WAN-интерфейс для входящего проводного канала, если он есть. Sim-карты прописываются в типовые APN, все APN разных операторов связи объединены в один VRF и получают стандартизированные приватные IP-адреса из своих APN.

На нашем RADIUS-сервере при подключении создается сессионный аккаунт для клиента, информация о этом аккаунте будет использована BRAS при построении сессии. Роутер начинает строить L2TP-сессию либо через проводной WAN-интерфейс (интернет-канал), либо через радиоинтерфейс, в зависимости от типа работы (Fix+LTE/3G или "чистый" LTE/3G), сессия терминируется на BRAS с типовыми настройками прописанными на RADIUS сервере.

Также на RADIUS-сервере возможна настройка Framed Route с публичной интернет подсетью, которая настраивается на LAN-интерфейсе роутера и транслируется клиенту. Таким образом, каждый клиент имеет один статический IP-адрес на туннеле с приватной адресацией и NAT на трех LAN-интерфейсах, и дополнительно прописанную публичную подсеть (обычно это /31 или /30 подсеть) на одном LAN-интерфейсе.

Так как туннель может строиться через кабельное подключение (интернет-канал) или Sim-карты, а подсеть маршрутизируется за туннель, клиент получает статичные настройки вне зависимости от используемой транспортной сети.

При пропадании кабельного канала роутер за 10-20 секунд перекидывает трафик на радиоинтерфейс и первую Sim-карту, а в случае проблем и с ней производит смену рабочей Sim-карты на резервную, обычно эта смена занимает 60-90 секунд.

За выбор маршрута трафика между кабелем и радиосетью отвечает встроенный инструмент NQA (Network Quality Analysis) и значения preference route:

#
nqa test-instance admin inet
 test-type icmp
 destination-address ipv4 4.2.2.2
 frequency 20
 source-interface GigabitEthernet0/0/4
 start now
#

#
ip route-static 0.0.0.0 0.0.0.0 Virtual-Template1 preference 40
ip route-static 4.2.2.2 255.255.255.255 GigabitEthernet0/0/4 dhcp
ip route-static 85.21.4.234 255.255.255.255 GigabitEthernet0/0/4 dhcp track nqa admin inet
ip route-static 85.21.4.235 255.255.255.255 GigabitEthernet0/0/4 dhcp track nqa admin inet
ip route-static 100.64.0.0 255.255.254.0 Cellular0/0/0 preference 70
ip route-static 100.64.0.0 255.255.254.0 NULL0 track nqa admin inet
#

А за выбор активных Sim-карт отвечает скрипт автопереключения, написанный на Python.

Схема также имеет свои ограничения: cкорость доступа ограничена 30-50 Мбит/с, а MTU=1450.

Дальнейшее направление развития - это реализация этой же схемы с резервированием проводных каналов, но уже с использованием BGP, для анонса LAN-сети либо через кабель, либо через туннель, это позволит использовать роутер в виде резерва на широкополосных каналах в 100-200 Мбит/с и разделением маршрутов трафика по кабелю и по туннелю. Естественно, это будет работать только на проводных каналах от Билайн, для работы через других провайдеров мы отправляем весь трафик через L2TP-туннель.

Самый трудный — L2 MPLS

Этот вариант получился самым последним в наших решениях на сегодняшний день, и был самым тяжелым с точки зрения реализации. Используемый протокол для этого типа подключений на Huawei AR129 — SVPN L2TPv2, на ответной части стоит Cisco ASR1001-X, которая является ответной частью туннеля и выводит трафик в MEN сеть.

Архитектурно сеть выглядит так:

Настройка такого режима на роутере Huawei AR129 выглядит так:

#
interface Tunnel0/0/0
 tunnel-protocol svpn
 encapsulation l2tpv3
 l2tpv3 local session-id 3
 l2tpv3 remote session-id 4
 tunnel-source 100.64.16.63
 tunnel-destination 100.64.0.43
#

Самый трудный для нашей реализации ввиду особенностей работы протокола, сессия для L2 MPLS инициируется с IP-адреса Sim-карты, которая активна в конкретный момент для этого туннеля, и к IP-адресу привязываются значения и на CPE и на ответном узловом PE, а в случае проблем с работающей LTE/3G сетью происходит смена IP на Sim-карте.

У нас были следующие варианты выхода из этой ситуации:

  • Использовать GRE-туннель, и уже через этот туннель пускать туннель с L2 MPLS.

  • Назначать одинаковые IP-адреса на Sim-карты при настройке.

  • Сделать так, чтобы конфигурация туннелей менялась в роутере в зависимости от Sim-карты.

Первые два варианта хоть и выглядели оптимальными с точки зрения архитектуры сети (отдельный туннель — отдельная пара портов на MEN-сети), но с точки зрения синхронизации процессов и технической поддержки это гораздо большая проблема.

Соответственно, пришлось реализовывать реконфигурацию роутера "на лету”. Если учесть, что используемый нами Python-скрипт для автоматического переключения Sim-карт и так уже выполнял большую часть логики, нам осталось его немного дополнить парой функций:

При смене Sim-карт нужно было вызвать процесс изменения в параметрах настройки туннеля “remote session-id” и “tunnel-source”, и при обратной смене Sim-карт вернуть эти значения:

def l2_sim2(o, cli):
	log_syslog(o, ops.CRITICAL, "New parameters applied: " + l2_lses2 + " " + l2_rses2 + " " + l2_vcid2 + " " + l2_src2 + " " + l2_dst2)
	output, n1, n2 = o.cli.execute(cli, "system-view")
  output, n1, n2 = o.cli.execute(cli, "interface Vlanif1")
	output, n1, n2 = o.cli.execute(cli, "undo link-bridge Tunnel0/0/0")
	output, n1, n2 = o.cli.execute(cli, "quit")
	output, n1, n2 = o.cli.execute(cli, "quit")
	result = o.timedelay(seconds=60, milliseconds=0)
	output, n1, n2 = o.cli.execute(cli, "system-view")
  output, n1, n2 = o.cli.execute(cli, "interface Tunnel0/0/0")
	output, n1, n2 = o.cli.execute(cli, "tunnel-protocol svpn")
	output, n1, n2 = o.cli.execute(cli, "encapsulation l2tpv3")
	output, n1, n2 = o.cli.execute(cli, "interface Tunnel0/0/0")
	output, n1, n2 = o.cli.execute(cli, "l2tpv3 local session-id " + str(l2_lses2))
	output, n1, n2 = o.cli.execute(cli, "l2tpv3 remote session-id " + str(l2_rses2))
	output, n1, n2 = o.cli.execute(cli, "tunnel-source " + str(l2_src2))
	output, n1, n2 = o.cli.execute(cli, "tunnel-destination " + str(l2_dst2))
	output, n1, n2 = o.cli.execute(cli, "quit")
	output, n1, n2 = o.cli.execute(cli, "quit")    
	output, n1, n2 = o.cli.execute(cli, "system-view")
  output, n1, n2 = o.cli.execute(cli, "interface Vlanif1")
	output, n1, n2 = o.cli.execute(cli, "link-bridge Tunnel0/0/0 vc-id " + str(l2_vcid2) + " tagged")
	output, n1, n2 = o.cli.execute(cli, "quit")
	output, n1, n2 = o.cli.execute(cli, "quit")
	output, n1, n2 = o.cli.execute(cli, "save", {"continue": "Y"})

def l2_sim1(o, cli):
	log_syslog(o, ops.CRITICAL, "New parameters applied: " + l2_lses1 + " " + l2_rses1 + " " + l2_vcid1 + " " + l2_src1 + " " + l2_dst1)
  output, n1, n2 = o.cli.execute(cli, "system-view")
  output, n1, n2 = o.cli.execute(cli, "interface Vlanif1")
  output, n1, n2 = o.cli.execute(cli, "undo link-bridge Tunnel0/0/0")
  output, n1, n2 = o.cli.execute(cli, "quit")
	output, n1, n2 = o.cli.execute(cli, "quit")
	result = o.timedelay(seconds=60, milliseconds=0)
  output, n1, n2 = o.cli.execute(cli, "system-view")
	output, n1, n2 = o.cli.execute(cli, "interface Tunnel0/0/0")
	output, n1, n2 = o.cli.execute(cli, "tunnel-protocol svpn")
	output, n1, n2 = o.cli.execute(cli, "encapsulation l2tpv3")
	output, n1, n2 = o.cli.execute(cli, "l2tpv3 local session-id " + str(l2_lses1))
	output, n1, n2 = o.cli.execute(cli, "l2tpv3 remote session-id " + str(l2_rses1))
	output, n1, n2 = o.cli.execute(cli, "tunnel-source " + str(l2_src1))
	output, n1, n2 = o.cli.execute(cli, "tunnel-destination " + str(l2_dst1))
	output, n1, n2 = o.cli.execute(cli, "quit")
	output, n1, n2 = o.cli.execute(cli, "quit")
	output, n1, n2 = o.cli.execute(cli, "system-view")
  output, n1, n2 = o.cli.execute(cli, "interface Vlanif1")
	output, n1, n2 = o.cli.execute(cli, "link-bridge Tunnel0/0/0 vc-id " + str(l2_vcid1) + " tagged")
	output, n1, n2 = o.cli.execute(cli, "quit")
	output, n1, n2 = o.cli.execute(cli, "quit")
	output, n1, n2 = o.cli.execute(cli, "save", {"continue": "Y"})

Какие плюсы у этой схемы работы в режиме L2 MPLS:

  • Роутер работает только прозрачным Ethernet до нашего РЕ, схему можно применять еще и как для Интернет, так и для IP VPN-включений.

  • MTU стал побольше, чем у варианта с IPSec.

  • Можно проводить легкую бесшовную подмену кабельных каналов при авариях.

Учитывая все варианты предоставления сервисов из предыдущих статей, мы смогли построить универсальную, надежную и масштабируемую инфраструктуру сети доступа с использованием преимуществ VPN, которую собираемся развивать в дальнейшем.

В следующих статьях расскажем про USB Deployment — инструмент по простой настройке роутеров, Python-скрипт, который используем для переключения Sim-карт, и интеграцию нашего Мультисим-решения с Облачной АТС (в роутере есть встроенный SIP-клиент и два FXS порта, мы просто не могли не попробовать их использовать).

В одном из комментариев спрашивали про скорости роутера по IPSec.

По результатам наших тестов скорость составляет больше 50 Мбит/с (IPSec в режиме IKEv2, iperf3 - server), то же самое к режиму работы с L2TP-туннелем. Скорости поднимали и выше, но мы и не планировали предлагать клиентам больше 50Мбит/с по нашему решению, т.к. во-первых упираемся в "гигиенический" предел по LTE, во-вторых роутеры планировали использовать вместе с настройкой доп. сервисов типа SIP PBX (расскажем в следующей статье), и в-третьих, на смену Huawei AR129 у нас приходит Huawei AR617, который более производителен, что нам ещё предстоит испытать.

Источник: https://habr.com/ru/company/beeline/blog/542438/


Интересные статьи

Интересные статьи

Сразу оговоримся, что в этой публикации мы не будем затрагивать вопросы подходов к созданию полномасштабных приложений для Web, подразумевающих наличие крупной кодовой базы, заставляющей ...
Продолжу выкладывание примеров использования GitHub'а как инструмента обучения.Продолжу вариантом про командную работу. Но рассмотрю ту его версию, когда нет большого чис...
Интернет вещей, IoT, Internet of Things - сеть электронных устройств, оснащенных встроенными технологиями для взаимодействия друг с другом и внешней средой. Концепц...
Есть несколько способов добавить водяной знак в Битрикс. Рассмотрим два способа.
Эта статья посвящена тестированию возможности использования технологии Intel Processor Trace (Intel PT) для записи трассы в System Management Mode (SMM) режиме. Работа была выполнена в рамках S...