Pull to refresh

Прокладываем виртуальные сети

Reading time7 min
Views21K
С тех пор как интернет ( вернее ARPAnet ) был маленькой американской сеткой утекло много киселя. Сейчас сеть большое небезопасное место, где защита своих данных является одним из приоритетных направлений. О том как же меньше бояться я и расскажу в этом маленьком опусе.


1. Предположим...


Мы имеем два чудных рабочих места, одно находится в офисе на работе, а другое дома. И у нас стоит задача как же удобно забирать файлы с работы домой и с дома на работу. Таскать на компакт диске? Неудобно. Носить на флешке? Замучаешься копировать каждый раз. А вдруг неизвестно, какие файлы понадобятся сегодня? Таскать все сразу? Не вариант. Тем более на дворе 21й век, интернет как никогда скоростной, а безлимитные тарифы есть почти в каждом городе ( ну если сейчас нет, то в обозримом будущем точно будут ). Так что же сделать? Объединить компьютеры в локальную сеть и спокойно копировать файлы, подключаться к удаленному рабочему столу и даже играть в игры ( ну мало ли, вдруг кому захочется ).

2. Что...


С помощью бесплатной программы OpenVPN мы объединим два наших компьютера (а может и больше) в единую виртуальную сеть. Все передаваемые данные будут надежно зашифрованы с помощью Blowfish с ключем до 448 бит ( взлом с текущими мощностями компьютеров просто нереален ).
OpenVPN лучше ставить вместе с GUI. Скачать все это чудо можно с оффициального сайта OpenVPN GUI.

3. Как...


Итак у нас есть два компьютера. Один из них имеет внешний IP-адрес ( ну скорее всего домашний, ибо в офисах чаще сидят за фаерволами), а другой скрыт за NAT'ом. Ясное дело, что к тому компьютеру, который скрыт за NAT'ом подключится будет проблематично, тем более если захочется скачать с него файлы. Потому сервером OpenVPN мы выберем домашний компьютер, а в качестве клиента будет выступать наш офисный ПК. Итак приступим.

4. Установка


Установка OpenVPN простая и не требует особых знаний. Next next next finish. Собственно настройка гораздо интереснее.

5. Техническое описание задачи


Подготовка к действу закончена. Теперь самое время описать технически как же все это будет действовать.
Имеем:
Домашний компьютер А с внешним адресом $HOMEIP;
Офисный компьютер Б закрытый фаерволом и не имеющий внешнего адреса;
Необходимо:
Офисный компьютер Б должен подключаться к компьютеру А по протоколу TCP на порт 12345. Виртуальная сеть будет иметь адрес 10.0.1.0/24, где 10.0.1.1 домашний компьютер, а 10.0.1.2 — офисный. Авторизация должна проходить по сертификатам без использования паролей.

6. Сервер


