27 июня 2014 в 17:10

Настройка OpenVPN в связке Mikrotik/Ubuntu tutorial

В любой компании, где существует более одного офиса, рано или поздно возникает необходимость в объединении этих самых офисов. Многие провайдеры предлагают такие услуги, но попросят за это денег, да и кто знает, что там творится на стороне провайдера? Поэтому сделаем все сами, и рассмотрим вариант объединения с помощью Mikrotik RB750, Ubuntu и OpenVPN.

image


Почему Mikrotik?

Дело в нативной поддержке, простоте настройки, более стабильном поведении, низких (в сравнении) пингах и множестве других приятных фич, которые предоставляет RB750. Сторонние прошивки вроде tomato или dd-wrt были исключены из рассмотрения, т.к. были (и остаются) сомнения в их стабильности. Тестировался также Asus WL-520GU, но пинги были на 20-30 мс выше.

Итак, поехали.

На сервере в центральном офисе, стоит Ubuntu. Установка openvpn на нем выглядит следующим образом.

$ sudo su
# apt-get update
# apt-get upgrade
# apt-get 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
# Компрессия микротиком так же не поддерживается
;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:
image
В меню IP->Adresses назначаем ip lan интерфейса
image
Добавим гейт для выхода в инет в меню IP->Routes (гейтом в данном конкретном случае выступает DSL модем с адресом 10.100.0.1)
image
Обратим внимание, что 10.100.0.0 — адресация между роутером и модемом DSL, через который он ходит в инет, а 10.0.141.0 — сеть VPN.
Настроить DNS можно тут IP->DNS, а DHCP в меню IP->DHCP Server->DHCP setup, указав параметры пула.
Всю нашу внутреннюю подсеть задвинем за NAT, для этого настроим маскарадинг.
Переходим IP->Firewall->NAT и добавляем правило по аналогии:
image

Счастье близко

