URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 87864
[ Назад ]

Исходное сообщение
"OpenVPN: привязка ответных пакетов сервера к интерфейсу"

Отправлено ws , 15-Янв-10 15:52 
Помогите разобраться.

Сервер, на котором у меня установлен OpenVPN 2.1 (UDP), имеет несколько сетевых интерфейсов. OpenVPN запускается без жесткой привязке к интерфейсу (нет комады local).

Когда я подключаюсь клиентом на интерфейс смотрящий в сторону клиента, то проблем нет - соединение устанавливается.
Если иницировать подключение клиента к интерфейсу за сервером, то ответные пакеты сервер отсылает от интерфейса смотрящего на клиента. Клиент же сидит за натом, соответственно пакеты не доходят до него. Команда bind на сервере не помогает - сервер по прежнему шлет пакеты с того же интерфейса.

Как можно указать OpenVpn-серверу отвечать клиенту с IP-адреса на который пришел пакет от клиента?
Запуск отдельных OpenVPN-серверов для каждого интерфейса решает эту проблему, но тогда для каждого из них нужна отдельная сетка в директиве server, что меня не устраивает.

server:
port 1194
bind
proto udp
dev tun0
tun-mtu 1500
mssfix
comp-lzo
server 10.10.0.0 255.255.255.0
auth md5
cipher BF-CBC
ca keys/ca.crt
cert keys/server.crt
key keys/server.key
dh keys/dh1024.pem
tls-server
tls-auth keys/ta.key 0
tls-timeout 120

client:
client
remote ip-vpn 1194 udp
resolv-retry infinite
dev tun
tun-mtu 1500
mssfix
comp-lzo
auth MD5
cipher BF-CBC
tls-client
tls-auth keys/ta.key 1
ns-cert-type server
pkcs12 keys/client.p12


Еще ворос: возможно ли поднять OpenVPN-сервер на одном демоне с одновременной поддержкой протокола UDP и TCP? Мне нужно, что бы было одно общее динамически назначаемое сетевое пространство (команда server) без разбиений на подсетки.


Содержание

Сообщения в этом обсуждении
"OpenVPN: привязка ответных пакетов сервера к интерфейсу"
Отправлено ALex_hha , 15-Янв-10 16:38 
> Как можно указать OpenVpn-серверу отвечать клиенту с IP-адреса на который пришел пакет от клиента?

я решил это с помощью явной привязки к нужным интерфейсам.

В 2.1 вроде для этих целей появилась опция multihome кажется


"OpenVPN: привязка ответных пакетов сервера к интерфейсу"
Отправлено ws , 15-Янв-10 17:28 
>> Как можно указать OpenVpn-серверу отвечать клиенту с IP-адреса на который пришел пакет от клиента?
>
>я решил это с помощью явной привязки к нужным интерфейсам.

да это работает. Но не совсем то что нужно. Т.к. приходится дробить сетку на подсетки для каждого интерфейса...

>
>В 2.1 вроде для этих целей появилась опция multihome кажется

Вроде то, что нужно, но к сожалению она работает только под Linux. А у меня FreeBSD.


"OpenVPN: привязка ответных пакетов сервера к интерфейсу"
Отправлено tux , 15-Янв-10 17:59 
>[оверквотинг удален]
>>я решил это с помощью явной привязки к нужным интерфейсам.
>
>да это работает. Но не совсем то что нужно. Т.к. приходится дробить
>сетку на подсетки для каждого интерфейса...
>
>>
>>В 2.1 вроде для этих целей появилась опция multihome кажется
>
>Вроде то, что нужно, но к сожалению она работает только под Linux.
>А у меня FreeBSD.

