Организация VPN. Запутался.

Автор: alexander_nur Дата: 17.07.2007 21:37 Вечер добрый.

Задача такая.

Есть три филиала, которые географически разнесены в разные места. Нужно соединить их по VPN через чужую сеть. Чужая сеть имеет физическое подключение к этим трем сетям. Можно назвать Интернетом чужую сеть, думаю можно считать что это одно и тоже. Фирма чужой сети выделяет (3 IP адреса. Тут пока под вопросом что они вообще сделают, просто так мне объяснил сегодняшний админ трех филиалов).

В общем, предложили поработать, и пока не знаю - браться ли. Хотелось бы, чтобы было бесплатно (линукс), надежно, и поэтому решения на MS не рассматриваются.

В общем lan1: 192.168.1.0 (адрес vpn-cервера 192.168.1.1)
lan2: 192.168.2.0 (адрес vpn-cервера 192.168.2.1)
lan3: 192.168.3.0 (адрес vpn-cервера 192.168.3.1)
Это все на интерфейсе eth0


Предположим, что "внешние" IP будут такого рода:
lan1: 10.100.1.1
lan2: 10.100.1.2
lan3: 10.100.1.3
это на интерфейсах eth1. Пинг, между этими серверами в этой подсети, разумеется, проходит

Задача - объединить 3 филиала в одну сеть. Т.е. юзеры (клиенты на WinXP) устанавливают VPN-соединение с соответствующим VPN сервером, коорый находится в их подсети, и попадают в одну виртуальную сеть, в которой до адресов вида 10.100.1.0 нет никакого дела. Т.е. 10.100.1.0 - лишь для связи VPN-серверов в чужой сети. Нужно, чтобы присоединенные клиенты имели доступ ко всем подсетям филиалов: 192.168.1.0, 192.168.2.0, 192.168.3.0

Сам я настраивал pptpd в ASP11 таким образом, что из сети 1 можно было попасть в сеть 2 (машина подключена одновременно к двум сетям имея 2 сетевые платы). Аутентификация через chap-secrets

Касаемо же сабжа, у меня сложность возникает: предположим, будут запущены и настроены pptpd на трех серверах. Как объяснить клиентам, что они попали не в чужую сеть (10.100.1.0), а в свою "объединенную"? "Чужой" сети они вообще видеть не должны.

Возможно ли настроить все с помощью pptpd?
Подскажите как.
Re: Организация VPN. Запутался. 19.07.2007 02:23BigAndy Пока не вижу особой необходимости поднимать туннели.
Просто пропишите статический роутинг

>Как объяснить клиентам, что они попали не в чужую сеть (10.100.1.0), а в свою "объединенную"?
Если уж решились. то не надо объяснять при правильно настроенном рутинге. Они сами увидят сеть.

>"Чужой" сети они вообще видеть не должны.
Вышесказанное противориечит этому утверждению.
Re: Организация VPN. Запутался. 19.07.2007 06:21alexander_nur В общем пока мысли такие - в одном филиале будет VPN сервер на pptpd, в двух других филиалах - 2 шлюза, которые будут соединяться с pptpd с помощью pptp.

Пока не знаю, не запутаюсь ли с маршрутами, т.к. на сервере pptpd придется роутить между eth0, eth1, pptp0 и pptp1.
В планах, как выяснилось, нужно будет подключить еще один филиал, на этот раз через Интернет.
Re: Организация VPN. Запутался. 19.07.2007 12:00alexander_nur В общем не все так однозначно с pptp-1.7.0.-2.110asp.
Пробую настроить с помощью pptp-command. Все делаю правильно, как и написано в том числе в FAQ на этом сайте.

После pptp-command старт имя_туннеля
В логах выдается следующее

