Назад | Перейти на главную страницу

Может ли L2TP VPN выполнить автоматическую настройку маршрута для клиента во время подключения?

Мы настроили VPN-сервер L2TP с этим руководство, все работает как шарм.

Единственная проблема

  1. Мы не хотим, чтобы клиент маршрутизировал весь трафик с помощью этой VPN, только определенную подсеть, например 10.0.0.0/20

  2. На Mac нам нужно установить маршрут вручную с помощью команды, но для мобильных устройств, кажется, нет возможности сделать это?

Итак, можно ли настроить клиента автоматически для подсети «10.0.0.0/20»?

Хорошо, этот вопрос задают снова и снова в Интернете, и в большинстве случаев есть (полу) неверный ответ, что вы не можете сделать то, что было описано в исходном сообщении. Разрешите прояснить это раз и навсегда :)

Короткий ответ: L2TP (и PPTP, если на то пошло) не имеет средств для проталкивания маршрута внутри протокола, но это может быть достигнуто за пределами протокола.

Поскольку L2TP - изобретение Microsoft, лучшим источником информации является их техническая документация (и они, кстати, неплохо в этом разбираются). Техническое описание того, что я собираюсь объяснить ниже, можно найти на Адресация и маршрутизация VPN. Ключевые слова для правильной настройки (если вы собираетесь проводить собственное исследование): DHCPINFORM и «бесклассовые статические маршруты».

Прежде всего, как это работает:

  1. клиент подключается к VPN-серверу
  2. после успешной аутентификации устанавливается безопасный туннель
  3. клиент использует сообщение DHCPINFORM после соединения, чтобы запросить опцию бесклассовых статических маршрутов DHCP. Этот параметр DHCP содержит набор маршрутов, которые автоматически добавляются в таблицу маршрутизации запрашивающего клиента (Я рабски скопировал эту строку прямо из документации Microsoft. :))
  4. сервер VPN отвечает на это сообщение соответствующим набором маршрутов

Что ж, есть нюанс:

  • Там есть RFC-3442 описывая «Бесклассовые статические маршруты DHCP», и там говорится, что код для этой опции - 121. Microsoft решила заново изобрести колесо (как всегда) и использует код 249 для этой опции. Следовательно, для поддержки более широкого круга клиентов нам необходимо ответить обоими кодами.

Я собираюсь описать типичную конфигурацию с использованием Linux-сервера в качестве сервера VPN (вы можете настроить серверы MS, используя ссылку на документацию Microsoft).

Для настройки маршрутов на клиентах нам потребуются следующие ингредиенты:

  • L2TP / IPSEC (или PPTP) = например, accl-ppp - хороший L2TP / PPTP-сервер с открытым исходным кодом
  • DHCP-сервер = их много, но я собираюсь описать конфигурацию dnsmasq

Ниже приведен дамп рабочей конфигурации Accel-PPP. Я предоставляю ее полностью, иначе было бы сложно объяснить, что куда идет. Если у вас уже работает ваша VPN, вы можете пропустить этот файл конфигурации и сконцентрироваться на конфигурации DHCP, описанной ниже.

[root@vpn ~]# cat /opt/accel-ppp/config/accel-ppp.conf
[modules]
log_syslog
pptp
l2tp
auth_mschap_v2
ippool
sigchld
chap-secrets
logwtmp

[core]
log-error=/var/log/accel-ppp/core.log
thread-count=4

[ppp]
verbose=1
min-mtu=1280
mtu=1400
mru=1400
check-ip=1
single-session=replace
mppe=require
ipv4=require
ipv6=deny
ipv6-intf-id=0:0:0:1
ipv6-peer-intf-id=0:0:0:2
ipv6-accept-peer-intf-id=1

[lcp]
lcp-echo-interval=30
lcp-echo-failure=3

[auth]
#any-login=0
#noauth=0

[pptp]
echo-interval=30
echo-failure=3
verbose=1