не знаю как это сделать во фре но в лине это можн ореализовтаь через ip route
тоесть просто создаеться 2  доп таблицы маршрутизации(можно и одну правда)
и прописываються правила что с сорцовым адресом шлбюза в пакете таком то идти через такую таблицу, с сорцовым адресом шлюхза в пакете идти через другую таблицу, ну и соответственно пропистаь в таблицах дефотники и пути до нужных сетей
ip rule add from $IP_INET1 table Е1
ip rule add from $IP_INET2 table Е2
ip route add default via $GW_INET1 table Е1
ip route add default via $GW_INET2 table Е2
(ну и соотвественно маршруты до нужных сетей)


"OpenVPN: привязка ответных пакетов сервера к интерфейсу"
Отправлено Pahanivo , 15-Янв-10 18:41 
попробуй fwd (форвард) в ipfw


"OpenVPN: привязка ответных пакетов сервера к интерфейсу"
Отправлено ws , 15-Янв-10 18:58 
>[оверквотинг удален]
>тоесть просто создаеться 2  доп таблицы маршрутизации(можно и одну правда)
>и прописываються правила что с сорцовым адресом шлбюза в пакете таком то
>идти через такую таблицу, с сорцовым адресом шлюхза в пакете идти
>через другую таблицу, ну и соответственно пропистаь в таблицах дефотники и
>пути до нужных сетей
>ip rule add from $IP_INET1 table Е1
>ip rule add from $IP_INET2 table Е2
>ip route add default via $GW_INET1 table Е1
>ip route add default via $GW_INET2 table Е2
>(ну и соотвественно маршруты до нужных сетей)

это работает в статике. А если не известно с какого ip клиент заходит.

Такое в BSD можно сделать через route-to в PF.


"OpenVPN: привязка ответных пакетов сервера к интерфейсу"
Отправлено ALex_hha , 15-Янв-10 21:25 
>ip rule add from $IP_INET1 table Е1
>ip rule add from $IP_INET2 table Е2
>ip route add default via $GW_INET1 table Е1
>ip route add default via $GW_INET2 table Е2
>(ну и соотвественно маршруты до нужных сетей)

не будет это работать, уже проверял. По крайней мере в 2.1-rc17 не работало, правда тогда я не использовал multihome, может уже что поменялось в 2.1


"OpenVPN: привязка ответных пакетов сервера к интерфейсу"
Отправлено tux , 16-Янв-10 00:14 
>>ip rule add from $IP_INET1 table Е1
>>ip rule add from $IP_INET2 table Е2
>>ip route add default via $GW_INET1 table Е1
>>ip route add default via $GW_INET2 table Е2
>>(ну и соотвественно маршруты до нужных сетей)
>
>не будет это работать, уже проверял. По крайней мере в 2.1-rc17 не
>работало, правда тогда я не использовал multihome, может уже что поменялось
>в 2.1

$IP_INET1
$IP_INET2 это ip вашего сервера у разных провайдеров!
вам побарабану с какого ипа стучиться клиент!
$GW_INET1
$GW_INET2 это соответственно дефолтные маршруты для каждого провайдера
не работает? в openvpn udp используеться?



"OpenVPN: привязка ответных пакетов сервера к интерфейсу"
Отправлено ALex_hha , 16-Янв-10 15:00 
>[оверквотинг удален]
>>не будет это работать, уже проверял. По крайней мере в 2.1-rc17 не
>>работало, правда тогда я не использовал multihome, может уже что поменялось
>>в 2.1
>
>$IP_INET1
>$IP_INET2 это ip вашего сервера у разных провайдеров!
>вам побарабану с какого ипа стучиться клиент!
>$GW_INET1
>$GW_INET2 это соответственно дефолтные маршруты для каждого провайдера
>не работает?

НЕ РАБОТАЕТ!!!

> в openvpn udp используеться?

да, но проверял и на tcp


"OpenVPN: привязка ответных пакетов сервера к интерфейсу"
Отправлено ALex_hha , 16-Янв-10 15:03 
>[оверквотинг удален]
>>вам побарабану с какого ипа стучиться клиент!
>>$GW_INET1
>>$GW_INET2 это соответственно дефолтные маршруты для каждого провайдера
>>не работает?
>
>НЕ РАБОТАЕТ!!!
>
>> в openvpn udp используеться?
>
>да, но проверял и на tcp

