вторник, 18 февраля 2014 г.

Настройка L2TP over IPSec на роутере D-Link DSR-1000

Для начала настроим L2TP. Этот протокол служит для транспортировки пакетов. Из википедии L2TP (англ. Layer 2 Tunneling Protocol — протокол туннелирования второго уровня) — в компьютерных сетях туннельный протокол, использующийся для поддержки виртуальных частных сетей. Несмотря на то, что L2TP действует наподобие протокола Канального уровня модели OSI, на самом деле он является протоколом Сеансового уровня и использует зарегистрированный UDP - порт 1701. Проверяем после установки соединения:
На роутере проводим настройку L2TP сервера:


На роутере заводим пользователя с правом L2TP. При подключении будет использоваться логин пароль этого пользователя. На роутере мы можем посмотреть подключенных пользователей:
На клиенте Ubuntu Desktop провожу настройку клиента. IPSec в настройке отключаю. Соединяемся с роутером по L2TP туннелю.

Это таблица маршрутизации на этом роутере:
Kernel IP routing table
Destination         Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.13.201  0.0.0.0         255.255.255.255 UH     0      0        0 ppp0
127.0.0.1            127.0.0.1     255.255.255.255 UGH  1      0        0 lo
192.168.4.0        0.0.0.0         255.255.255.0     U        0      0        0 bdg1
192.168.0.0        0.0.0.0         255.255.255.0     U        0      0        0 eth1
192.168.0.0        0.0.0.0         255.255.255.0     U        0      0        0 eth2
0.0.0.0               192.168.0.1       0.0.0.0            UG     0      0        0 eth1
Где 192.168.4.0 адрес локальной сети роутера, 192.168.0.0 внешние интернет адреса (моя локалка с которой раздаю интернет), 192.168.13.201 адрес выданный роутером клиенту L2TP.

В программе Wireshark, запущенной с клиента, установившего L2TP-туннель с роутером, при запуске пинга на IP-адрес 192.168.4.20 принадлежащий локальной сети за роутером, вложенность в пакет выглядит так:
eth:ip:udp:l2tp:ppp:ip:icmp:data
L2TP не шифруется, поэтому нас не устраивает. Будем его использовать только как транспорт для IPSec, который шифруется.

Настраиваем IPSec на роутере D-Link. С теорией по IPSec можно ознакомится в этой статье.
Настроим IPSec в транспортном режиме. Белый внешний IP-адрес (для моего примера) 192.168.0.196 с кем соединятся указал в Remote Endpoint. Алгоритм шифрования для XP клиентов рекомендуется 3DES и SHA-1. NAT-Traversal не включал. Функция Dead Peer Detection (DPD) предназначена для определения работоспособности туннеля - включил. PFS включил.

Теперь в Wireshark мы увидим что содержимое пакетов зашифровано eth:ip:esp
На рисунке ниже, вот так выглядят пакеты в L2TP over IPSec с включенным NAT-Traversal. NAT-T использует UDP 4500.

Теперь настроим IPSec в туннельном режиме. И еще одно немаловажное изменение, в Remote Endpoint укажем не конкретный адрес, а FQDN 0.0.0.0



Схема соединения без NAT:
Client VPN 192.168.0.196 ---- Internet ---- Server VPN - Router - 192.168.0.166
Вот такой VPN - лог генерируется:
[IKE] INFO:  [IPSEC_VPN] IPsec-SA established: ESP/Transport 192.168.0.166->192.168.0.196 with spi=515848118(0x1ebf37b6)
[IKE] INFO:  [IPSEC_VPN] IPsec-SA established: ESP/Transport 192.168.0.196->192.168.0.166 with spi=122863806(0x752c0be)
[IKE] INFO:  No policy found, generating the policy : 192.168.0.196/32[1701] 192.168.0.166/32[1701] proto=udp dir=in
[IKE] INFO:  Using IPsec SA configuration: anonymous
[IKE] INFO:  Responding to new phase 2 negotiation: 192.168.0.166[0]<=>192.168.0.196[0]
[IKE] INFO:  Sending Informational Exchange: notify payload[INITIAL-CONTACT]
[IKE] INFO:  ISAKMP-SA established for 192.168.0.166[500]-192.168.0.196[500] with spi:cae6f671d5e4d507:b50558498aa24484
[IKE] INFO:  Received unknown Vendor ID
[IKE] INFO:  Received unknown Vendor ID
[IKE] INFO:  Received Vendor ID: draft-ietf-ipsec-nat-t-ike-02
[IKE] INFO:  Received unknown Vendor ID
[IKE] INFO:  Received Vendor ID: RFC 3947
[IKE] INFO:  Received Vendor ID: DPD
[IKE] INFO:  Received unknown Vendor ID
[IKE] INFO:  Beginning Identity Protection mode.
[IKE] INFO:  Received request for new phase 1 negotiation: 192.168.0.166[500]<=>192.168.0.196[500]
[IKE] INFO:  Anonymous configuration selected for 192.168.0.196[500].

