на главную обо мне контакты катра сайта
Блог Создание и продвижение сайтов
 

Маршрутизация в VPN сетях

-

Так как VPN может использоваться для объединения не только компьютер клиент + компьютер сервер, а для объединения сетей необходимо обеспечить автоматическую настройку маршрутизации. В прошлой заметке у меня это делается вручную после подключения, а это совсем не удобно при автоматическом подключении, поэтому пришлось разбираться как работает эта система

Итак для создания специфических маршрутов при подключение к VPN серверу необходимо создать файл /etc/ppp/ip-up.d/pptp_vpn со следующим текстом (ниже описано как правильно называть файл с маршрутами)

cat /etc/ppp/ip-up.d/pptp_vpn 
#!/bin/sh
# мой маршрут пересылающий пакеты из локальной сети в сеть 192.168.80.0/24
route add -net 192.168.80.0/24 gw 192.168.100.2

Это файл должен быть исполняемым, для удаления маршрута необходимо использовать файл: /etc/ppp/ip-down.d/pptp_vpn со следующими командами ( и pptpd - для VPN сервера)

cat /etc/ppp/ip-down.d/pptp_vpn 
#!/bin/sh
route del -net 192.168.80.0/24 gw 192.168.100.2

Тут видно, что мои скрипты настройки маршрутизации чрезвычайно примитивны и не учитывают множество ситуаций, но меня они устраивают. Но если потребуется большее, например на сервере необходимо выдавать маршруты в зависимости от имени подключаемого пользователи или имени интерфейса или добавлять правила фаервола, то придётся применять условия и обрабатывать переменные окружения которые формирует pptpd.

Чтобы узнать какие формируются переменные при создании нового соединения нужно добавить в созданные файлы вот такую команду:

env > /tmp/env.vpn

На моём VPN сервере я получаю вот такие переменные

cat /tmp/env.vpn 
PPP_TTY=/dev/pts/0
IFNAME=ppp1
PPPLOGNAME=root
IPLOCAL=192.168.100.1
PPP_REMOTE=192.168.100.2 # IP на другом конце тонеля
PPP_IFACE=ppp1 # название интерфейса
PPP_TTYNAME=0
ORIG_UID=0
SPEED=115200 # индикатор скорости подключения, можно игнорировать
PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin
IPREMOTE=192.168.100.2
PPP_LOCAL=192.168.100.1
PPP_IPPARAM=92.255.239.93 # IP хоста откуда произошло подключение
PPPD_PID=331 # PID текущего процесса
PWD=/
PPP_SPEED=115200
PEERNAME=mywork # имя под которым подключился клиент
DEVICE=/dev/pts/0

Думаю этих переменных достаточно чтобы организовать довольно сложные конфигурации

Следует обратить внимание на то как называть файлы скриптов дополнительных маршрутов.

При создании или удалении ppp, pptp интерфейсов запускаются файлы: /etc/ppp/ip-up  /etc/ppp/ip-down соответственно. Эти файлы являются скриптами которые определяют дальнейшее поведение соединения. Например, если создать файл /var/log/ppp-ipupdown.log то в нём будет отображаться некоторые переменные поясняющие дальнейшее действие скрипт, затем эти переменные используются для вызова утилиты run-parts. Вот пример поясняющий работу этой утилиты

ffsdmad@ffsdmad-home:~$ run-parts --list --regex 'vpn' /etc/ppp/ip-up.d
/etc/ppp/ip-up.d/99_pptpd_vpn
ffsdmad@ffsdmad-home:~$ run-parts --list --regex '[0-9]+vpn' /etc/ppp/ip-up.d
ffsdmad@ffsdmad-home:~$

Тоесть эта утилита запускает скрипты соответствующие регулярному выражени из указанной директории

В моём случае , да вообще по умолчанию, запускаются все скрипты из директории ip-up.d и ip-down.d, так как не задано регулярное выражение для отбора нужного скрипта:

run-parts /etc/ppp/ip-up.d --arg=ppp1 --arg= --arg=38400 --arg=192.168.100.2 --arg=192.168.100.1 --arg=vpn

В случае, когда потребуется запуск разных файлов для разных соединения и это будет невозможно сделать внутри самих скриптов с помощью переменных окружения, можно использовать механизм отбора нужного скрипта по регулярному выражению при запуске run-parts и опции --regexp

текст недоступен