Jul 19 13:47:16 localhost pppd[3136]: pppd 2.4.2 started by root, uid 0
Jul 19 13:47:16 localhost pppd[3136]: Using interface ppp0
Jul 19 13:47:16 localhost pptp[3137]: anon log[main:pptp.c:267]: The synchronous pptp option is NOT activated
Jul 19 13:47:16 localhost pppd[3136]: Connect: ppp0 <--> /dev/pts/4
Jul 19 13:47:16 localhost pptp[3143]: anon log[ctrlp_rep:pptp_ctrl.c:251]: Sent control packet type is 1 'Start-Control-Connection-Request'
Jul 19 13:47:16 localhost pptp[3143]: anon log[ctrlp_disp:pptp_ctrl.c:738]: Received Start Control Connection Reply
Jul 19 13:47:16 localhost pptp[3143]: anon log[ctrlp_disp:pptp_ctrl.c:772]: Client connection established.
Jul 19 13:47:17 localhost pptp[3143]: anon log[ctrlp_rep:pptp_ctrl.c:251]: Sent control packet type is 7 'Outgoing-Call-Request'
Jul 19 13:47:17 localhost pptp[3143]: anon log[ctrlp_disp:pptp_ctrl.c:857]: Received Outgoing Call Reply.
Jul 19 13:47:17 localhost pptp[3143]: anon log[ctrlp_disp:pptp_ctrl.c:896]: Outgoing call established (call ID 0, peer's call ID 4992).
Jul 19 13:47:17 localhost pptp[3137]: anon warn[decaps_gre:pptp_gre.c:324]: short read (-1): No route to host
Jul 19 13:47:17 localhost pppd[3136]: Modem hangup
Jul 19 13:47:17 localhost pppd[3136]: Connection terminated.
Jul 19 13:47:17 localhost pptp[3143]: anon log[callmgr_main:pptp_callmgr.c:231]: Closing connection (unhandled)
Jul 19 13:47:17 localhost pptp[3143]: anon log[ctrlp_rep:pptp_ctrl.c:251]: Sent control packet type is 12 'Call-Clear-Request'
Jul 19 13:47:17 localhost pptp[3143]: anon log[call_callback:pptp_callmgr.c:78]: Closing connection (call state)
Jul 19 13:47:18 localhost pppd[3136]: Exit.

-----
Если же использовать иксы, то там можно запустить system-config-pptp и настроив там - все без вопросов работает. В том числе после перезагрузки и используя pptp-command.

Сейчас у меня 2 линуха в vmware. У одного из них pptp, настроенный с помощью system-config-pptp, и второй - где специально хочу добиться работы pptp с помощью pptp-command, не загружая иксов.

Где смотреть?
Re: Организация VPN. Запутался. 19.07.2007 21:45BigAndy >В общем не все так однозначно с pptp-1.7.0.-2.110asp.
Все как раз однозначно. PPTP-command работал корректно с версиями pptp <1.5.0 и initscripts >8.1
С более новыми глючит. Об этом много раз писалось по форуму.

Не берите в голову: ЧИтайте форум, где подробно об этом написано, настраивайте /etc/sysconfig/-network-scripts/ifcfg-pptpX. Начальные настройки можете сделать с system-config-pptp, но не вздумайте там прописывать pppoptions.

ИМХО все равно: туннель здесь лишний. Только если чобы скрыть всое присутсвие в wan. Но и это не особо удасться.
Re: Организация VPN. Запутался. 20.07.2007 13:13alexander_nur Спасибо за ответы.
В общем, кое-как настроил, чтобы запуск осуществялся через pppd call имя_туннеля.
Однако после этого еще приходилось добавлять маршрут
route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.4
либо
route add -net 192.168.1.0 netmask 255.255.255.0 dev ppp0

Т.е. во внешней сети адреса вида 192.168.1.0. Адрес сервера pptpd в этой сети 192.168.1.4

Но, спустя час, чуть больше, связь обрывалась. И не факт, что ее можно было вообще установить даже после перезагрузки линукса. Ошибки разные сыпались при коннекте.

В общем, как Вы и советовали я настроил через /etc/sysconfig/network-scripts/ifcfg-pptpX:

Привожу настройку pptp-клиента (pptp-1.7.0.-2.110asp) для сервера pptpd (pptpd-1.2.3-1.110asp) без использования pptp-command (как сказали криво) и утилиты system-config-pptp (что исключает необходимость установки иксов).
pptp и pptpd этих версий штатно входят в дистрибутив ASP11.

Итак, что делать:

pptp В ASP11:

1. Нстройка аутентификации.

---/etc/ppp/chap-secrets


## <begin-s-c-pptp>
"login" "IP_Server" "password"
"login" * "password"
## </begin-s-c-pptp>
----------

2. Настройка pptp0

---/etc/sysconfig/network-scripts/ifcfg-pptp0
PEERDNS="no"
DEVICE="pptp0"
ONBOOT="yes" //Активировать при запуске linux
USERCTL="yes"
PERSIST="yes"
DEBUG="yes"
DEFROUTE="yes"
PPPOPTIONS="mppe required"
MRU=""
MTU=""
IDLETIMEOUT=""
VPN_HOST="IP_Server" //адрес pptpd
VPN_USER="login" //логин на pptpd
VPN_PASS="password" //пароль на pptpd.
ROUTES=""
TYPE="VPN"

Остальное по умолчанию.

Запустить pptp0 - ifup pptp0
Отключить pptp0 - ifdown pptp0

Примечание:

Аутентификацию настраивать только так, как в п.1
login pptp password * - не работает. При проверке после коннекта выдает ошибки.
Кавычки в /etc/ppp/chap-secrets - обязательны.
VPN_PASS="password" - можно не указывать думаю (я и без этой строки пробовал - работает), т.к. пароль берется из /etc/ppp/chap-secrets
Вопрос такой будет: опция PERSIST="yes" - это говорит о том, что при обрыве связи будут попытки соединения?

Вот думаю и все. Надеюсь, что будет работать у всех без вопросов, потому как таких новичков в линуксе вроде меня - пруд пруди.
Re: Организация VPN. Запутался. 20.07.2007 16:20BigAndy Ахха. Все правильно
Роутинг можно править там же в файле route-pptpX. Нотация совпадает с iproute2 и своя там есть какая-то.
Re: Организация VPN. Запутался. 26.07.2007 07:10alexander_nur Теперь следующая проблема.

Конфигурация сети:

Сеть 1: 10.100.101.0
На 10.100.101.4 исходящее pptp
У всех пользователей 10.100.101.0 в качестве шлюза указан 10.100.101.4

Сеть 2: 10.100.100.0
pptpd поднят на 10.100.100.4
У всех пользователей 10.100.100.0 в качестве шлюза указан 10.100.100.4
Во "внешней" сети для pptp устанавливается адрес 10.100.100.5

Соединяются через стороннюю сеть 10.20.213.0.

С самим VPN соединением проблем никаких. После установки соединения все пингуется отлично между pptpd и pptp (от себя замечу, что все на ура и со вторым pptp /третьей сеткой/, оба pptp пингуют себя через pptpd). Но стоит запросить из какой-либо внутренней сети IP-адрес другой внутренней сети, как идут проблемы.
Проблемы идут ровно до того момента, пока на сервере pptpd (10.100.100.4) не прописать следующий маршрут:
route add -net 10.100.101.0 netmask 255.255.255.0 dev ppp0

После этого все работает как часы. Если же прописывать на машине c pptpd этот маршрут до того, как присоединится pptp-клиент, то начинается ругань.
Вопрос в следующем: как pptpd-машине узнать, что присоединился pptp-клиент?
Алгоритм вроде следующего:

label:
ping pptp //где pptp - адрес удаленной машины, которой присвоился IP от pptpd, что говорит о том, что pptp-соединение состоялось.
if true then route add ...
else goto label

Что-то вроде этого...

И еще вопрос. Если на удаленном pptp назвать соединение pptp0, то на pptpd ему присвоится имя интерфейса ppp0, а если на клиенте - pptp1, то pptpd присвоит имя интерфейсу ppp1? Просто два клиента будут соединяться к pptpd, и чтобы правильно написать маршруты, нужно быть уверенным, что pppX - это имя интерфейса соответствующей подсети.
Re: Организация VPN. Запутался. 26.07.2007 10:16BigAndy Во-первых, ничего не понятно.
Во-вторых: как вы собираетесь раздавать инет без NAT и/или без настройки маршрутизации на самом vpn-хосте?
pptp - Это всего лишь протокол Точка-Точка.

>На 10.100.101.4 исходящее pptp
Это что такое? "Исходящее"?

>Вопрос в следующем: как pptpd-машине узнать, что присоединился pptp-клиент?
cat /var/log/pppd.log

>label:
А это что за алгоритм? Что за язык? Васик что ли?

>else goto label
А вот этого никогда никому не показывайте : )
Ни на одном языке программирования Катается от смеха


