Задача стояла следующая – объеденить две локальные сети в разных городах в единую 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” и ждем. Должно все получиться :) Если что-либо пойдет не так, то открываем логи и думаем…
Автор: ?
Оригинал статьи здесь.
2 Trackbacks
…
[...]Настройка OpenVPN. Бридж между двумя локальными сетями | Для системного администратора[...]…
[...] Источник [...]