Показаны сообщения с ярлыком pptp. Показать все сообщения
Показаны сообщения с ярлыком pptp. Показать все сообщения

28 окт. 2014 г.

Передача статических маршрутов в pptp-туннеле

Думал я, что сабж при использовании pptp vpn невозможен. Оказалось, ошибался. Да, сам ppp-протокол не умеет передавать при соединении маршруты. Однако, при установлении соединения клиентом в туннель посылаются запросы DHCPINFORM, с помощью которых ему можно вернуть практически любой dhcp-option, включая информацию о маршрутах!
Для этого, во-первых, нам потребуется dhcp-сервер. В моем случае имеется уже работающая инфраструктура доступа к ресурсам локальной сети через pptp, поэтому pptpd и dnsmasq уже подняты и выполняют свои функции. В конфигурационный файл dnsmasq.conf добавился следующий блок:
##pptp-vpn
listen-address=192.168.30.1
dhcp-range=pptp,192.168.30.100,192.168.30.120,255.255.255.0,1h
dhcp-option=tag:pptp,vendor:MSFT,2,1i
dhcp-option=tag:pptp,6,192.168.30.1
dhcp-option=tag:pptp,249,192.168.11.0/24,192.168.30.1,192.168.13.0/24,192.168.30.1
где:
listen-address - локальный адрес серверного конца vpn-туннеля (localip в /etc/pptpd.conf)
dhcp-range=pptp,... - объявление нового диапазона с отдельным тегом, дабы не затрагивать настройки других dhcp-зон.
dhcp-option=tag:pptp,vendor:MSFT,2,1i - спецопция для MS dhcp-клиента, говорящая ему делать dhcp-lease при выключении
dhcp-option=tag:pptp,6,192.168.30.1 - указание DNS-сервера
dhcp-option=tag:pptp,249,... - спецопция для MS dhcp-клиента, передающая статические маршруты (если среди клиентов есть Linux\MacOS, следует добавить dhcp-option=121 с аналогичным содержанием)
Далее проверяем корректность внесенных изменений с помощью dnsmasq --test и если все хорошо, перезапускаем демона для применения настроек. DHCP готов к работе.
Чтобы до него долетели DHCPINFORM пакеты от клиентов, в /etc/ppp/pptpd-options добавляется (или раскомментируется) опция proxyarp. Никаких дополнительных настроек не требуется. После перезапуска pptpd можно проверять работоспособность.
В результате при поднятии vpn-туннеля в таблице маршрутизации клиента должны появиться дополнительные маршруты, а ifconfig покажет для соответствующего интерфейса отдельный dns-сервер. Примерно так:
IPv4 таблица маршрута
=========================================================
Активные маршруты:
Сетевой адрес           Маска сети      Адрес шлюза       Интерфейс  Метрика
   <.....skip......>
  192.168.30.0     255.255.255.0     192.168.30.1  192.168.30.111     21
  192.168.30.111 255.255.255.255  On-link           192.168.30.111    276
  192.168.11.0     255.255.255.0      On-link           192.168.30.111     21
  192.168.11.255 255.255.255.255  On-link           192.168.30.111    276
  192.168.13.0     255.255.255.0      On-link           192.168.30.111     21
  192.168.13.255 255.255.255.255  On-link           192.168.30.111    276
<.....skip......>
=========================================================
Постоянные маршруты:
  Отсутствует


23 сент. 2008 г.

Проблема с VPN (& FTP) из-за NAT

Столкнулся с неприятной проблемой - у меня в офисе инет раздается через проксю, а ssh и vpn - маскарадится напрямую (дабы не заморачиваться с настройками и пробросом портов). И если с шеллом проблем никаких нет, все как из ружья работает, то с vpn вышла оказия - соединение на заведомо рабочий vpn-сервер не проходит, зависая на проверке логина-пароля. Сам PoPToP в логах ругается на что-то там связанное с LCP-таймаутами. Короче, полный и бесповоротный реконнект. Гугление по сабжу и проглядывание манов показало следующее (углубляться в методологию и причинно-следственные связи решения не хочется да и при авральном решении вопроса не так и важно) - для правльиного маскарадинга VPN (а также, как выяснилось и FTP) обычной подмены заголовков пакетов недостаточно и требуется более глубокая их модификация. Сам модуль NAT-a этого сделать не может и поэтому для решения вставшей задачи (а у кого-то эта задача - активный FTP-коннект из-за маскарадинга) требуются следующие kenrel-модули: ip_nat_pptp и ip_nat_ftp соответственно. Подгрузив оные modprobe'ом, мы получаем щастие.
Для совсем экстаза пихаем их в автозагрузку, для чего в /etc/modules (в случае Debian Etch, в других ОС файлик с автозагружаемымми модулями может варьироваться) пишем построчно оба эти модуля в конце файла, не забывая EOF (то бишь пустую строку в конце).