Добрый день, друзья. Сегодня я расскажу вам про такие прекрасные устройства как маршрутизаторы компании Mikrotik. Маршрутизаторы эти я юзаю уже давольно давно и всегда оставался доволен, чем доволен? Да всем: цена, качество, производительность. Но это все лирика, так как и про цену и про производительность информация доступна в интернетах, я же расскажу вам про настройку маршрутизатора Mikrotik в качестве клиента сервера OpenVPN (сервер построен на базе Centos 6.5).
И так, сразу хочу отметить тот факт что Mikrotik (как утверждается – пока), не поддерживает ovpn по udp портам, а так же – не поддерживает сжатие трафика LZO. Следовательно, конфигурацию сервера необходимо построить согласно этих недостатков. Для начинающих (или плохо знающих английский) советую ознакомиться с переводом коментариев к конфигурационному файлу OpenVPN сервераю, здесь же я приведу выдержки со своими параметрами и коментариями с указанного ранее ресурса.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 | # Какой TCP/UDP порт должен слушать OpenVPN? # Если вы хотите запустить несколько OpenVPN процессов # на одной машине, используйте различные номера # портов для каждого процесса. Вы должны # открыть этот порт в вашем файерволе. port 1194 # TCP или UDP сервер? proto tcp ;proto udp # "dev tun" создаст маршрутизируемый IP туннель, # "dev tap" создаст ethernet туннель. # Используйте "dev tap0" если вам нужен мост # и объедините полученный tap0 виртуальный интерфейс # в режиме моста с вашим ethernet интерфейсом. # Если вы хотите управлять правами доступа # через VPN, вы должны создать правила файервола # для TUN/TAP интерфейса. # На не-Windows системах, вы можете указать # явный номер устройствам, как например, tun0. # В Windows, используйте для этого "dev-node". # В большинстве систем, VPN не будет работать # пока вы частично или польностью не отключите # файервол для TUN/TAP интерфейса. ;dev tap dev tun # SSL/TLS корневой сертификат (ca), сертификат # (cert), и частный ключ (key). Каждый клиент # и сервер должны иметь свой собственный cert и # ключевой файл. Сервер и все клиенты будут # использовать один и тот же ca файл. # # Смотри в "easy-rsa" директории наборы # скриптов для генерации RSA сертификатов # и частных ключей. Незабывайте использовать # уникальные общие имена сертификатов для сервера # и каждого клиента. # # Можно использовать любую X509 систему управления ключами. # OpenVPN может также использовать ключевой файл формата PKCS #12 # (смотри директиву "pkcs12" в man). ca /etc/openvpn/.key/ca.crt cert /etc/openvpn/.key/server.crt key /etc/openvpn/.key/server.key # Этот файл необходимо хранить в секрете # Diffie hellman параметры. # Сгенерируйте ваш собственный: # openssl dhparam -out dh1024.pem 1024 # Замените 1024 на 2048, если вы используете # 2048 битные ключи. dh /etc/openvpn/.key/dh1024.pem # Установите серверный режим и укажите VPN подсеть # из которой OpenVPN будет выделять адреса клиентам. # Сервер возьмет себе адрес 10.8.0.1, # остальные остануться доступными для клиентов. # На каждом клиенте указывается адрес сервера # 10.8.0.1. Закоментируйте эту строку, если вы используете # ethernet мост. Смотри man для получения дополнительной информации. server 10.9.1.0 255.255.255.0 # Укажите хранить соответствие клиент <-> виртуальный IP адрес # в файле. Если OpenVPN будет остановлен или # перезапущен, переприсоединившиеся клиенты смогут получить # тот же виртуальный IP адрес из пула, что был назначен ранее. ifconfig-pool-persist /etc/openvpn/ipp.txt # Установите серверный режим для ethernet моста. # Вы должны сначала в своей ОС настроить мост # между TAP и NIC интерфейсом. # Затем вы должны вручную установить # IP/маску на мост, к примеру 10.8.0.4/255.255.255.0. # В заключении мы должны установить диапазон IP # адресов в этой подсети для выделения клиентам # (начало=10.8.0.50 конец=10.8.0.100). # Оставьте эту строку закоментированной, если вы # не используете ethernet мост. ;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100 # Установите клиенту соответствующие маршруты # для возможности работать с другими подсетями # за сервером. Помните, что эти подсети так же # должны знать маршрут к клиентам # адресного пула OpenVPN (10.8.0.0/255.255.255.0) ;push "route 192.168.10.0 255.255.255.0" ;push "route 192.168.20.0 255.255.255.0" # Чтобы назначить специфический IP адрес # специфическому клиенты или если за клиентом # располагается подсеть, которая тоже использует эту VPN, # используйте поддиректирию "ccd" для хранения специфических # файлов конфигурации клиентов (смотри man для получения # дополнительой информации). # ПРИМЕР: Допустим клиент # имеент сертификат с именем "Thelonious", # а также имеет за собой небольшую подсеть из # машин с адресами, например 192.168.40.128/255.255.255.248. # Сначала раскоментируйте эти строки: ;client-config-dir ccd ;route 192.168.40.128 255.255.255.248 # Затем создайте файл ccd/Thelonious со следующей строкой: # iroute 192.168.40.128 255.255.255.248 # Это разрешить подсети 'Thelonious' # доступ к VPN. Этот пример будет работать только # если у вас режим роутера, но не моста, т.е. вы # используете директивы "dev tun" и "server". # ПРИМЕР: Допустим вы хотите дать # Thelonious постоянный VPN IP адрес 10.9.0.1. # Вначале раскоментируйте следующую строку: ;client-config-dir ccd ;route 10.9.0.0 255.255.255.252 # Затем добавьте следующую строку в ccd/Thelonious: # ifconfig-push 10.9.0.1 10.9.0.2 # Допустим вы хотите сделать различные права доступа # на файерволе для различных групп клиентов # Есть два способв: # (1) Запустит несколько OpenVPN демонов, по одному на # каждую группу, и настроить файервол на каждом TUN/TAP # интерфейсе для каждой группы/демона соответственно. # (2) (Advanced) Создать скрипт для динамической # модификации файервола при подключении # различных клиентов. Смотри man для получения # дополнительной информации по learn-address скрипту. ;learn-address ./script # Если включена, то эта директива заменит # всем клиентам их дефолтный шлюз # на VPN, причем весь IP трафик, # такой как веб трафик и DNS запросы # будут направляться через VPN # (На машине с OpenVPN сервером должен быть настроен NAT # в интернет с TUN/TAP интерфейса для того чтобы это # работало правильно). # ПРЕДОСТЕРЕЖЕНИЕ: У клиента может перестать работать сеть, если # пакеты на локальный клиентский DHCP сервер # пойдут через туннель. Решение: убедитесь что # локальный DHCP сервер клиента доступен через более # специфичный маршрут, чем маршрут по умолчанию 0.0.0.0/0.0.0.0. ;push "redirect-gateway" # Определения Windows-специфичных сетевых параметров # могут быть переданы клиенту, такие как адреса DNS # или WINS серверов. ПРЕДОСТЕРЕЖЕНИЕ: # http://openvpn.net/faq.html#dhcpcaveats ;push "dhcp-option DNS 10.8.0.1" ;push "dhcp-option WINS 10.8.0.1" # Раскоментируйте эту директиву, чтобы # клиенты могли "видеть" друг друга в сети. # По умолчанию, клиенты могут видеть только сервер. # Чтобы заставить клиента видеть только сервер, # вы должны внести соответствующие правила # в файервол сервера, касающиеся TUN/TAP интерфейсов. ;client-to-client # Раскоментируйте эту директиву для того, чтобы # многочисленные клиенты могли соединяться с одними и темеже # сертификатом/ключем или именем. Это рекомендуется включать только # на период тестирования. Для рабочего использования, # каждый клиент должен иметь личный пару сертификат/ключ # # ЕСЛИ ВЫ НЕ СГЕНЕРИРОВАЛИ ИНДИВИДУАЛЬНУЮ # ПАРУ СЕРТИФИКАТ/КЛЮЧ ДЛЯ КАЖДОГО КЛИЕНТА, # РАСКОМЕНТИРУЙТЕ ЭТУ ЛИНИЮ. ;duplicate-cn # keepalive директива устанавливает # отправку ping-подобных сообщений # для того, чтобы каждая сторона знала # что другая перестала отвечать. # Пинг каждые 10 секунд, если в течение # 120 секунд нет ответа, то считается # что удаленных хост не доступен. keepalive 10 120 # Для дополнительной безопасности при # использовании SSL/TLS, создайте "HMAC firewall" # для защиты от DoS аттак и флуда UDP порта. # # Сгенерируйте с помощью: # openvpn --genkey --secret ta.key # # Сервер и каждый клиент должны иметь # копию этого ключа. # Второй параметр выставляется в '0' # для сервера и '1' для клиентов. ;tls-auth ta.key 0 # Этот файт секретный # Выберите криптографический сертификат. # Этот пункт конфига должен копироваться # в конфиг клиента, так же как он установлен здесь. ;cipher BF-CBC # Blowfish (default) cipher AES-128-CBC # AES ;cipher DES-EDE3-CBC # Triple-DES # Включить сжатие на VPN линии. # Если вы включаете это здесь, вы так же # должны включить сжатие в конфиге клиента. ;comp-lzo # Максимальное число одновременных # клиентских подключений. ;max-clients 100 # Это хорошая идея запускать процесс OpenVPN # от имени непривелигированного пользователя. # # Вы можете раскоментировать эти строки # для не-Windows систем. ;user nobody ;group nobody # Эти опции позволяют избежать необходимости # получения доступа к определенным ресурсам # после рестарта, т.к. это может быть невозможным # из-за понижения привелегий. persist-key persist-tun # Устанавливает файл состояния, в который ежеминутно # заносятся текущие подключения и ошибки. status openvpn-status.log # По умолчанию, логи направляются в syslog (на # Window, при работе в качестве службы, в # "\Program Files\OpenVPN\log" каталог). # Используйте log или log-append чтобы измененить это. # "log" перенаправит логи в файл, # тогда как "log-append" добавит еще и вывод в файл. # Используйте одну из двух (но не обе) директив. ;log openvpn.log ;log-append openvpn.log # Установите необходимый уровень логирования. # # 0 - ничего, за исключением фатальных ошибок # 4 - подойдет для получения общих сведений # 5 и 6 пригодяться для отладки проблем соединения # 9 - максимально возможная информация verb 3 # Запрещает повтор сообщений. Не более 20 # идущих друг за другом сообщений одного типа # будут направлены в лог. ;mute 20 |
Теперь приступим к настройке маршрутизатора Mikrotik (в моем случае это 751G-2HnD) – это мой домашний роутер с wi-fi. Настраивать можно через web морду, ssh или telnet, и через специальный софт WinBox. Я обычно настраиваю через WinBox. Но кто то любит, консоль и это его право.
Первое что вам нужно сделать это поместить сгенерированные вами сертификаты для клиентов на роутер, для этого вы можете использовать web интерфейс либо filezilla (по ftp).
Теперь нам нужно импортировать наши ключи.
Далее нам нужно создать само подключение.
Давайте пробежимся по параметрам.
Connect To – IP адрес узла к которому мы подключаемся (сервера).
Port – порт который слушает openvpn server
Mode – (либо IP либо Ethernet) зависит от вашего сервера (tap или tun), т.е. IP для tun и Ethernet для tap.
User – клиент который вы указываете при генерации сертификата.
Password – соотвественно пароль для сертификата.
Profile – довольно сложный параметр, но в данном случае не критичный (нужен для организации сервера, а не клиента).
Certificate – импортированный ранее сертификат.
Auth – в случае если вы используете шифрование паролей при передачи их от клиента к серверу, то тут вы можете указать по какому алгоритму (по умолчанию md5).
Cipher – алгоритм шифрования трафика.
Не забудьте поставить галочку Add Default Route, тем самым при подключении вы получите маршруты для маршрутизации между сетями.
Если все нормально и наше подключение активно, можно пустить пинг до сети VPN соединения.
Все ок? Но с тачки то пинга нет? Все очень просто вам нужно занатить сетку VPN, дабы ваш роутер мог передавать пакеты от вашей машины до сети VPN.
Все, сеть доступна. В данном примере используется masquerade, но можно использовать и netmap, что позволит настроить долее детально, ибо можно указать поведение для каждого IP в сети VPN.
Собственно на этом все, надеюсь статья будет вам полезна и интересна. Хочу отметить, что являюсь ярым фанатом маршрутизаторов mikrotik, да и не только маршрутизаторов, т.к. они являются относительно недорогим и эффективным средством для организации сети любой сложности предприятия.
Добавить комментарий