Теперь появилась анонимная конфигурация, т.е. нет привязки к IP-адресу клиента. 
Интересно проверить как будет работать с адресами клиентов за NAT-ом. Проверено - за NAT не работает. Надо включать NAT-Traversal
Пример соединения:
Client VPN 192.168.0.196 - Router-NAT-1.1.1.1 ---- Internet ---- Server VPN - Router - 2.2.2.2
Лог соединения:
IPsec-SA established[UDP encap 4500->11366]: ESP/Transport 2.2.2.2->1.1.1.1 with spi=3037768221(0xb510aa1d)
IPsec-SA established[UDP encap 11366->4500]: ESP/Transport 1.1.1.1->2.2.2.2 with spi=2688364(0x29056c)
Adjusting peer's encmode 4(4)->Transport(2)
No policy found, adjusting source address for generating the policy incase of NAT-T in Transport Mode: 1.1.1.1/32[1701] 2.2.2.2/32[1701] proto=udp dir=in
Re-using previously generated policy: 192.168.0.196/32[1701] 2.2.2.2/32[1701] proto=udp dir=in
Using IPsec SA configuration: anonymous
Responding to new phase 2 negotiation: 2.2.2.2[0]<=>1.1.1.1[0]
Sending Informational Exchange: notify payload[INITIAL-CONTACT]
ISAKMP-SA established for 2.2.2.2[4500]-1.1.1.1[11366] with spi:59d70c4ff4f9c7d1:edc2e8b3c26d1876
KA list add: 2.2.2.2[4500]->1.1.1.1[11366]
Floating ports for NAT-T with peer 1.1.1.1[11366]
NAT detected: PEER
NAT-D payload does not match for 1.1.1.1[63485]
NAT-D payload matches for 2.2.2.2[500]
For 1.1.1.1[63485], Selected NAT-T version: RFC 3947
Received unknown Vendor ID
Received unknown Vendor ID
Received Vendor ID: draft-ietf-ipsec-nat-t-ike-02
Received unknown Vendor ID
Received Vendor ID: RFC 3947
Received Vendor ID: DPD
Received unknown Vendor ID
Beginning Identity Protection mode.
Received request for new phase 1 negotiation: 2.2.2.2[500]<=>1.1.1.1[63485]
Anonymous configuration selected for 1.1.1.1[63485].

Как видно из лога используется UDP 4500 для NAT-Traversal

Также акцентирую внимание на настройку L2TP сервера. Там есть настройка роутинга NAT и Classical. Если выбран Classical, то при установке соединения будет доступен только сам роутер по внутреннему адресу. Поэтому надо выставлять NAT для того чтобы увидеть компы за натом.

UPD 12.08.2015
Для того чтобы видеть сеть за L2TP сервером, нужно прописать маршрут в "Advanced - Routing - Static routing". 
Например:
Destination - 192.168.13.0, MASK - 255.255.255.0, GW - 192.168.1.1, Interface - LAN, Active - Yes, Private - No, Metric - 15, 
  где 192.168.13.0 - это сеть L2TP, GW - 192.168.1.1 - это адрес самого роутера в локальной сети, метрика от 2 до 15.

