В любой компании, где существует более одного офиса, рано или поздно возникает необходимость в объединении этих самых офисов. Многие провайдеры предлагают такие услуги, но попросят за это денег, да и кто знает, что там творится на стороне провайдера? Поэтому сделаем все сами, и рассмотрим вариант объединения с помощью Mikrotik RB951G, CentOS и OpenVPN.
Почему Mikrotik?
Дело в нативной поддержке, простоте настройки, более стабильном поведении, низких (в сравнении) пингах и множестве других приятных фич, которые предоставляет RB951.
На сервере в центральном офисе, стоит CentOS. Установка openvpn на нем выглядит следующим образом.
# yum install openvpn
# cp -R /usr/share/doc/openvpn/examples/easy-rsa/ /etc/openvpn
# cd /etc/openvpn/easy-rsa/2.0
# ln -s openssl-1.0.0.cnf openssl.cnf
# source vars
# ./clean-all
Создаем пару корневой сертификат ca.crt и ключ ca.key
# ./build-ca
Создаем пару сертификат сервера server.crt и ключ server.key
# ./build-key-server server
Создаем пару сертификат клиента client1.crt и ключ client1.key
# ./build-key client1
Ключи Диффи Хелмана
# ./build-dh
# cd keys
# mkdir /etc/openvpn/.keys && /etc/openvpn/.ccd
# cp ca.crt ca.key dh1024.pem server.crt server.key /etc/openvpn/keys
# cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
# cd /etc/openvpn
# gunzip -d /etc/openvpn/server.conf.gz
# nano /etc/sysctl.conf
Находим строку и снимаем с нее комментарий:
# Enable packet forwarding
net.ipv4.ip_forward=1
Все нюансы настройки заключались в файле конфигурации openvpn на сервере, по итогу он получился таким (комментировал лишь существенные моменты, описание остальных параметров конфига есть в манах, инете, example конфигах и проч.):
port 1194
# Mikrotik не умеет работать с UDP
proto tcp
dev tun
ca .keys/ca.crt
cert .keys/server.crt
key .keys/server.key # This file should be kept secret
dh .keys/dh1024.pem
server 10.0.141.0 255.255.255.0
client-config-dir .ccd
client-to-client
keepalive 10 120
tun-mtu 1500
mssfix 1450
cipher AES-256-CBC # AES
auth sha1
ВНИМАНИЕ!! добавить маршрут для сети за микротиком
route 192.168.141.0 255.255.255.0 10.0.141.2
# Компрессия микротиком так же не поддерживается
;comp-lzo
user nobody
group nogroup
#Сохраняем туннель при обрыве на время keepalive
persist-key
#Не пересчитываем ключи при обрыве связи
persist-tun
status /var/log/openvpn-status.log
log /var/log/openvpn.log
verb 3
mute 10
/etc/openvpn/.ccd/client1
# Клиентская подсеть за mikrotik (192) и адрес openvpn у роутера (10)
iroute 192.168.141.0 255.255.255.0 10.0.141.2
# Добавим шлюз по умолчанию для машин за микротиком
ifconfig-push 10.0.141.2 10.0.141.1
Теперь Mikrotik
Настройку опишу с самого начала, в том числе организацию свича, настройку адресов, маршрутов, DHCP и проч.
Заходим в веб-интерфейс роутера, качаем winbox.
Запускаем winbox(возможно подключение как по IP, так и по MAC), открываем new terminal, и пишем следующее(achtung, сброс конфигурации роутера): system reset-configuration
Подключаемся ко второму порту микротика, запускаем все тот же winbox, и на появившийся запрос клацаем remove config
Организуем свич на портах 2-5, порт 1 будет выступать в роли WAN порта.
Для этого у всех интерфейсов 3-5 указываем мастер порт ether2:
В меню IP->Adresses назначаем ip lan интерфейса
Добавим гейт для выхода в инет в меню IP->Routes (гейтом в данном конкретном случае выступает DSL модем с адресом 10.100.0.1)
Обратим внимание, что 10.100.0.0 — адресация между роутером и модемом DSL, через который он ходит в инет, а 10.0.141.0 — сеть VPN.
Настроить DNS можно тут IP->DNS, а DHCP в меню IP->DHCP Server->DHCP setup, указав параметры пула.
Всю нашу внутреннюю подсеть задвинем за NAT, для этого настроим маскарадинг.
Переходим IP->Firewall->NAT и добавляем правило по аналогии:

