Почему L2TP-Client+IPSec на MikroTik hEX RB750Gr3 по-разному работает в зависимости от типа подключения к интернету?
Дано: L2TP Server на D-Link DFL-260E (со статическим белым IP).
MikroTik hEX RB750Gr3, прошивка 6.42.7, с настроенным L2tp-client (l2tp-out1).
Модем Megafon M150-2 (прошивка stick, определяется как ppp-out1 интерфейс, не LTE).
Конфигурация 1:
Мегафон-модем подключаем в USB порт Микротика (напрямую, без удлинителей), подключение ppp-out1 работает, интернет на компьютере работает (есть правило NAT для ppp_out1).
l2tp-out1 подключается и работает, но медленно. Пинги до сервера идут без потерь.
Настроены правила в IP - Routes для прямого прохождения пакетов на сервер l2tp.
Packet Sniffer + Wireshark на интерфейсе ppp-out1 ничего особо подозрительного не показывает, а вот на l2tp-out1,
показывает множество "TCP Dup ACK" и "TCP Retransmissions".
Конфигурация 2:
Все точно также как в конфигурации 1, кроме способа подключения к интернету.
Используем промежуточный роутер TP-Link TL-MR3420.
Тот же самый мегафон-модем подключаем в USB порт TP-Link,
от TP-Link витая пара в порт ether1 микротика (для порта ether1 также есть правило NAT).
l2tp подключается и работает значительно быстрее чем в первой конфигурации, в Wireshark только изредка проскакивают TCP Retransmission.
Проблема в том, что есть программа, которая при запуске подключается к БД MSSQL через туннель l2tp+ipsec, и вот это
соединение никак не хочет стабильно работать на 1-й конфигурации.
За несколько недель различных экспериментов было опробовано все что советовал яндекс и гугл.
Использовались разные устройства MikroTik, но одинаковой модели RB750Gr3.
Использовались разные модемы (МТС, Ростелеком, 3G, 4G).
Изменение MTU/MRU/MRRU как на интерфейсе ppp-out так и на l2tp-out, изменение MSS (включение/отключение в профилях PPP, создание правил в Mangle), изменение TTL. Отключение всех правил в Firewall. Заворачивание L2TP трафика в NAT. И ещё множество всяких экспериментов. Проблема осталась.
poisons, никак не могу понять почему они теряются именно при одновременном использовании ppp(usb) и l2tp, кроме как проблемы в железе, уже не знаю о чем и думать.
К сожалению, я не особо сильно разбираюсь в подсчетах MTU и MSS, но на практике я перепробовал множество значений (и MTU и MSS, и одновременно и порознь, и всячески), думаю если бы дело было в них то я бы наткнулся на что-то работоспособное.
1) думал об этом, но не совсем понимаю как это устроить.
2) почитав форумы, пришел к выводу что особых отличий в работе между этими видами прошивок нет, а иногда на stick даже лучше, поэтому не рискнул перепрошивать.
Скорее всего у вас MTU не тот стоит, что надо — к примеру у меня PPPoe съедает еще 20 от MTU и при IPSec тоннеле MTU 1436 уже. (Правда у меня с обоих сторон микротики)
А у вас при промежуточном TP-Link Mikrotik не сам пакеты фрагментирует, а TP-link, поэтому и работает.
Попробуйте на Микротике зайти в tools - ping и поизвращаться поотправлять пакеты:
Ping To — 8.8.8.8
Interface — PPP_out1
ARP Ping — Нет
Packet Count — 5
Advanced:
Packet Size — 1480
Dont Fragment — Да
если 1480 проходит, а 1481 нет (Packet too large... ...Fragmentation needed) — то PPP_out съедает 20 от MTU
Далее тоже самое, но нацельтесь (Ping To) на внутренний ресурс (Сервер БД) за L2TP (Interface — l2tp-out1) и снижайте размер пакета до тех пор пока не пропадет Packet too large. Вот тогда узнаете какой MTU точно пролетит через L2TP и ваш PPP без проблем.
MTU это первое с чем я начинал экспериментировать.
Микротик сам, по умолчанию, выставляет следующие MTU:
Для конфигурации 1:
ppp - max mtu 1460, actual mtu 1460, также это подтверждается и с Ping, 1461 уже выдает fragmentation need.
l2tp - max mtu 1450, actual mtu 1376, соответственно Ping c 1376 проходит, а с 1377 не проходит.
Для конфигурации 2:
ether1 - max mtu и actual mtu 1500.
l2tp - actual mtu также как и раньше 1376.
Во время экспериментов я перепробовал множество разных значений, даже минимально возможные для MTU (512), ситуацию это не меняет. Создавал правило с change mss clamp to pmtu, тоже никак не повлияло.
Загрузка процессора микротика в обоих вариантах, во время прохождения трафика по l2tp, 0-1%.
На сколько я понимаю ситуацию, пакеты теряются именно в l2tp туннеле, при этом на интерфейсе ppp ничего не теряется, интернет на компьютере подключенном к этому микротику работает вполне хорошо.
Если в первой конфигурации отключить l2tp в микротике, и сделать программно клиента l2tp в windows, то проблемы нет, все работает быстро и без ошибок.
Проверьте с другой стороны MTU — как писал в ответе выше — пришлось с обеих сторон тоннеля снижать до одинаковых. Без исправления вручную одна сторона автоматом считала 1480, а вторая 1436 и тормоза дикие периодически.
Если не поможет, кидайте сюда /export compact с микротика, может что найдём
parfenov_sk, "С другой стороны" в DFL-260E Ping простейший, в смысле там нельзя запретить фрагментирование, и размер пакета можно выбрать только предопределенный из списка.
Изначально там (в настройках IPSec на DFL) стояло MTU 1420, на микротике Actual MTU 1376.
Изменил MTU в DFL на 1376, и на микротике Actual MTU стало 1332.
Получается по дефолту на микротике оно всегда выставляется меньше на 44 байта.
В Вашем примере также 1480-1436=44, может оно так и должно быть?
100.1.15.0 - LAN сеть микротика
100.1.15.254 - IP микротика
100.1.200.1 - ip сервера l2tp со стороны DFL (на DFL есть маршрут в сеть 100.1.15.0/24)
100.1.200.15 - ip l2tp клиента на микротике
Вся конфигурация дефолтная, только изменены IP, включен ppp-out1, создан l2tp-out1, и добавлен маршрут в 100.1.0.0/16.
config
[admin@MikroTik] > /export compact
# sep/06/2018 09:48:38 by RouterOS 6.42.7
# software id = B3AV-ZEIV
#
# model = RouterBOARD 750G r3
/interface bridge
add admin-mac=CC:2D:E0:06:67:E8 auto-mac=no comment=defconf name=bridge
/interface l2tp-client
add allow=mschap2 connect-to=81.81.81.81 disabled=no ipsec-secret="abcdefghijk" keepalive-timeout=disabled name=l2tp-out1 password=psw use-ipsec=yes user=usr
/interface list
add comment=defconf name=WAN
add comment=defconf name=LAN
/interface wireless security-profiles
set [ find default=yes ] supplicant-identity=MikroTik
/ip hotspot profile
set [ find default=yes ] html-directory=flash/hotspot
/ip ipsec proposal
set [ find default=yes ] enc-algorithms=aes-128-cbc,3des
/ip pool
add name=default-dhcp ranges=100.1.15.10-100.1.15.250
/ip dhcp-server
add address-pool=default-dhcp disabled=no interface=bridge name=defconf
/port
set 0 name=usb1
/interface ppp-client
add apn=internet disabled=no info-channel=1 name=ppp-out1 port=usb1
/interface bridge port
add bridge=bridge comment=defconf interface=ether2
add bridge=bridge comment=defconf interface=ether3
add bridge=bridge comment=defconf interface=ether4
add bridge=bridge comment=defconf interface=ether5
/ip neighbor discovery-settings
set discover-interface-list=LAN
/interface list member
add comment=defconf interface=bridge list=LAN
add comment=defconf interface=ppp-out1 list=WAN
/ip address
add address=100.1.15.254/24 comment=defconf interface=bridge network=100.1.15.0
/ip dhcp-client
add comment=defconf dhcp-options=hostname,clientid disabled=no interface=ether1
/ip dhcp-server network
add address=100.1.15.0/24 comment=defconf gateway=100.1.15.254
/ip dns
set allow-remote-requests=yes
/ip dns static
add address=192.168.88.1 name=router.lan
/ip firewall filter
add action=accept chain=input comment="defconf: accept established,related,untracked" connection-state=established,related,untracked
add action=drop chain=input comment="defconf: drop invalid" connection-state=invalid
add action=accept chain=input comment="defconf: accept ICMP" protocol=icmp
add action=drop chain=input comment="defconf: drop all not coming from LAN" in-interface-list=!LAN
add action=accept chain=forward comment="defconf: accept in ipsec policy" ipsec-policy=in,ipsec
add action=accept chain=forward comment="defconf: accept out ipsec policy" ipsec-policy=out,ipsec
add action=fasttrack-connection chain=forward comment="defconf: fasttrack" connection-state=established,related
add action=accept chain=forward comment="defconf: accept established,related, untracked" connection-state=established,related,untracked
add action=drop chain=forward comment="defconf: drop invalid" connection-state=invalid
add action=drop chain=forward comment="defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat connection-state=new in-interface-list=WAN
/ip firewall nat
add action=masquerade chain=srcnat comment="defconf: masquerade" ipsec-policy=out,none out-interface-list=WAN
/ip route
add distance=1 dst-address=100.1.0.0/16 gateway=l2tp-out1
/system clock
set time-zone-autodetect=no time-zone-name=Asia/Yekaterinburg
/system routerboard settings
set silent-boot=no
/tool mac-server
set allowed-interface-list=LAN
/tool mac-server mac-winbox
set allowed-interface-list=LAN
[admin@MikroTik] >
Я бы попробовал поставить на l2tp MTU+MRU 1418, MSS 1378, в firewall в самом вверху добавил разрешающие правила на любое соединение в сторону l2tp (цепочка forward), а в Firewall/Nat убрал бы маскарадинг в сторону l2tp. (в теории галочка allow fast path в настройках l2tp может отключить обработку firewall:)
Еще есть вариант поковырять настройки ipsec (настройки не в l2tp, а ip-ipsec, config и прочее), но тут уже от времени и желания)
Под боком нет ни одного TPlink-a, ни DFL:(
l2tp MTU+MRU 1418, MSS 1378, в firewall в самом вверху добавил разрешающие правила на любое соединение в сторону l2tp (цепочка forward)
.
Маскардинга в сторону l2tp не было, т.к. там прямая маршрутизация, маскардинг есть только на ppp интерфейс (но я даже и его отключал). Правила в firewall, allow fast path то же пробовал. Проблема все равно остается.
Всё-таки я склоняюсь к проблеме в железе (прошивке), какой-то хитрый баг именно на l2tp через ppp(usb).
Никакого желания копаться в настройках уже нет :( Буду ждать новых версий прошивок, а вдруг... :)
Недавно начались подобный проблемы(примерно пол года как) на йоте... Помог исключительно переход на OVPN.
Единственно - странно что нормлаьно работает через TPLink, похоже действительно MTU или где то тут... Или микротик опять баганул модемы...