А чем вам нотация iproute2 и /etc/..../route-<your_interface> не подходит? Ну, или в конце концов, прописать роутинг в rc.local.local, хоть это немного кривовато с точки зрения объектной ориентированности и модульности?
Re: Организация VPN. Запутался. 26.07.2007 13:38alexander_nur Инет не раздаем. Просто соединяем свои подсети через чужую локальную сеть.
Маршрутизация включена как на pptpd-хосте, так и на pptp.

>Это что такое? "Исходящее"?
Это адрес машины, из которой исходит pptp соединение. Когда эта машина подключается к pptpd, ей присваивается IP 10.100.100.5.

>А это что за алгоритм? Что за язык? Васик что ли?
Никакой это не _язык_. Просто я описал _алгоритм_, как я сам вижу решение проблемы.
Программированием (pascal) я занимался давно, и все описанное - следствие того, что вспомнилось, для описания _алгоритма_.

>А чем вам нотация iproute2 и /etc/..../route-<your_interface> не подходит?

А у меня нет в sysconfig таких файлов - route-pptp. Создавать самому? А где можно посомтреть пример такого файла? И в каком случае он исполняется?

Главный вопрос в том, что невозможно прописать маршрут через несуществующее устройство. Приходится ВРУЧНУЮ прописывать маршрут на pptpd-хосте после того как присоединится клиент pptp. А хотелось бы, чтобы это было автоматически.
Re: Организация VPN. Запутался. 27.07.2007 00:14BigAndy >А у меня нет в sysconfig таких файлов - route-pptp. Создавать самому? А где можно посомтреть пример такого файла? И в каком случае он исполняется?
Этов в /etc/..../network-scripts. Если нет, прописать. исполняется при создании соответсвующего интерфейса. Там же лежит скрипт, которым он подымается.
Синтаксис route, iproute2 и свой. Если установлена какая-либо сетевая карта, можно подсмотреть, но лучше самому отредактировать.
Re: Организация VPN. Запутался. 31.07.2007 09:36kird www.openvpn.net - и никакого гимморою...
Re: Организация VPN. Запутался. 31.07.2007 12:45alexander_nur В общем, маршруты будем пока руками вбивать.

