Помогите разобраться.Сервер, на котором у меня установлен 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 120client:
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-серверу отвечать клиенту с IP-адреса на который пришел пакет от клиента?я решил это с помощью явной привязки к нужным интерфейсам.
В 2.1 вроде для этих целей появилась опция multihome кажется
>> Как можно указать OpenVpn-серверу отвечать клиенту с IP-адреса на который пришел пакет от клиента?
>
>я решил это с помощью явной привязки к нужным интерфейсам.да это работает. Но не совсем то что нужно. Т.к. приходится дробить сетку на подсетки для каждого интерфейса...
>
>В 2.1 вроде для этих целей появилась опция multihome кажетсяВроде то, что нужно, но к сожалению она работает только под Linux. А у меня FreeBSD.
>[оверквотинг удален]
>>я решил это с помощью явной привязки к нужным интерфейсам.
>
>да это работает. Но не совсем то что нужно. Т.к. приходится дробить
>сетку на подсетки для каждого интерфейса...
>
>>
>>В 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
(ну и соотвественно маршруты до нужных сетей)
попробуй fwd (форвард) в ipfw
>[оверквотинг удален]
>тоесть просто создаеться 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.
>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 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 используеться?
>[оверквотинг удален]
>>не будет это работать, уже проверял. По крайней мере в 2.1-rc17 не
>>работало, правда тогда я не использовал multihome, может уже что поменялось
>>в 2.1
>
>$IP_INET1
>$IP_INET2 это ip вашего сервера у разных провайдеров!
>вам побарабану с какого ипа стучиться клиент!
>$GW_INET1
>$GW_INET2 это соответственно дефолтные маршруты для каждого провайдера
>не работает?НЕ РАБОТАЕТ!!!
> в openvpn udp используеться?
да, но проверял и на tcp
>[оверквотинг удален]
>>вам побарабану с какого ипа стучиться клиент!
>>$GW_INET1
>>$GW_INET2 это соответственно дефолтные маршруты для каждого провайдера
>>не работает?
>
>НЕ РАБОТАЕТ!!!
>
>> в openvpn udp используеться?
>
>да, но проверял и на tcpЕсли интересно http://sourceforge.net/mailarchive/forum.php?thread_name=E1M...
тут я описывал эту проблему
Проблема решается с помощью ключа multihome
> Проблема решается с помощью ключа multihomeВо freebsd не решается, ибо multihome не работает. Для себя нашел единственное решение в запуске нескольких серверов. Пара заметок на эту тему: http://www.mahno.su/freebsd/network/openvpn-tcp-udp
>> Проблема решается с помощью ключа multihome
> Во freebsd не решается, ибо multihome не работает. Для себя нашел единственное
> решение в запуске нескольких серверов. Пара заметок на эту тему: http://www.mahno.su/freebsd/network/openvpn-tcp-udpИ все таки не решен вопрос с:
>да это работает. Но не совсем то что нужно. Т.к. приходится дробить сетку на подсетки для каждого интерфейса...http://www.opennet.me/openforum/vsluhforumID1/87864.html#2
Внимательно читайте обсуждение - ваше решение уже давно найдено...
>>> Проблема решается с помощью ключа multihome
>> Во freebsd не решается, ибо multihome не работает. Для себя нашел единственное
>> решение в запуске нескольких серверов. Пара заметок на эту тему: http://www.mahno.su/freebsd/network/openvpn-tcp-udp
> И все таки не решен вопрос с:
>>да это работает. Но не совсем то что нужно. Т.к. приходится дробить сетку на подсетки для каждого интерфейса...Хм, а в чем необходимость именно одного общего пространства? У меня подсети для разных протоколов разные, но клиенты видят друг друга между ними.
> Хм, а в чем необходимость именно одного общего пространства? У меня подсети
> для разных протоколов разные, но клиенты видят друг друга между ними.Например:
- при большом количестве клиентов тяжело балансировать нагрузку между демонами - может возникнуть ситуация что количество адресов на одном из них исчерпается при свободных на другом. Брать с запасом не вариант - присутствует ограничение.
- отсутствия дополнительной записей о маршрутизации этих подсетей у клиента (сервер openvpn не выступает шлюзом по умолчанию)
>> Хм, а в чем необходимость именно одного общего пространства? У меня подсети
>> для разных протоколов разные, но клиенты видят друг друга между ними.
> Например:
> - при большом количестве клиентов тяжело балансировать нагрузку между демонами - может
> возникнуть ситуация что количество адресов на одном из них исчерпается при
> свободных на другом. Брать с запасом не вариант - присутствует ограничение.
> - отсутствия дополнительной записей о маршрутизации этих подсетей у клиента (сервер openvpn
> не выступает шлюзом по умолчанию)При большом кол-ве подключений - согласен. Я делал схему с резервированием, чтобы один и тот же клиент мог подключаться к серверу по разным протоколам без изменения конфигов. Т.е. адреса для каждого клиента жестко забиты в каждом, из запущенных серверов.
Единственное, что прикручивал сверху - в зависимости от условий, внешним скриптом динамически закрывал фаэрволом порт того или иного сервера от определенных внешних IP адресов, когда не нужно, чтобы к нему подключались клиенты.