21 комментарий:

  1. Спасибо за статью!!! Так и не могу получить доступ в локальную сеть компании за маршрутизатором без включения в настройках VPN туннеля, "Использовать основной шлюз в удаленной сети". Это для клиента на Windows.

    ОтветитьУдалить
  2. Тогда нужно на клиенте прописать постоянный маршрут с указанием gateway=адрес-выданный-машине-в-L2TP-сети
    route -p ADD 192.168.1.0 MASK 255.255.255.0 192.168.13.201
    где 192.168.1.0/24 - локальная сеть, 192.168.13.201 - адрес выданный клиенту в L2TP сети (можно увидеть ipconfig)

    ОтветитьУдалить
  3. Добрый день настроил подключение как здесь написано, все отлично коннектится с windows и android, и нормально захожу по rdp на сервак, но с raspbery pi с установленным LINUX 10 (buster) никак не могу подключиться, упростил уже до того что захожу только по L2TP без IPSec, подключение появляется (ppp0) но пинги дальше роутера не идут.

    ОтветитьУдалить
  4. возможно нужно добавить маршрут на raspbery pi

    ОтветитьУдалить
    Ответы
    1. Я о том же думаю, прописал такие маршруты, может еще добавите что надо?
      iptables -P INPUT ACCEPT
      iptables -P FORWARD ACCEPT
      iptables -P OUTPUT ACCEPT
      iptables -A INPUT -p udp -m udp --dport 1701 -j ACCEPT
      -не пингует сеть за роутером, до роутера пинги идут.
      Попробовал поставил TwistOS, прописал только последнюю строчку в маршрутизацию и все заработало там. Но надо запустить на Linux. Может посоветуете еще какие маршруты прописать?
      З.Ы. NetworkManager убрал, использую чисто xl2tpd.

      Удалить
    2. Для большей конкретики.
      Стоит роутер DSR1000 с внешн адресом 87.87.87.87 внутр адрес 192.168.16.1(L2TP 192.168.15.1) в лок сети RDP серв. Подключаюсь на малине (192.168.43.3) через сот. тел. (192.168.43.1), DSR по L2TP выдает 192.168.15.3.

      Удалить
  5. 1) iptables это firewall, не маршрутизация. тебе в сторону route копать)
    2) у тебя linux не видит 192.168.16.0/24 сеть предприятия, так добавь маршрут на linux через шлюз 192.168.15.1
    что-то вроде
    ip route add 192.168.16.0/24 via 192.168.15.1

    ОтветитьУдалить
  6. Спасибо огромное, все заработало!!!
    Но сейчас появилась потребность в печати на принтере установленном на малине (192.168.15.2), установил CUPS на него расшарил, а с сервера(192.168.16.30) не могу даже пропинговать до 192.168.15.2. Может какие-то настройки еще в роутере надо сделать?

    ОтветитьУдалить
  7. я думаю что здесь тоже самое, добавь на сервере(192.168.16.30) маршрут к малине через команду route, толька с синтаксисом Windows уже.

    ОтветитьУдалить
  8. Прописал на серваке маршрут, никакого эффекта((((
    Подключил уже пару малин сотовый тел. по wifi, в сетке они норм пингуются, CUPS работает печатают друг на друга. Как только их подключаю по L2TP, всё кердык, пинги пропадают между собой, CUPS не видит тоже соседние компы, пингует только 15.1 и подсеть 16.0 Сможете что то порекомендовать? такое ощущение что дело в роутере. Стоит прошивка 2.13_WW.

    ОтветитьУдалить
  9. из подсети 16.0 не пингуется вообще подсеть 15.0, роутер пингует 192.168.15.1 и подсеть 16.0, 15.2 и 15.3 не пингует

    ОтветитьУдалить
  10. Заметил такое, начинаю пинговать соседний комп по впн, ответов нет, потом подключаю впн на обоих компах и проскакивает 1 пакет с ответом и все, ни пакетов ни ответов(

    ОтветитьУдалить
  11. в логах такое сообщение:
    VPN Debug [Wed Jun 16 15:43:22 2021(GMT+0400)] [DSR-1000] [2.13] [VPN] [Debugging] [L2TP_SERVER] [L2TPD : DBUpdate event: Table: ipAddressTable opCode:23 rowId:5]
    VPN Debug [Wed Jun 16 15:43:25 2021(GMT+0400)] [DSR-1000] [2.13] [VPN] [Debugging] [L2TP_SERVER] [L2TPD : DBUpdate event: Table: ipAddressTable opCode:23 rowId:5 status = ERROR]

    ОтветитьУдалить
  12. >>> Прописал на серваке маршрут, никакого эффекта((((
    Я думаю сначала было бы неплохо увидеть что ты прописал и таблицу маршрутизации на 16.30 сервере.

    ОтветитьУдалить
  13. IPv4 таблица маршрута
    ===========================================================================
    Активные маршруты:
    Сетевой адрес Маска сети Адрес шлюза Интерфейс Метрика
    0.0.0.0 0.0.0.0 192.168.16.1 192.168.16.35 281
    127.0.0.0 255.0.0.0 On-link 127.0.0.1 331
    127.0.0.1 255.255.255.255 On-link 127.0.0.1 331
    127.255.255.255 255.255.255.255 On-link 127.0.0.1 331
    192.168.15.0 255.255.255.0 192.168.16.1 192.168.16.35 26
    192.168.16.0 255.255.255.0 On-link 192.168.16.35 281
    192.168.16.35 255.255.255.255 On-link 192.168.16.35 281
    192.168.16.255 255.255.255.255 On-link 192.168.16.35 281
    192.168.25.0 255.255.255.0 192.168.15.1 192.168.16.35 26
    192.168.25.0 255.255.255.0 192.168.16.1 192.168.16.35 26
    192.168.137.0 255.255.255.0 On-link 192.168.137.1 291
    192.168.137.1 255.255.255.255 On-link 192.168.137.1 291
    192.168.137.255 255.255.255.255 On-link 192.168.137.1 291
    192.168.164.0 255.255.255.0 On-link 192.168.164.1 291
    192.168.164.1 255.255.255.255 On-link 192.168.164.1 291
    192.168.164.255 255.255.255.255 On-link 192.168.164.1 291
    224.0.0.0 240.0.0.0 On-link 127.0.0.1 331
    224.0.0.0 240.0.0.0 On-link 192.168.137.1 291
    224.0.0.0 240.0.0.0 On-link 192.168.164.1 291
    224.0.0.0 240.0.0.0 On-link 192.168.16.35 281
    255.255.255.255 255.255.255.255 On-link 127.0.0.1 331
    255.255.255.255 255.255.255.255 On-link 192.168.137.1 291
    255.255.255.255 255.255.255.255 On-link 192.168.164.1 291
    255.255.255.255 255.255.255.255 On-link 192.168.16.35 281
    ===========================================================================
    Постоянные маршруты:
    Сетевой адрес Маска Адрес шлюза Метрика
    0.0.0.0 0.0.0.0 192.168.16.1 По умолчанию

    ОтветитьУдалить
  14. сервер 16.35, менял ip L2TP на роутере на 25.1

    ОтветитьУдалить
  15. Если ты поставил 25.0 для L2TP, то зачем эта сеть в таблице маршрутизации?

    192.168.15.0 255.255.255.0 192.168.16.1 192.168.16.35 26
    192.168.25.0 255.255.255.0 192.168.15.1 192.168.16.35 26
    192.168.25.0 255.255.255.0 192.168.16.1 192.168.16.35 26
    0.0.0.0 0.0.0.0 192.168.16.1 192.168.16.35 281

    У тебя должна быть запись с адресом 15.0 сети, которую тебе нужно достичь со шлюзом = IP сервера из 25 сети (например IP сервера 25.2 в L2TP, 15.1 в 15.0 сети), также на этом 15.1 сервере должна быть включена маршрутизация, чтобы он мог пересылать запросы в сеть.

    ОтветитьУдалить
  16. Белый внешний ip это статичный ip клиента?

    ОтветитьУдалить
  17. Я думаю, судя по таблице маршрутизации на роутере, я делал настройку лабораторно, eth1 & eth2 - это WAN1 & WAN2 роутера, где Интернетом выступала 192.168.0.0 сеть. Я думаю, под "Белый внешний ip" - имелся ввиду статический WAN адрес выданный провайдером если это перевести в продакшен

    ОтветитьУдалить
  18. У меня для теста нужно провести подключение к l2tp где роутер и клиент находятся в одной сети, и соответственно внешний адрес клиента будет wanip роутера что невозможно назначить в ipsec. Буду очень благодарен если подскажете мне что я делаю не так. Клиент под Windows 7

    ОтветитьУдалить
  19. тестируй со смартфоном с 4G, либо на самом смартфоне, либо смартфон как модем к компу подключай, с отключением локальной сети на компе.

    ОтветитьУдалить