Если интересно http://sourceforge.net/mailarchive/forum.php?thread_name=E1M...

тут я описывал эту проблему


"OpenVPN: привязка ответных пакетов сервера к интерфейсу"
Отправлено ALex_hha , 22-Ноя-10 12:39 
Проблема решается с помощью ключа multihome



"OpenVPN: привязка ответных пакетов сервера к интерфейсу"
Отправлено mahn0 , 16-Фев-11 00:28 
> Проблема решается с помощью ключа multihome

Во freebsd не решается, ибо multihome не работает. Для себя нашел единственное решение в запуске нескольких серверов. Пара заметок на эту тему: http://www.mahno.su/freebsd/network/openvpn-tcp-udp


"OpenVPN: привязка ответных пакетов сервера к интерфейсу"
Отправлено ws , 16-Фев-11 02:08 
>> Проблема решается с помощью ключа multihome
> Во freebsd не решается, ибо multihome не работает. Для себя нашел единственное
> решение в запуске нескольких серверов. Пара заметок на эту тему: http://www.mahno.su/freebsd/network/openvpn-tcp-udp

И все таки не решен вопрос с:
>да это работает. Но не совсем то что нужно. Т.к. приходится дробить сетку на подсетки для каждого интерфейса...

http://www.opennet.me/openforum/vsluhforumID1/87864.html#2

Внимательно читайте обсуждение - ваше решение уже давно найдено...


"OpenVPN: привязка ответных пакетов сервера к интерфейсу"
Отправлено mahn0 , 16-Фев-11 08:45 
>>> Проблема решается с помощью ключа multihome
>> Во freebsd не решается, ибо multihome не работает. Для себя нашел единственное
>> решение в запуске нескольких серверов. Пара заметок на эту тему: http://www.mahno.su/freebsd/network/openvpn-tcp-udp
> И все таки не решен вопрос с:
>>да это работает. Но не совсем то что нужно. Т.к. приходится дробить сетку на подсетки для каждого интерфейса...

Хм, а в чем необходимость именно одного общего пространства? У меня подсети для разных протоколов разные, но клиенты видят друг друга между ними.


"OpenVPN: привязка ответных пакетов сервера к интерфейсу"
Отправлено ws , 16-Фев-11 11:37 
> Хм, а в чем необходимость именно одного общего пространства? У меня подсети
> для разных протоколов разные, но клиенты видят друг друга между ними.

Например:
- при большом количестве клиентов тяжело балансировать нагрузку между демонами - может возникнуть ситуация что количество адресов на одном из них исчерпается при свободных на другом. Брать с запасом не вариант - присутствует ограничение.
- отсутствия дополнительной записей о маршрутизации этих подсетей у клиента (сервер openvpn не выступает шлюзом по умолчанию)


"OpenVPN: привязка ответных пакетов сервера к интерфейсу"
Отправлено mahn0 , 16-Фев-11 11:49 
>> Хм, а в чем необходимость именно одного общего пространства? У меня подсети
>> для разных протоколов разные, но клиенты видят друг друга между ними.
> Например:
> - при большом количестве клиентов тяжело балансировать нагрузку между демонами - может
> возникнуть ситуация что количество адресов на одном из них исчерпается при
> свободных на другом. Брать с запасом не вариант - присутствует ограничение.
> - отсутствия дополнительной записей о маршрутизации этих подсетей у клиента (сервер openvpn
> не выступает шлюзом по умолчанию)

При большом кол-ве подключений - согласен. Я делал схему с резервированием, чтобы один и тот же клиент мог подключаться к серверу по разным протоколам без изменения конфигов. Т.е. адреса для каждого клиента жестко забиты в каждом, из запущенных серверов.

Единственное, что прикручивал сверху - в зависимости от условий, внешним скриптом динамически закрывал фаэрволом порт того или иного сервера от определенных внешних IP адресов, когда не нужно, чтобы к нему подключались клиенты.