Jump to content

Keenetic l2tp/ipsec client <-> Openbsd npppd(l2tp)/ipsec server


Recommended Posts

Добрый день!

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

Есть Keenetic'и (причём несколько штук разных и на разных прошивках - 2-я и 4-я версии). На них настроен l2tp/ipsec клиент, который подключается к openbsd'шному npppd в режиме l2tp + ipsec. Поведение, о котором дальше будет написано, одинаковое.

С подключением всё отлично, но проблема в том, что маршрутизация получается несимметричной - как будто в одну сторону на стороне кинетика для интерфейса ppp0 работает NAT.

Если пакеты идут из сети, которую обслуживает кинетик, в сеть, которую обслуживает openbsd, то соединения устанавливаются, однако IP адрес отправителя в туннельном интерфейсе подменяется на IP адрес кинетика с его стороны туннеля (и видно это tcpdump'ом на кинетике). Для примера, пусть будет ppp0 192.168.20.1 <-> 192.168.20.2. В этом случае все устройства сети openbsd, которые будут получать трафик от устройств из сети кинетика, будут думать, что весь он отправлен с адреса 192.168.20.1, т.е. с кинетика, соответственно и отвечать будут этому адресу, который на стороне кинетика в обратном порядке будет заменён на настоящий и отправлен к себе в сеть нужному устройству.

В обратном направлении (сеть openbsd -> сеть кинетика) трафик идёт с корректным адресом отправителя, доходит до устройства, устройство отвечает, ответ приходит на кинетик и "застревает" в ppp0, не возвращаясь в pppx0 openbsd, хотя адрес получателя стоит корректный. При этом обе стороны туннеля по туннельным адресам могут "пинговать друг друга" без проблем.

Я настраивал правила файрволла на кинетике для пропуска всего во все стороны, отключал isolate-private, меня security-level, пытался отключить NAT, который и так не был включен, убирал ALG из компонентов - ничего не помогает.

В итоге для эксперимента я поднял поверх этого l2tp/ipsec туннеля туннель GRE и настроил маршрутизацию через него. Опять трафик сначала пошёл только в одном направлении (но в обе стороны, т.е. если TCP соединение инициировала сторона кинетика, то пакеты в рамках этого соединения назад тоже ходят). После того, как я выставил secure-level private для интерфейса Gre0, всё на вид заработало как надо - пошёл трафик, инициированный с обоих сторон.

Пользоваться стало можно, но, к сожалению, проблема с односторонней трансляцией IP адресов проявилась также и для Gre0 интерфейса. Кинетик и для Gre0, как и для ppp0, переделывает адреса отправителя в адрес своей строны GRE туннеля.

 

 

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...