headermask image

Notice: Undefined variable: t in /var/www/user97185/data/www/system-administrators.info/yandex-ad.php on line 15

Notice: Undefined variable: r in /var/www/user97185/data/www/system-administrators.info/yandex-ad.php on line 15
Рекомендую: Фриланс-биржа | Кэшбэк-сервис | Интернет-бухгалтерия

Настройка OpenVPN. Бридж между двумя локальными сетями

Задача стояла следующая – объеденить две локальные сети в разных городах в единую 192.168.0.0/24, так чтобы мог функционировать SMB. На обоих концах стояли ADSL-модемы D-Link в режиме роутера. С одной стороны (моего родного города) решено было установить сервер на базе Linux (CentOS), а в другом городе оставить компьютер на WinXP с двумя сетевыми картами, одна из которых подключена к локальной сети 192.168.0.0/24, а другая – к модему-роутеру, подсеть 192.168.1.0/24. IPSec в данном случае не подошел по нескольким причинам:

  • Ехать в другой город не хотелось, поэтому всю настройку там должен был сделать человек без особых навыков, пользуясь инструкцией и/или моими телефонными консультациями. Для настройки IPSec под WinXP надо основательно покопаться в дебрях mmc, и это могло вылиться в длительный сеанс секса по телефону. :)
  • IPSec не очень хорошо относится к NAT, и предугадывать, как он будет ходить через две Д-Линковские железяки было трудно.

В итоге решено было остановиться на OpenVPN. Вот некоторые плюсы этого решения:

  • Простая настройка. И под Windows в том числе. Все действия на уровне “setup.exe -> next -> next-> finish, скопировать конфиги и ключ с сертификатами, объеденить подключения в бридж, нажать на Connect и наслаждаться”
  • Бегать он может через чего угодно – UDP, TCP и даже проходить через прокси. Это вам не GRE, который наверняка большинство провайдеров зарежут нафиг.
  • Встроенная и безгеморройная поддержка бриджей. Нам это необходимо для объеденения сетей.

Настройка сервера

Итак, начнем мы с сервера. Он имеет интерфейсы eth0 с подсетью 192.168.0.0/24, и ppp0 внешнй с неким известным внешним адресом. В качестве операционной системы на нем работает CentOS 5.1. Необходимые для OpenVPN пакеты можно найти в репозитории rpmforge.

После этого устанавливаем OpenVPN:

	#yum install openvpn

Сначала мы сгенерируем ключи и сертификаты для сервера и клиента. Для этого, кстати, у нас должен иметься OpenSSL. Проконтролируйте! Удобнее всего это делать с помощью скриптов easy-rsa, которые идут в составе OpenVPN. Найти их можно в /usr/share/doc/openvpn-2.0.9/easy-rsa/ и скопировать весь каталог easy-rsa куда-нибуть в укромное место. Потом стоит пометить там файлы build-ca, build-dh, build-key, build-key-server, clean-all, vars как исполнимые. Остального нам пока что не надо. При желании редактируем файл vars и подставляем туда свои параметры, которые будут использоваться при генерации ключей и сертификатов.

Приступаем к генерации. Выполняем:

	#. ./vars

 #./clean-all  #Осторожно, содержимое каталога keys исчезнет

 #./build-ca

Большинство значений скрипт автоматически подставит из файла vars, надо будет только указать Common Name.

Сгенерим ключ для сервера:

	#./build-key-server server

В качестве Common Name указываем server. Положительно отвечаем на вопросы “Sign the certificate? [y/n]” и “1 out of 1 certificate requests certified, commit? [y/n]“.

Теперь очередь ключа клиента:

	#./build-key client

В качестве Common Name указываем все тот же client. Помните, что если вы делаете ключи для нескольких клиентов, то все они должны иметь уникальные имена!

Осталось сгенерить файл с параметрами Diffie-Hellman.

	#./build-dh

Эта процедура достаточно длительная.

Итак, у нас в каталоге keys имеется множество файлов. Запомните, что все файлы *.key весьма секретны, так что хранить и передавать их надо со всей ответсвенностью.

Теперь надо скопировать файлы ca.crt, dh1024.pem, server.crt, server.key в каталог /etc/openvpn. На всякий случай, надо им так же поставить права в 400.

Начинаем писать конфиг-файл для сервера OpenVPN.

/etc/openvpn/sample.conf

port 1194  #Стандартный порт OpenVPN, можно было бы и не писать

proto udp  #Работать будем по протоколу UDP

dev tap0

comp-lzo

tun-mtu 1500

server-bridge 192.168.0.1 255.255.255.0 192.168.0.33 192.168.0.254  #Характерно для соеденинения в режиме бриджа.

ca /etc/openvpn/ca.crt

cert /etc/openvpn/server.crt

key /etc/openvpn/server.key

dh /etc/openvpn/dh1024.pem

persist-key

persist-tun

Итак, исходя из строчки server-bridge… сервер у нас будет иметь IP 192.168.0.1, маска подсети 255.255.255.0, а клиенты с 192.168.0.33 до 192.168.0.254.