Трудности с iptables.
Если включить файервол, то pptp не может соединиться с pptpd. На pptpd iptables выключен.

Вношу правило на машине с pptp:
iptables -A OUTPUT -p TCP --dport 1723 -j ACCEPT
iptables -A OUTPUT -p gre -j ACCEPT

Ошибок при вводе не возникает. Но соединения установить не удается. Если отключить iptables, все ок.
Re: Организация VPN. Запутался. 31.07.2007 12:54wusup ---
sudo /sbin/iptables -A INPUT -p tcp --sport 1723 -j ACCEPT
sudo /sbin/iptables -A INPUT -p gre -j ACCEPT
---
Re: Организация VPN. Запутался. 31.07.2007 13:57alexander_nur Не помогло.

Jul 31 15:29:43 srvuto01 ifup-pptp: vpn: pppd started for pptp0 to 10.50.213.20
Jul 31 15:29:43 srvuto01 pptp[13021]: anon log[main:pptp.c:267]: The synchronous pptp option is NOT activated
Jul 31 15:29:43 srvuto01 pptp[13024]: anon log[ctrlp_rep:pptp_ctrl.c:251]: Sent control packet type is 1 'Start-Control-Connection-Request'
Jul 31 15:29:43 srvuto01 pptp[13024]: anon log[ctrlp_disp:pptp_ctrl.c:738]: Received Start Control Connection Reply
Jul 31 15:29:43 srvuto01 pptp[13024]: anon log[ctrlp_disp:pptp_ctrl.c:772]: Client connection established.
Jul 31 15:29:44 srvuto01 pptp[13024]: anon log[ctrlp_rep:pptp_ctrl.c:251]: Sent control packet type is 7 'Outgoing-Call-Request'
Jul 31 15:29:44 srvuto01 pptp[13024]: anon log[ctrlp_disp:pptp_ctrl.c:857]: Received Outgoing Call Reply.
Jul 31 15:29:44 srvuto01 pptp[13024]: anon log[ctrlp_disp:pptp_ctrl.c:896]: Outgoing call established (call ID 0, peer's call ID 8448).
Jul 31 15:29:44 srvuto01 pptp[13024]: anon log[pptp_read_some:pptp_ctrl.c:543]: read returned zero, peer has closed
Jul 31 15:29:44 srvuto01 pptp[13024]: anon log[callmgr_main:pptp_callmgr.c:255]: Closing connection (shutdown)
Jul 31 15:29:44 srvuto01 pptp[13024]: anon log[ctrlp_rep:pptp_ctrl.c:251]: Sent control packet type is 12 'Call-Clear-Request'
Jul 31 15:29:44 srvuto01 pptp[13024]: anon log[pptp_read_some:pptp_ctrl.c:543]: read returned zero, peer has closed
Jul 31 15:29:44 srvuto01 pptp[13024]: anon log[call_callback:pptp_callmgr.c:78]: Closing connection (call state)
Jul 31 15:29:45 srvuto01 ifup-pptp: pptp: pppd failed to start

ЗЫ: Методом научного тыка получилось.

modprobe iptable_nat
modprobe ip_nat_pptp

Ну и наверное плюс правила, введенные в iptables
Re: Организация VPN. Запутался. 08.08.2007 22:06alexander_nur В общем, доперло касаемо поднятия маршрутов на машине с pptpd после присоединения к ней pptp-клиентов.

Прописал необходимые маршруты в /etc/ppp/ip-up

В самый конец (перед exit 0) добавил
route add -net x.x.x.0 netmask 255.255.255.0 gw IP1
route add -net x.x.y.0 netmask 255.255.255.0 gw IP2

Дело в том, что IP1 и IP2 становятся видны ТОЛЬКО после того, как клиенты pptp соединятся с pptpd (эти ИПы им присваивает pptpd).
А если попробовать указать в качестве шлюза невидимый в реальном времени IP1 или IP2, то route ругается.

Хотя, получилось просто, но криво - если pptp1 соединился получив IP1, то на исполнение идут оба маршрута, а т.к. IP2 еще не виден, то на второй маршрут будет ругань. В принципе не страшно, т.к. после присоединения pptp2 скрипт /etc/ppp/ip-up будет исполняться вновь
RSS-материал