пятница, 18 июля 2008 г.

Полный разбор файла конфигурации OpenVPN

Пример файла /etc/openvpn/server.conf
port 1194
proto udp
dev tun
;dev-node tap0
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key # This file should be kept secret
dh /etc/openvpn/dh1024.pem
server 10.10.10.0 255.255.255.0 # vpn subnet
ifconfig-pool-persist ipp.txt
push "route 192.168.7.0 255.255.255.0" # home subnet
;duplicate-cn
keepalive 10 120
;cipher BF-CBC # Blowfish (default)
;cipher AES-128-CBC # AES
;cipher DES-EDE3-CBC # Triple-DES
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
;status openvpn-status.log
;log-append openvpn.log
verb 10
mute 20
client-to-client
client-config-dir /etc/openvpn/ccd
route 192.168.1.0 255.255.255.0

Указываем, на каком порту принимать соединения:

port 1194

Указываем протокол (tcp или udp):

proto udp

Указываем, что именно будем инкапсулировать в туннеле (ethernet фреймы - tap или ip пакеты - tun)

dev tun

Прописываем пути к ключам и сертификатам:

ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key # This file should be kept secret
dh /etc/openvpn/dh1024.pem

Выделяем внутренний диапазон адресов для VPN:

server 10.10.10.0 255.255.255.0 # vpn subnet

В какой файл будем записывать выданные для VPN адреса?:

ifconfig-pool-persist ipp.txt

Прописываем на клиенте маршрут до домашней сети (той которая за сервером):

push "route 192.168.7.0 255.255.255.0" # home subnet

Пинговать каждые 10 секунд, если хост не отвечает в течении 120 секунд, считать его в недоступным:

keepalive 10 120

Разрешить сжатие пакетов:

comp-lzo

Прописываем пользователя и группу, от имени которых будет запускаться демон:

user nobody
group nogroup

Пытаться переподключаться после падений интерфейса (не уверен, что правильно перевёл):

persist-key
persist-tun

Уровень подробности логов (от 0 до 9):

verb 4

Не писать в логи повторяющиеся сообщения:

mute 20

Разрешить пересылку пакетов между клиентами:

client-to-client

Автоматически прописать машрут на сервере до клиента

client-config-dir /etc/openvpn/ccd
route 192.168.1.0 255.255.255.0

Настройка OpenVPN в Ubuntu

Должен быть установлен пакет openvpn:

sudo apt-get install openvpn

Сервер

Создаём конфигурационный файл для сервера /etc/openvpn/server.conf:

port 1194
proto udp
dev tun
;dev-node tap0
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key # This file should be kept secret
dh /etc/openvpn/dh1024.pem
server 10.10.10.0 255.255.255.0 # vpn subnet
ifconfig-pool-persist ipp.txt
push "route 192.168.7.0 255.255.255.0" # home subnet
;duplicate-cn
keepalive 10 120
;cipher BF-CBC # Blowfish (default)
;cipher AES-128-CBC # AES
;cipher DES-EDE3-CBC # Triple-DES
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
;status openvpn-status.log
;log-append openvpn.log
verb 4
mute 20
client-to-client
client-config-dir /etc/openvpn/ccd
route 192.168.1.0 255.255.255.0

Полный разбор файла конфигурации

Примечание: при загрузке системы автоматически поднимаются все VPN соединения, для которых в папке /etc/openvpn есть соответствующие файлы с расширением .conf.

Теперь необходимо создать ключи и сертификаты для шифрования и авторизации (http://openvpn.net/index.php/documentation/howto.html#pki). Соответствующие скрипты для этого находятся в папке /usr/share/doc/openvpn/examples/easy-rsa/2.0

Создаём CA (авторитетный сертификат):

cd  /usr/share/doc/openvpn/examples/easy-rsa/2.0
sudo bash
. ./vars
./clean-all
./build-ca

Теперь создадим сертификат и приватный ключ для сервера:

./build-key-server server

Создаём ключ для клиента (если клиентов несколько, процедуру придётся повторить):

./build-key client1

Примечание: для каждого клиента должно быть указано своё уникальное имя (в данном случае client1).

Примечание: если новый клиент создаётся спустя некоторое время, процедура будет выглядеть следующим образом:

cd  /usr/share/doc/openvpn/examples/easy-rsa/2.0
source ./vars
./build-key client2

Генерируем параметры Диффи-Хеллмана:

./build-dh

Помещаем следующие файлы в директорию /etc/openvpn/

  • ca.crt
  • server.crt
  • dh1024.pem
  • server.key

Создаём файл /etc/openvpn/ipp.txt в который программа будет помещать IP адреса выданные клиентам клиентов.

Клиент

Конфигурационный файл клиентской машины /etc/openvpn/client.conf будет выглядеть следующим образом:

remote XX.XX.XX.XX 1194
client
dev tun
proto udp
resolv-retry infinite # this is necessary for DynDNS
nobind
user nobody
group nogroup
persist-key
persist-tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/client1.crt
key /etc/openvpn/client1.key
comp-lzo
verb 4
mute 20

Теперь необходимо скопировать с сервера в папку /etc/openvpn/ сгенерированные клиентские ключи и авторитарный сертификат сервера:

  • ca.crt
  • client1.crt
  • client1.key

Автоматическая настройка маршрута на сервере до удалённой сети

Важное замечание: Все клиенты идентифицируются на сервере по имени выданного им сертификата (в нашем примере client1).

Если за клиентом находится подсеть 192.168.1.0/24, то для того чтобы при подключении этого клиента, на нашем сервере автоматически прописывался маршрут до него, мы должны сделать следующее:

  • добавить в файл server.conf строки:
client-config-dir ccd
route 192.168.1.0 255.255.255.0
  • создать файл /etc/openvpn/ccd/client1 такого содержания:
iroute 192.168.1.0 255.255.255.0

среда, 9 июля 2008 г.

Теперь я умею OpenVPN

Сегодня провозился почти весь день. В очередной раз убедился что логи рулят. Но я таки поднял VPN-туннель между офисами.
Осталось разобраться, как же прикрутить к нему маршрутизацию. Конечно, в мане это всё есть, но как-то коротко и неочевидно. Будем завтра погуглить.