Осталось разобраться непосредственно с бриджом. Для организации его нам понадобятся утилиты из пакета bridge-utils. Устанавливаем:

	#yum install bridge-utils

Я решил совместить стандартные скрипты bridge-start и bridge-stop из документации OpenVPN со стартовыми скриптами системы. В итоге получились два файла openvpn-startup и openvpn-shutdown, которые надо пометить исполнимыми и засунуть в каталог /etc/openvpn. Сборка OpenVPN в rpmforge будет их запускать автоматически из инит-скриптов. За остальные сборки не знаю. В любом случае, желающие могут придумать альтернативные методы достижения результата.

openvpn-startup

#!/bin/bash#################################

# Set up Ethernet bridge on Linux

# Requires: bridge-utils

#################################

# Define Bridge Interface

br="br0"

# Define list of TAP interfaces to be bridged,

# for example tap="tap0 tap1 tap2".

tap="tap0"

# Define physical ethernet interface to be bridged

# with TAP interface(s) above.

eth="eth0"                    #

eth_ip="192.168.0.1"          #

eth_netmask="255.255.255.0"   #Не забываем поменять эти параметры,

eth_broadcast="192.168.0.255" #если они у вас не соответсвуют!

for t in $tap; do

    openvpn --mktun --dev $t

done

brctl addbr $br

brctl addif $br $eth

for t in $tap; do

    brctl addif $br $t

done

for t in $tap; do

    ifconfig $t 0.0.0.0 promisc up

done

ifconfig $eth 0.0.0.0 promisc up

ifconfig $br $eth_ip netmask $eth_netmask broadcast $eth_broadcast

openvpn-shutdown

#!/bin/bash####################################

# Tear Down Ethernet bridge on Linux

####################################

# Define Bridge Interface

br="br0"

# Define list of TAP interfaces to be bridged together

tap="tap0"

ifconfig $br down

brctl delbr $br

for t in $tap; do

    openvpn --rmtun --dev $t

done

Осталось разрешить в брандмауэре весь обмен через интерфейсы tap0, br0 и открыть для входящих UDP-соеденений порт 1194 на внешнем интерфейсе.

Настройка windows-клиента

Сначала надо взять OpenVPN GUI for Windows с сайта http://openvpn.se. Скачать необходимо Installation Package (Both 32-bit and 64-bit TAP driver included). Установка проходит совершенно стандартно для этой операционной системы. В процессе будет установлен TAP-драйвер для виртуальной сетевой карты, так что надо ответить утвердительно на соотвествующий вопрос. После установки в списке сетевый подключений появится новое “Подключение по локальной сети”. Его лучше переименовать во что-то более понятное. Например, назвать его “openvpn”. Надо зайти в его “Свойства” – “Свойства TCP/IP” и убедится, что никакие адреса-DNS-ы не прописаны, и определяются автоматически. Теперь приступим к настройке непосредственно OpenVPN. Скопируем в папку C:\Program Files\OpenVPN\config (или куда вы там его поставили?) файлы ca.crt, client.crt, client.key. Там же создаем файл sample.conf следующего содержания.

sample.conf

client

proto udp

port 1194

remote my.openvpn.server.com #Внешний адрес вашего сервера

dev tap

nobind

tun-mtu 1500

ping 10

persist-key

persist-tun

ca ca.crt

cert client.crt

key client.key

comp-lzo

Далее заходим опять в сетевые подключения, выделяем с помощью клавиши Ctrl два соединения – openvpn и подключение по локальной сети. Из контекстного меню выбираем “Создать мост”. Обратите внимание на то, что в Win2k этого еще сделать нельзя. Все, теперь кликаем правой кнопкой на иконку OpenVPN GUI в трее, выбираем “Connect” и ждем. Должно все получиться :) Если что-либо пойдет не так, то открываем логи и думаем…

Автор: ?
Оригинал статьи здесь.

Похожие посты
  • Сервер OpenVPN на CentOS 5.2
  • Настройка Site-to-Site VPN между Forefront TMG и Cisco PIX/ASA, часть 2
  • Управление локальными групповыми политиками Windows Server 2008 Core Edition
  • Настройка Site-to-Site VPN между Forefront TMG и Cisco PIX/ASA, часть 1
  • Настройка iptables для доступа к LDAP серверу
  • Настройка Windows Server 2008 R2 в качестве RADIUS сервера для Cisco ASA, часть 4
  • Настройка уведомлений о событиях по электронной в TMG 2010
  • Настройка Windows Server 2008 R2 в качестве RADIUS сервера для Cisco ASA, часть 2
  • Настройка срока действия пароля в RHEL/CentOS 5
  • Настройка Windows Server 2008 R2 в качестве RADIUS сервера для Cisco ASA, часть 3
  • 2 Trackbacks

    1. By Anonymous on May 19, 2012 at 10:47 pm

      [...]Настройка OpenVPN. Бридж между двумя локальными сетями | Для системного администратора[...]…

    2. [...] Источник [...]