LINUX.ORG.RU
ФорумAdmin

OpenVPN сложная структура


0

0

Всем привет!
Вобщем идея такая, нужно объединить по vpn 8 локальных сетей + пару клиентов.
Для раализации я решил использовать шлюзы FreeBSD и OpenVPN:


192.168.40.0/24-server->internet<-client-192.168.0.0/24(+ еще 7 таких же подсетей адресное пространство их не пересекается)

server и client имеют два сетевых интерфейса

Проблема такая если я с клиента пингую 192.168.40.12 есть ответы.
а если из 192.168.0.0/24 то нет.

а нужно что бы комп 192.168.0.12 мог видеть 192.168.40.12 и наоборот


1) server
ee /usr/local/etc/openvpn/openvpn.conf
# Specify device
dev tun

# Server and client IP and Pool
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
ifconfig 10.8.0.1 255.255.255.0

log-append /var/log/openvpn.log

# Certificates for VPN Authentication
ca /usr/local/etc/openvpn/easy-rsa/keys/ca.crt
cert /usr/local/etc/openvpn/easy-rsa/keys/server.crt
key /usr/local/etc/openvpn/easy-rsa/keys/server.key
dh /usr/local/etc/openvpn/easy-rsa/keys/dh1024.pem

# Routes to push to the client
push "route 192.168.40.0 255.255.255.0"
push "route 192.168.0.0 255.255.255.0 10.8.0.6"

# Use compression on the VPN link
comp-lzo

# Make the link more resistent to connection failures keepalive 10 60
ping-timer-rem
persist-tun
persist-key
ping 15
# Run OpenVPN as a daemon and drop privileges to user/group nobody user nobody
group nobody
daemon

2) client
dev tun
proto udp
remote 213.85.***.**
port 1194
log-append /var/log/openvpn.log
client
# tls-client
comp-lzo
# ns-cert-type server
ca /usr/local/etc/openvpn/easy-rsa/keys/ca.crt
cert /usr/local/etc/openvpn/easy-rsa/keys/test.crt
key /usr/local/etc/openvpn/easy-rsa/keys/test.key
push "route 192.168.40.0 255.255.255.0 10.8.0.1"
user nobody
group nobody
ping 15
ping-restart 45
ping-timer-rem
persist-key
persist-tun
verb 0


Может ли вообще OpenVPN объединить множество локальных сетей, помогите реально не пойму что делать, тупо погуглить не получается дока в основном или множество клиентов один сервер или впн между двумя локальными сетями.

osipen
() автор топика
Ответ на: комментарий от osipen

маршруты посмотри на удаленных шлюзах.
я думаю, что их просто нет

chocholl ★★
()

Более отвратительного описания проблемы давно не видел.

>Проблема такая если я с клиента пингую 192.168.40.12 есть ответы. а если из 192.168.0.0/24 то нет.

У тебя выше написано, что 192.168.0.0/24 и еще 7 сетей являются клиентами. Опиши с чего что ты пингуешь, пожалуйста.

>а нужно что бы комп 192.168.0.12 мог видеть 192.168.40.12 и наоборот

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

Не знаю как в случае линукса, но твои команды route живут только для openvpn на виндах. Соответственно, на каждом клиенте линукс или чего-то еще должен быть маршрут к шлюзу.

Т.е. если шлюз смотрит в сетку _физическим_интерфейсом_ с адресом (для простоты возьмем такую метрику) 172.16.128.1, а локалка, подключенная через инет, имеет адрес 192.168.10.0/24, то у тебя на рабочих клиентах в сети должно быть написано что-то типа

route add -net 192.168.10.0 netmask 255.255.255.0 dev eth0 gw 172.16.128.1

А на серваке уже

route add -net 192.168.10.0 netmask 255.255.255.0 dev tap0

Для второй сети все то же самое.

P.S. Один маленький момент - я строил конфигурацию под Fedora 8 и не через мосты, а через NAT. Соответственно для каждой подсетки другая сеть конфигурировалась так же, как если бы она была "интернетом".

jackill ★★★★★
()
Ответ на: комментарий от jackill

Буду стараться ясне выражать свои мысли спасибо. Давайте пока отбросим то что нужно подключать еще 7 локальных сетей. Возьмем то что есть счас:
  Внешний интерфейс		   Внешний интерфейс	

   213.181.00.00                    85.101.11.111
  +--------------+                 +-------------+
  |   server  	 |     Internet	   |  client*    |
  |              |<->-----------<->|             |
  | FreeBSD, NAT |                 | FreeBSD NAT |
  |              |                 |             |
  +-----+--------+                 +-------+-----+
        ^      ^                     ^     ^
        |      |         VPN         |     |
        |      +---------------------+     |
        |              10.8.0.0            |
  +-----+---+				+--+------+
  |Локальная|__192.168.40.12		|Локальная|__192.168.0.12
  |   сеть  |				|   сеть  |
  +---------+				+---------+
    192.168.40.0			192.168.0.0

