Навигация
Системное Администрирование Решения на открытых кодах Структура сети Компьютерные сети малых предприятий Сеть с централизованным управлением Управление с помощью групповых политик Организация почтового обслуживания Взаимодействие с глобальной сетью Безопасность Виртуализация Парядок настройки и определения неисправностей Средства управления системами Автоматизация установки программного обестичения Решение проблем с компьютером Разное
 
 
Избранное
Pathping. Traceroute на стероидах.
FreeNAS: создаём сетевое хранилище (NAS)
Iperf - утилита для тестирования пропускной способности сети.
Средство против «сетевой слепоты»
Преимущества и недостатки RAID 6
Дисковые массивы RAID
Надежнее, чем RAID 5
Унификация корпоративных коммуникаций
Exchange и SAN: не все так просто
Cisco против Meru
 
 
Сеть с централизованным управлением - Настройка 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, и предугадывать, как он будет ходить через две Д-Линковские железяки было трудно.

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

  • Простая настройка. И под 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 с сайта . Скачать необходимо 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" и ждем. Должно все получиться :) Если что-либо пойдет не так, то открываем логи и думаем...




 
 
 
 
Поиск по сайту
Google Поиск


Яндекс поиск
 
 
Полезное
 
 
 
 
 
systemzone.ru 2014