Кратък предговор
Целта на този документ е да покаже изграждането на Виртуал Частна Мрежа (VPN) между физически отдалечени офиси.
Работна схема
Фирмата поставила ми тази задача има офиси в различни градове в станата. Интернета във всички офиси се предоставя от услугата на БТК - ADSL. Това води до редица ограничения, като в случая най - важното е, че на всички "изходни"/"входни" точки на мрежата имаме транслиране на публичните адреси към частни - NAT. Това наложи използването на OpenVPN имплементацията на VPN.
R O \ / O
E F \ +-+ +-+ / M F
M F L \_|A|____INTERNET___|A|_/ A F L
O I A / +-+ +-+ \ I I A
T C N / \ N C N
E E / \ E
| REMOTE OFFICE: | MAIN OFFICE: | |
| ADSL EXTERNAL IP | 2.2.2.2 | 1.1.1.1 |
| ADSL INTERNAL IP | 192.168.1.1 | 192.168.1.1 |
| VPNS EXTERNAL IP | 192.168.1.2 | 192.168.2.1 |
| VPNS INTERNAL IP | 192.168.102.1 | 192.168.10.1 |
| VPN-ed NETWORK | 192.168.102.0/24 | 192.168.10.0/24 |
Бележка: VPNS - VPN Server
Използвано оборудване
Във центалния офис на фирмата има сървър с инсталиран CentOS. На него е инсталиран OpenVPN 2.0.7.
По отдалечените офиси са инсталирани устройства Linksys WRT54GL с инсталиран на тях dd-wrt OpenVPN v.23+SP2 с включен OpenVPN 2.0.7.
Настройки на сървъра
Инсталиране на софтуера
OpenVPN софтуера, пакетиран за CentOS (RHEL 4.4) можете да намерите в хранилището dag. Можете да избере или да инсталирате хранилището за вашата система или да инсталирате само необходимите пакети. В конкретния случай, аз препочетох да инсталирам само необходимите пакети:
$ rpm -ivh http://dag.wieers.com/packages/lzo/lzo-1.08-4.2.el4.rf.i386.rpm
$ rpm -ivh http://dag.wieers.com/packages/openvpn/openvpn-2.0.7-1.el4.rf.i386.rpm
Издаване на сертификатите
За по - голямо удобство и по - високо ниво на сигурност, ще използвам сертификати за оторизиране на клиентите пред сървъра. За целта трябва да инсталирам софтуер за управление на сертификатите. Ако нямате вече такъв софтуер, можете спокойно да използвате скриптовете, които са предоставени от OpenVPN.
1. Създавате директория и копирате в нея скриптовете от easy-rsa директорията на инсталирания пакет OpenVPN:
$ mkdir /etc/openvpn/easy-rsa
$ cp /usr/share/doc/openvpn-2.0.7/easy-rsa/2.0/* /etc/openvpn/easy-rsa
$ cd /etc/openvpn/easy-rsa
2. Редактирайте файла vars в текущата директоря, като промените стойностите на променливите:
export KEY_COUNTRY="BG"
export KEY_PROVINCE="SF"
export KEY_CITY="Sofia"
export KEY_ORG="Network dept."
export KEY_EMAIL="ca@example.com"
на такива на каквито са необходими във вашия случай.
3. Създаване на оторизационната верига:
$ . vars
$ ./clean-all
$ ./pkitool --initca --pass
Using CA Common Name: Fort-Funston CA
Generating a 1024 bit RSA private key
.................++++++
....++++++
writing new private key to 'ca.key'
Enter PEM pass phrase: <Въведете парола, която трябва да помните>
Verifying - Enter PEM pass phrase: <Повторете паролата>
-----
$ ./build-dh # Това ще отнеме повечеко време - не пушете цигари - вредно е :-)
4. Издаване на сертификат и ключ на VPN сървъра:
$ ./pkitool --server server.example.com # fqdn на сървъра
5. Издаване на сертификат и ключ на VPN клиент
$ ./pkitool client1.example.com
6. Създаване на директория за съхранение на ключа и сертикатите, които ще ползва сървъра:
За сървъра са необходими следните материали:\ - частния ключ на сървръра server.example.com.key\ - сертификата на сървъра server.example.com.crt\ - сертификата на оторизационната верига ca.crt
$ cd /etc/openvpn
$ mkdir keys
$ cp /etc/openvpn/easy-rsa/keys/server.example.com.key /etc/openvpn/keys/server.example.com.key
$ cp /etc/openvpn/easy-rsa/keys/server.example.com.crt /etc/openvpn/keys/server.example.com.crt
$ cp /etc/openvpn/easy-rsa/keys/ca.crt /etc/openvpn/keys/ca.crt
$ cp /etc/openvpn/easy-rsa/keys/dh1024.pem /etc/openvpn/keys/dh1024.pem
7. За клиента са необходими следните файлове (ключ и сертификати).Тях трябва да запишете на сигурен носител и да пренесете до клиента:
/etc/openvpn/easy-rsa/keys/ca.crt
/etc/openvpn/easy-rsa/keys/client1.example.com.crt
/etc/openvpn/easy-rsa/keys/client1.example.com.key
Конфигуриране на софтуера
1. Конфигурационен файл на OpenVPN сървъра:
Името което ще изберем за конфигурационен файл на сървъра е server.conf и се намира в директорията /etc/openvpnv.
# OpenVPN Server Config File
dev tun
port 1194
proto tcp
dh /root/openvpn/keys/dh1024.pem
ca /root/openvpn/keys/ca.crt
cert /root/openvpn/keys/server.example.com.crt
key /root/openvpn/keys/server.example.com.key
server 10.8.0.0 255.255.255.0
push "route 192.168.10.0 255.255.255.0"
client-config-dir ccd
route 192.168.100.0 255.255.255.0
client-to-client
keepalive 10 120
comp-lzo
max-clients 100
user nobody
group nobody
persist-key
persist-tun
verb 3
2. Конфигурационен файл с допълнителни настраойки за клиента.
- Създаваме директория която ще съхранява специфичните настройки за всеки клиент:
$ mkdir /etc/openvpn/ccd
- Файловете в нея носят имената на клиентите. В нашия случай създаваме файл с името client1.example.com и следното съдържание:
# OpenVPN Server Client Additiona Configuration File
ifconfig-push 10.8.0.3 10.8.0.4
iroute 192.168.102.0 255.255.255.0
Настройки на клиента/ите
Подмяна на софтуера на клиента
В нашия случай, клиентите не са персонални компютри, а хардуерни устройства със специфични функции - Linksys WRT54GL. Подробна информация как да бъде подменен софутера на клиента ще намерите тук.
А софтуер който трябва да използвате се намира тук.
За препоръчване е да следвате стриктно инструкциите от сайта.
Инсталиране на серфитикатите
Инсталирането на сертификатите на WRT54GL с dd-wrt операционна систем става като:
1. Активирате услугата OpenVPN.
Това можете да направите през WEB интерфейса. Избирате прозореца Administration, после под прозореца Services. По - надолу в екрана ще намерите поле OpenVPN. Като изберете бутона Enable ще се отворят още няколко полета за попълване. Ето как трябва да изглеждат те:
2. От файловте, които отделени за клиента отделяте следната информация:\ - за client1.example.com.key - информацията която се съдържа между коментарите -----BEGIN RSA PRIVATE KEY----- и ----END RSA PRIVATE KEY----- включително коментарите:
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQDrQ4IWGyPjMP7hZIN+Ur9qFoV6bFqGowxDjidgWcem5casOwNu
...
...
T6Vb7xYzvb9IXo6xR4SktRjCOFNAIkhO9hkiLP2T7Is=
-----END RSA PRIVATE KEY-----
- за client1.example.com.crt и ca.crt - съдържанието между коментарите -BEGIN CERTIFICATE- и -END CERTIFICATE- включително коментарите:
-----BEGIN CERTIFICATE-----
MIIDYTCCAsqgAwIBAgIBAjANBgkqhkiG9w0BAQQFADB0MQswCQYDVQQGEwJCRzEL
...
...
P4DBAR+T2ftaooMZmXDYVlq1lvcjZ8Qqj6/78C7FJ6Tag1aCjNnfXFgSFt2sd6In
asTzTZ4=
-----END CERTIFICATE-----
Конфигурационни файлове
1. Конфигурационен файл на OpenVPN клиента
На практика вие неможете да промените трайно настройките на конфигурационния файл на клиента, но в нашия случай, това не се и налага. И все пак вашият /tmp/openvpn/openvpn.conf файл трябва да излгежда приблизително по следния начин:
client
dev tun
proto tcp
remote server.examle.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun
tun-mtu 1500
tun-mtu-extra 32
mssfix 1450
ca /tmp/openvpn/ca.crt
cert /tmp/openvpn/client.crt
ns-cert-type server
key /tmp/openvpn/client.key
comp-lzo
2. Настройки на защитната стена:
Тях отново трябва да направите през WEB интерфейса: Administration -> Commants, добавяте следните две команди:
iptables -I INPUT -i tun+ -j ACCEPT
iptables -I FORWARD -i tun+ -j ACCEPT
След което натискате бутона Save Firewall.