Я понимаю не слишком удачное название для шлюза клиент))) На данном этапе только находясь на client* я могу пропинговать комп 192.168.40.12. 
Следовательно туда значит маршрут проложен, просто загвоздка в том что маршрут точно такой же и на client*. Но в результате должно получится 
ком 192.168.40.12 видит 192.168.0.12 и на оборот. В перспективе в место 2 объединенных сетей должно быть 8 объединенных сетей.
В линуксовом нате не рублю, у меня так:
Кусок из Packet Filter:

vpn_if  = "tun0"
vpn_network="{10.8.0.0/24}"
nat on $ext_if from $vpn_network to any -> $ext_if
pass in on $ext_if proto udp from any to port 1194 keep state

osipen
() автор топика
Ответ на: комментарий от osipen

а вы уверенны, что надо шифровать трафик между сетями ?

если нет, то проще и правильнее поднять простые тунели(ip-ip,gre,etc) между FreeBSD и прописать маршруты..

а по vpn подключать именно(и только) клиентов у которых нет постоянного ip-адреса

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

Да шифрование нужно, иначе эта затея не имеет смысла, в одной из подсетей будет сервер БД почти не защищенный, а там конфиденциальная инфа о стоматологических клиентах.

osipen
() автор топика
Ответ на: комментарий от MiracleMan

Извините за наглость но можно не много по точнее про проблему с маршрутизацией, где проблема в NATe или на OpenVPN.

osipen
() автор топика
Ответ на: комментарий от osipen

Я полагаю, что проблема в том, что ты не совсем понимаешь, что ты желаешь настроить..

Почитай тут, подумай, выбери - http://www.shorewall.net/OPENVPN.html
какой тип VPN соединения тебе нужно настроить.

Затем - ifconfig 10.8.0.1 255.255.255.0
Ты желаешь настроить тунели в IP mode или Bridge mode? - http://www.openmaniak.com/openvpn_tutorial.php

# IP ADDRESSING
# IP mode example:
# Server IP: 10.8.0.1 ; Client IP: 10.8.0.2
ifconfig 10.8.0.1 10.8.0.2
# Bridge mode example
# Server IP: 10.8.0.1
ifconfig 10.8.0.1 255.255.255.0
# Use bridged or routed settings but not
# both
# Client and Server must use the same
# tunnel mode

Далее -
push "route 192.168.40.0 255.255.255.0" - ну, тут всё ясно.
push "route 192.168.0.0 255.255.255.0 10.8.0.6" - а вот этим ты что клиенту делегируешь?

Тоже самое на клиентской стороне - push "route 192.168.40.0 255.255.255.0 10.8.0.1"

Подумай над этим. И внимательно прочитай следующее howto с примерами и комментариями к опциям настройки - http://openvpn.net/index.php/documentation/howto.html#config

Да, кстати, если хочешь, чтоб клиенты видели друг друга, то не забывай об опции - client-to-client

Далее, накидаю ещё полезной информации на почитать -

http://www.section6.net/wiki/index.php/Setting_up_OpenVPN_in_FreeBSD
http://www.bsdguides.org/guides/freebsd/security/openvpn2/print
http://blog.innerewut.de/2005/07/04/openvpn-2-0-on-openbsd


MiracleMan ★★★★★
()
Ответ на: комментарий от osipen

ИМХО, NAT здесь излишен. В условии - нумерация подсетей не пересекается. Все, что нужно - правильно настроить маршрутизацию между серверами подсетей. У самого была практически аналогичная ситуация, за исключением того, что с каждого сервера устанавливалось несколько OpenVPN соединений с другими серверами, дабы по возможности избежать транзитного трафика (ибо пров его за деньги продавал). Поставил кваггу, настроил ospfd... работает...

Совет: для начала настрой маршрутизацию между серверами. Клиентами займешься, когда сервера будут знать, где какая сеть (в этом поможет ospfd). А дальше настраивай маршруты на клиентских машинах. Для меньшего геморроя рекомендую сервер каждой из подсетей сделать "шлюзом по-умолчанию". Так избежишь множественного набирания "route add -p ...." у клиентов в случае расширения сети.

X-treme
()
Ответ на: комментарий от MiracleMan

хотя, это для linux.. уж лучше сразу ipsec использовать в доступных реализациях.

MiracleMan ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.