OpenVPN по умолчанию устанавливается в C:\Program Files\OpenVPN. Запускаем консоль (cmd.exe и переходим в каталог C:\Program Files\OpenVPN\easy-rsa и выполняем там init-config.bat.

C:\Program Files\OpenVPN\easy-rsa>init-config.bat

C:\Program Files\OpenVPN\easy-rsa>copy vars.bat.sample vars.bat
Скопировано файлов: 1.

C:\Program Files\OpenVPN\easy-rsa>copy openssl.cnf.sample openssl.cnf
Скопировано файлов: 1.

Теперь откроем конфигурационный файл vars.bat и приведем его к следующему виду:
@echo off
set HOME=%ProgramFiles%\OpenVPN\easy-rsa
set KEY_CONFIG=openssl.cnf
set KEY_DIR=keys
set KEY_SIZE=2048
set KEY_COUNTRY=RU
set KEY_PROVINCE=MSK
set KEY_CITY=Moskow
set KEY_ORG=Kremlin
set KEY_EMAIL=none@net.com

Здесь:
KEY_DIR — каталог где будут храниться ключи;
KEY_SIZE — длина RSA-ключа используемого для подписи;
KEY_COUNTRY — код страны;
KEY_PROVINCE — код региона ( провинции, области и тд)
KEY_CITY — город;
KEY_ORG — организация;
KEY_EMAIL — адрес электронной почты;
Теперь для генерации необходимых ключей и сертификатов последовательно запустим команды:
vars.bat
clean-all.bat
build-ca.bat
build-dh.bat
build-key-server.bat homepc

В результате в консоли получится нечто вроде этого:
C:\Program Files\OpenVPN\easy-rsa>vars

C:\Program Files\OpenVPN\easy-rsa>clean-all.bat
Скопировано файлов: 1.
Скопировано файлов: 1.

C:\Program Files\OpenVPN\easy-rsa>build-ca.bat
Loading 'screen' into random state - done
Generating a 2048 bit RSA private key
...+++
....................+++
writing new private key to 'keys\ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [RU]:
State or Province Name (full name) [MSK]:
Locality Name (eg, city) [Moskow]:
Organization Name (eg, company) [Kremlin]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:server
Email Address [none@net.com]:

C:\Program Files\OpenVPN\easy-rsa>build-dh.bat
Loading 'screen' into random state - done
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
...........+........++*

C:\Program Files\OpenVPN\easy-rsa>build-key-server.bat homepc
Loading 'screen' into random state - done
Generating a 2048 bit RSA private key
...........................................................+++
.......................+++
writing new private key to 'keys\homepc.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [RU]:
State or Province Name (full name) [MSK]:
Locality Name (eg, city) [Moskow]:
Organization Name (eg, company) [Kremlin]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:homepc
Email Address [none@net.com]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from openssl.cnf
Loading 'screen' into random state - done
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'RU'
stateOrProvinceName :PRINTABLE:'MSK'
localityName :PRINTABLE:'Moskow'
organizationName :PRINTABLE:'Kremlin'
commonName :PRINTABLE:'homepc'
emailAddress :IA5STRING:'none@net.com'
Certificate is to be certified until Aug 11 12:51:16 2018 GMT (3650 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

C:\Program Files\OpenVPN\easy-rsa>

Генерация ключей для сервера закончена. Скопируем следующие файлы ca.crt, homepc.key, homepc.crt и dh2048.pem из каталога OpenVPN\easy-rsa\keys в каталог OpenVPN\config\. Потом создаем конфиг сервера OpenVPN\config\server.ovpn ( если у вас Vista, то сначала создайте конфиг например на рабочем столе, а потом скопируйте в каталог config ). В него забиваем следующее:
############################
#в данном режиме демон OpenVPN принимает несколько подключений
mode server
#использовать TLS
tls-server
#используемый протокол, udp или tcp-server
proto tcp-server
#используемый тип виртуального адаптера,TUN - туннель, TAP - сеть
dev tap
#порт на котором слушаем подключение
port 12345
#файл корневого сертификата
ca ca.crt
#сертификат сервера
cert homepc.crt
#ключ сервера
key homepc.key
#файл ключа Диффи-Хелмана
dh dh2048.pem
#настраиваем интерфейс
ifconfig 10.0.1.1 255.255.255.0
#уровень отладки, 3 нам вполне хватит
verb 3
#длина ключа шифрования, 256 нам хватит
keysize 256
#используемый алгоритм шифрования, blowfish
cipher BF-CBC
#использовать сжатие данных
comp-lzo

Сохраняем, после чего жмем на него правой кнопкой мыши, и выбираем запуск с помощью OpenVPN ( ну или открыть с помощью OpenVPN, если конфиг имеет расширение txt). Сервер запустится и будет готов обслуживать подключения.

7. Клиент.


Для работы клиенты мы сгенерируем один файл содержащий необходимые нам ключи и сертификаты. Для этого в консоли сервера ( например после генерации его ключей ) выполняем команды vars.bat и затем build-key-pkcs12.bar officepc. Получим что-то вроде этого:
C:\Program Files\OpenVPN\easy-rsa>build-key-pkcs12.bat officepc
Loading 'screen' into random state - done
Generating a 2048 bit RSA private key
................................................................................
.......+++
...+++
writing new private key to 'keys\officepc.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [RU]:
State or Province Name (full name) [MSK]:
Locality Name (eg, city) [Moskow]:
Organization Name (eg, company) [Kremlin]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:officepc
Email Address [none@net.com]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from openssl.cnf
Loading 'screen' into random state - done
DEBUG[load_index]: unique_subject = "yes"
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'RU'
stateOrProvinceName :PRINTABLE:'MSK'
localityName :PRINTABLE:'Moskow'
organizationName :PRINTABLE:'Kremlin'
commonName :PRINTABLE:'officepc'
emailAddress :IA5STRING:'none@net.com'
Certificate is to be certified until Aug 11 13:17:22 2018 GMT (3650 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
Loading 'screen' into random state - done
Enter Export Password:
Verifying - Enter Export Password:

C:\Program Files\OpenVPN\easy-rsa>

Примечение! Не обязательно вводить пароль на последнем этапе генерации. Лично я просто нажал Enter.
Теперь копируем файл officepc.p12 из каталога OpenVPN\easy-rsa\keys в каталог OpenVPN\config НАХОДЯЩИЙСЯ НА МАШИНЕ КЛИЕНТА. И создаем конфиг на машине клиента, например client.ovpn, с таким содержимым:
#используемый тип устройства туннеля
dev tap
#использовать TLS
tls-client
#адрес домашнего ПК
remote $HOMEIP 12345
#протокол подключения
proto tcp-client
#настраиваем интерфейс
ifconfig 10.0.1.2 255.255.255.0
#использовать сжатие
comp-lzo
#уровень отладки
verb 3
#сертификат для подключения
pkcs12 cert.p12
#использовать сжатие
comp-lzo
#длина ключа
keysize 256
#используемое шифрование
cipher BF-CBC

Все. Настройка окончена. Запускаем конфигурационный файл на клиенте ( открыть с помощью OpenVPN ). Наша виртуальная сеть готова.
P.S. Ежели чего не сказал, или какие моменты непонятны дополню и расширю пост. Милости просим)
Tags:
Hubs:
+4
Comments11

Articles