Осталось скопировать корневой сертификат(ca.crt) и клиентские сертификат и ключ(client1.crt, client1.key), которые мы сгенерировали в процессе установки/настройки сервера. На микротике выбираем меню Files, и видим окно с файловой системой роутера. Именно сюда нужно положить наши ключи, работает drag-n-drop.
Чтобы роутер знал о наличии у него сертификатов, их нужно импортировать через System->Certifates добавляем ca.crt, client1.crt, client1.key, клиентский ключ автоматом станет «Decrypted».
Непосредственно соединение OpenVPN создается в меню Interfaces, при нажатии на красный плюс увидим OVPN Client в выпадающем списке.
На вкладке Dial Out укажем адрес нашего сервера, порт, клиентский сертификат и типы шифрования.
Возможно необходимо добавить через командную строку:
На просторах сети многие рекомендуют банально выполнить «/certificate import», но у меня этим способом не импортировался закрытый ключ:
[admin@MikroTik] > /certificate importpassphrase: certificates-imported: 1 private-keys-imported: 0 files-imported: 1 decryption-failures: 0 keys-with-no-certificate: 0[admin@MikroTik] /certificate> print Flags: K - decrypted-private-key, Q - private-key, R - rsa, D - dsa, C - crl 0 C name="cert1" subject=CN=MikroTik,emailAddress=XXXX,OU=XXXX,O=XXXX SPB,L=Saint-Petersburg,C=RU issuer=CN=XXXXX CA,emailAddress=XXXXX,OU=XXXXX,O=XXXXXX,L=Saint-Petersburg,C=RU serial-number="19" email=XXXXX invalid-before=feb/26/2014 15:33:34 invalid-after=feb/26/2015 15:33:34 trusted=yes |
Пришлось поочередно импортировать открытый и закрытый ключи:
[admin@MikroTik] /certificate> import file-name=XXXX.crtpassphrase: certificates-imported: 1 private-keys-imported: 0 files-imported: 1 decryption-failures: 0 keys-with-no-certificate: 0 [admin@MikroTik] /certificate> import file-name=XXXXX.keypassphrase: certificates-imported: 0 private-keys-imported: 1 files-imported: 1 decryption-failures: 0 keys-with-no-certificate: 0 [admin@MikroTik] /certificate> printFlags: K - decrypted-private-key, Q - private-key, R - rsa, D - dsa, C - crl 0 KRC name="cert1" subject=CN=MikroTik,emailAddress=XXXXX,OU=XXXXX,O=XXXXX,L=Saint-Petersburg,C=RU issuer=CN=XXXXX CA,emailAddress=XXXXX,OU=XXXXX,O=XXXXX,L=Saint-Petersburg,C=RU serial-number="19" email=XXXXX invalid-before=feb/26/2014 15:33:34 invalid-after=feb/26/2015 15:33:34 trusted=yes |
Для настройки OpenVPN соединения необходимо выполнить нижеприведенную команду, при этом необходимо не забыть указать параметры user/password с любыми значениями:
[admin@MikroTik] /interface ovpn-client> add name="test" connect-to=xxx.xxx.xxx.xxx port=1194 user="none" password="none" disabled=no profile=default certificate="cert1" add-default-route=no |
После этого, проверяем поднялось ли соединение:
[admin@MikroTik] /interface ovpn-client> monitornumbers: 0 status: connected uptime: 1m58s encoding: BF-128-CBC/SHA1 mtu: 1500-- [Q quit|D dump|C-z pause] |
Mikrotik также умеет получать интернет с wifi или 3G/4G.
Что делает его достаточно удобным.