[l2tp]
host-name=access-vpn
verbose=1

[dns]
dns1=192.168.70.251
dns2=192.168.70.252

[client-ip-range]
disable

[ip-pool]
gw-ip-address=192.168.99.254
192.168.99.1-253

[log]
log-file=/var/log/accel-ppp/accel-ppp.log
log-emerg=/var/log/accel-ppp/emerg.log
log-fail-file=/var/log/accel-ppp/auth-fail.log
log-debug=/var/log/accel-ppp/debug.log
copy=1
level=3

[chap-secrets]
gw-ip-address=192.168.99.254
chap-secrets=/etc/ppp/chap-secrets

[cli]
telnet=127.0.0.1:2000
tcp=127.0.0.1:2001

[root@vpn ~]# 
===

На этом этапе наши клиенты могут подключаться через L2TP (или PPTP) и общаться с сервером VPN. Таким образом, единственная отсутствующая часть - это DHCP-сервер, который прослушивает созданные туннели и отправляет в ответ необходимую информацию. Ниже приведен отрывок из файла конфигурации dnsmasq (я предоставляю только параметры, связанные с DHCP):

[root@vpn ~]# grep -E '^dhcp' /etc/dnsmasq.conf 
dhcp-range=192.168.99.254,static
dhcp-option=option:router
dhcp-option=121,192.168.70.0/24,192.168.99.254,192.168.75.0/24,192.168.99.254,10.0.0.0/24,192.168.99.254
dhcp-option=249,192.168.70.0/24,192.168.99.254,192.168.75.0/24,192.168.99.254,10.0.0.0/24,192.168.99.254
dhcp-option=vendor:MSFT,2,1i
[root@vpn ~]#

В приведенном выше отрывке мы проталкиваем маршруты 192.168.70.0/24, 192.168.75.0/24 и 10.0.0.0/24 через 192.168.99.254 (сервер VPN).

Наконец, если вы обнюхаете сетевой трафик (например, на сервере VPN), вы увидите в ответе на сообщение DHCPINFORM что-то вроде следующего:

19:54:46.716113 IP (tos 0x0, ttl 64, id 10142, offset 0, flags [none], proto UDP (17), length 333)
    192.168.99.254.67 > 192.168.99.153.68: BOOTP/DHCP, Reply, length 305, htype 8, hlen 6, xid 0xa27cfc5f, secs 1536, Flags [none]
      Client-IP 192.168.99.153
      Vendor-rfc1048 Extensions
        Magic Cookie 0x63825363
        DHCP-Message Option 53, length 1: ACK
        Server-ID Option 54, length 4: 192.168.99.254
        Domain-Name Option 15, length 18: "vpn.server.tld"
        Classless-Static-Route-Microsoft Option 249, length 24: (192.168.70.0/24:192.168.99.254),(192.168.75.0/24:192.168.99.254),(10.0.0.0/24:192.168.99.254)
        Vendor-Option Option 43, length 7: 2.4.0.0.0.1.255

P.S. Я почти забыл важную часть, необходимую для успешного использования вышеуказанной конфигурации. Ну, это было описано в документации Microsoft, на которую я ссылался, но кто читал документацию? :) Хорошо, клиенты должны быть настроены без «Использовать шлюз по умолчанию» в VPN-подключении (в Windows это находится в свойствах подключения -> Сеть -> Протокол Интернета версии 4 (TCP / IPv4) -> Свойства -> Дополнительно -> Настройки IP ). На некоторых клиентах также есть опция «Отключить добавление маршрута на основе классов» - она ​​должна быть отключена, поскольку она явно отключает функции, которые мы пытаемся реализовать.

Я не думаю, что вы можете протолкнуть маршрут к клиенту в L2TP / IPSEC VPN. Вам нужно будет выполнить настройку прямо на клиенте.

С каким мобильным клиентом у вас проблемы? Намного легче предоставить информацию, если мы знаем, какую операционную систему и программное обеспечение вы используете.