другие страницы раздела

комментарии (13)

1 → анонимное сообщение

re: а где ты вычиталhttp://pptpclient.sourceforge.net/routing.phtml#lan-to-lanчестно говоря пока тоже не понял по какому принципу pptp выбирает, что ему запускать

2010-02-03 07:54:56

2 → анонимное сообщение

а где ты вычитал про наименования в /etc/ppp/ip-down.d/ ? у меня скрипт носит имя 99route и отрабатывает на все соединения pptp ...

2010-02-02 15:39:56

3 → анонимное сообщение

вот здесь можно посмотреть как pptp выбирает нужный в данный момент интерфейс: http://pptpclient.sourceforge.net/routing.phtml#all-to-tunnel

2010-02-04 10:28:43

4 → анонимное сообщение

re: вот здесь можно посмотретьничего там путного по выбору файла маршрутизации нетпришлось разобраться со стеком утилит настройки соединения, за то сейчас вроде всё прояснилось

2010-02-04 11:43:13

5 → анонимное сообщение

у меня в /etc/ppp/peers/vpn (клиент)ipparam vpnа на сервереname PPTPD

2010-02-07 04:39:57

6 → анонимное сообщение

аналогично настраиваится и сервер /etc/ppp/pptpd-options: ipparam pptp_vpn /etc/ppp/ip-up.d/pptp_vpn: if [[ $6 == pptp_vpn ]]; then route add -net 192.168.0.0/24 gw 192.168.100.1 fi извини, комментарий за 20:13:22 случайно отправил

2010-02-04 20:27:48

7 → анонимное сообщение

Посыпаю голову пеплом.Настройка сервера, указанная двумя комментариями выше, не будет работать, т.к. в параметр $6 записывается ip-адрес клиента.

2010-02-08 11:55:25

8 → анонимное сообщение

rE: Посыпаю голову пеплом.а какой смысл посыпать, если эти параметры всё равно не обрабатываются и равнозначны, что $1 что $6

2010-02-08 11:58:33

9 → анонимное сообщение

решил провести эксперимент, настроил сервер pptpd, и вот что получилось: набор переменных окружения вот такой LOCALNAME=pptpd (задается с помощью name в файле /etc/ppp/options.pptpd) PPPD_PID=13529 PPPLOGNAME=мегаюзер PEERNAME=клиент SPEED=115200 IPREMOTE=Ip клиента, выданный сервером IFNAME=ppp1 PWD=/etc/ppp/ip-up.d SHLVL=1 DEVICE=/dev/pts/5 ORIG_UID=0 IPLOCAL=Ip сервера $6 == IP клиента(с которого производилось подключение), а $1 == $IFNAME. Хотя для настройки сервера это не так важно. Тут лучше всего использовать параметр $4($IPLOCAL) или $LOCALNAME.

2010-02-09 00:08:10

10 → анонимное сообщение

route add -del 192.168.80.0/24 gw 192.168.100.2надо исправить наroute del -net 192.168.80.0/24 gw 192.168.100.2

2010-02-16 13:39:03

11 → анонимное сообщение

спасибо

2010-02-16 13:41:17

12 → анонимное сообщение

ребят, то что осталось от мозга за последние 2е суток после прочтения закипело, пожалуйста кто-нибудь напишите в каком файле на сервере и что надо написать, я запутался совсем. я уже неделю бьюсь с настройкой впн сервера, запостил кучу форумов (ниодного вразумительного ответа не получил), на этот блог вылез обсалютно случайно и вижу что проблема с маршрутизацией решена, только я уже ничего не понимаю (( мои клиенты при подключении не видят сеть т.к. маска сети, выдаваемой им сервером 255.255.255.255, но стоет мне вырубить фаэрвол как все всех видят. за-то обнаружил интересный прикол когда фаэрвол погас сразу создались 3 интерфейса ( для 3х соединенных пользователей) тут я оканчательно встал в ступор, как и почему фаэрвол мешал созданию сетевых интерфейсов для пользователей ??!

2010-11-03 21:31:42

13 → анонимное сообщение

#12: ребят, то что осталось от мозга за последние 2е суток после прочтения закипелоложись спать -- утро вечера мудренее, а завтра я смогу тебе помочь

2010-11-03 21:37:11

Valid XHTML 1.0 Strict Читать в Яндекс.Ленте Вятка-на-Сети: Каталог ресурсов