Осталось скопировать корневой сертификат(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 укажем адрес нашего сервера, порт, клиентский сертификат и типы шифрования.
image

Итог.

В итоге имеем вполне себе безопасный VPN, с минимальными затратами на оборудование и услуги связи, организовать который можно в течение пары минут.
Павел @versofate
карма
10,0
рейтинг 0,0
Самое читаемое Администрирование

Комментарии (28)

  • 0
    И сколько Мбит VPN прожует этот Микротик? 20? :)
    • 0
      даже 20 не тянет ) Но у меня наоборот, микротик — сервер, а убунта — клиент
      • 0
        Я так и не осилил настроить связку микротика-сервера и openvpn-Tunnelblick на маке. Опенвпн свои ошибки шифрует получше данных (коннекшен ресет111).

        Гайды на офф вики малость устарели уже, в соеременной роутерос и команды другие итд. На форумах есть куча возможных вариантов клиентского конфига ovpn и тоже что-то ничего не подходит.

        Кроме того непонятно зачем оффгайд предлагает генерить сертификаты именно при cacert.org, и что из них потом куда класть.

        Так что если вы бы поделились тайным знанием — думаю многим бы пригодилось.
        • 0
          На маке есть Viscosity.
    • 0
      По ipsec/3des тянул мегабит 6-8.
    • 0
      У кого-нибудь есть реальные цифры сколько можно протащить через IPSEC на Микротике? Т.е. не синтетика а реальный пример?
  • +3
    А микротик уже научился OpenVPN по udp или все еще только tcp?
    • 0
      Пока только TCP.
      • +2
        Тогда с точки зрения производительности связка не имеет особого смысла
        • 0
          ага, те же длинки под openwrt молотят под udp достаточно резво, чего нельзя сказать о tcp
      • +1
        Оно уже лет 5 «пока только». Подозреваю, что UDP у них не будет никогда.
    • +5
      Кроме того, openvpn у микротиков не умеет lzo компрессию трафика использовать
    • +1
      Отсутствие поддержки udp и lzo я подчеркнул комментом в конфиге :)
  • +2
    Если не ошибаюсь, easy-rsa в убунте теперь надо ставить отдельным пакетом
    • +1
      совершенно верно
  • +3
    ээ… а зачем openvpn? почему не ipsec? мыльница за 25$ даст 50мбит/с, а если требований к безопасности не так много — можно и просто l2tp
    • 0
      А зачем микротик? Почему не Ubuntu?..

      :-)
  • +4
    Очень странный выбор. OpenVPN в Mikrotik реализован так, что лучше бы его вообще не было — не поддерживает UDP, LZO, аутентификацию только по сертификатам (без логина и пароля), т.е. то, что многие используют. К тому же, OpenVPN и так не сильно быстрый, а на Mikrotik он вообще будет буквально ползать (не думаю, что больше 25 МБит/с пропустит).
    Уж лучше IPSec, или вообще IPIP/GRE/EoIP, если шифрование не нужно. Ну, или, IPSec поверх всего этого.
    • 0
      Mikrotik + OpenVPN поддерживает обязательную аутентификацию по сертификату, сверху этого легко прикручивается логин и пароль.
      Без проблем работают связки Mikrotik (OpenVPN server) + Win7 (client) + FreeBSD (client) + WinXP (client) с общим единым сертификатом и разными связками логин-пароль.
      • +1
        Но не поддерживается аутентификация только по сертификатам, без использования логина и пароля. Согласитесь, использовать логин и пароль, когда у вас уже есть сертификат, несколько глупо.
    • +1
      Зашёл в комменты, рассчитывая увидеть про реализацию openvpn на mikrotik и IPSEC, и нашёл их. Не хватает только картинки про буханку и троллейбус. Статья описывает посредственное решение, продиктованное узким техническим кругозором автора.
  • 0
    Ну и раз об общих настройках сказали, то надо было и про защиту. Файрвол настроить первым делом нужно!
  • –1
    Эээ… Почему, скажем не Cisco ASA и его lan-to-lan IPSEC? По стоимости решение не такое уж дорогое получается.
    • +2
      эээ… ЩИТО???!!! «cisco» и «недорогое» в одном предложении?!!! )))

      вы покажите вариант в районе 100$ :)))
    • 0
      Почему, скажем не Cisco ASA и его lan-to-lan IPSEC?

      Я даже не знаю, что хуже — убогий site-to-site асы без возможности туннелировать L2 в каком-либо виде, или openvpn/TCP. Но учитывая, что 5505 с честным k9 выйдет в несколько раз дороже — для мелкой фирмочки все-таки лучше openvpn. Падать будет чаще, зато отобьется быстрее.

      А можно выделить какой-нибудь обыкновенный офисный компьютер под виртуалку с чем-нибудь вроде CSR1k. Это кладет микротик на лопатки по всем фронтам, а по деньгам может быть сравнимо. Ну это если злостно нарушить лицензионное соглашение и не оплачивать виртуальный роутер после окончания триального периода, иначе будет дороже.
  • +1
    Так, а ну а что если взять обычный роутер с openwrt? У меня такое на паре строек сделано, работает хорошо (udp, lzo), правда там сам канал 3-5мбит…
  • 0
    Многие провайдеры предлагают такие услуги, но попросят за это денег, да и кто знает, что там творится на стороне провайдера?

    Творится примерно то же самое, вот только если связь пропадала на 5 секунд, то это будет аварийная заявка, причем, в отличие от интернет-канала, вас не смогут с такими запросами послать на три веселых буквы, а будут искать проблему.

    Ну а вообще — как правило, L3VPN каналы стабильнее, и обычно на них есть QoS, а если особо повезет — даже по всей сети.
  • +1
    У меня было несколько десятков OpenVPN-клиентов, могу сказать ответственно, что реализация OVPN на микроте — убожество. Уж лучше SSTP (микрот-микрот) или L2TP (+ipsec по желанию). Последний на той же убунте заводится на раз-два

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.