Добро пожаловать на TLisBlog! Сегодня 31января 2019 года.
В этот день мне хотелось бы рассказать о своем недавнем опыте работы с OpenVPN. Это бесплатное программное обеспечение, предназначенное для создания VPN соединения между устройствами.
Краткое введение (для неайтишников)
VPN расшифровывается как "виртуальная частная сеть". На сегодняшний день данная технология известна многим людям тем, что используется для сохранения анонимности в сети интернет. Но так было не всегда, а вернее не совсем так. Вторая (а может быть и первая) её функция заключается в том, что устройства, подключенные к такой сети, могут находиться очень далеко друг от друга, но при этом они будут видеть друг друга так, будто бы находятся в одной сети. Теперь, когда мы знаем что такое VPN, можно переходить к самой истории.
Ближе к сути
Судя по большинству мануалов в сети, большинство запускает сервер OpenVPN на операционной системе Linux (к слову, реализации OpenVPN существуют под все популярные мобильные и компьютерные ОС). Так же большинство нормальных людей для сервера используют статический IP-адрес. И, как не странно, большинство нормальных людей сервер подключают к интернету по кабелю, а не через Wi-Fi. Но так уж сложилось, что по жизни я редко попадаю в большинство, и этот случай не стал исключением.
Вообще, при прошлой установке и настройке OpenVPN я тоже немного помучался, но это было не так тяжко. В этот же паз всё как-то шло против меня, но о каждом пункте страданий по порядку:
1. Интернет.
Начать следует с того, что оба устройства, между которыми необходимо было "протянуть" VPN, были в нескольких сотнях км от меня. Удаленная настройка и так всегда накладывает некоторые ограничения, но тут был особый случай. Teamvieawer отваливался каждые минут 5-10, а когда не отваливался, то просто тупил. Это сильно мешало, отвлекало и не давало сосредоточиться.
2. Динамический IP.
В наше время динамическим IP никого не удивить, и хоть эту проблему и можно было бы решить, используя IPv6, статью о котором я недавно писал, но пока по к этому не готовы. Поэтому, при некоторых обстоятельствах, IP-адрес устройства в сети меняется. Это происходит обычно по одной из двух причин: отключение от сети, либо конец времени аренды IP адреса. Второе может для некоторых звучать страшно, но по факту пользователь обычно ничего не замечает, разве что устройство, через которое компьютер подключен к сети, выдает новый адрес. Так же и провайдер, спустя день-неделю меняет ваш адрес в сети. Заметьте, это происходит не так уж и часто. Но, это так лишь у нормальных людей. В этой ситуации явно что-то было не так. Если изменение локального IP я ещё мог понять (просто постоянно отваливался Wi-Fi, а у меня при этом пропадало удаленное подключение), то вот изменение внешнего адреса мне понять сложно... Три раза минимум в течении часа я наблюдал изменение IP адреса. Для этого должен были либо кончиться срок аренды адреса, что могло произойти максимум один раз, либо я без понятия кто виноват — Ростелеком или ZyXEL, но кто-то из них явно исполнял какую-то хрень. Кстати, роутер ещё имеет не очень приятный интерфейс, как по мне. Проброс портов нельзя сделать с привязкой к MAC-адресу, только к IP, а настроить для него локальную статику тоже та ещё боль в этих замороченных настройках. Хотя, может я просто слишком привык к своему роутеру, не знаю... Ах да, прописать параметры сети на машине тоже нельзя, потому что тогда роутер её просто игнорит, пусть и стоят адрес, шлюз, маска и DNS как если бы их выдал DHCP.
3. Конфигурация OpenVPN.
При настройке OpenVPN вы можете столкнуться со множеством странных ошибок, связанных с самой конфигурацией. В трёх мануалах будет написано разными словами одно и то же, вы сделаете так же, и оно не станет работать. Либо оно станет работать, но в следующий раз вы сделаете всё точно так же, может даже просто скопируете старые файлы конфигурации, лишь пересоздав сертификаты, но проблема останется.
3.1. В прошлый раз основной проблемой у меня стала выдача одинаковых IP адресов всем клиентам в сети. Не смотря на то, что в разных местах говорят, что использование одного сертификата для нескольких клиентов не запрещено, а создание разных сертификатов нужно лишь для повышения безопасности, никто не говорит при этом, что так же необходимо и внести некоторые изменения в файл конфигурации сервера. К сожалению, я не вспомню сейчас всех тех настроек, но одним из моментов была замена строки "dev tun" на "dev tap". А вот замена с "client-to-client" на "client-to-site", которую советовали попробовать, сделала тогда ещё хуже, и связь и вовсе пропала.
3.2. В этот же раз всё оказалось ещё интереснее. Если не считать той долгой и бесполезной войны с файлом конфигурации, которую я вёл, пока у меня незаметно менялся IP на сервере, то надо было мне просто взять, да и поменять обратно "tap" на "tun". Но эта проблема была не единственной, а потому существует и следующий пункт.
3.3. Основной проблемой стал вводимый при создании сертификата клиента параметр Common Name. В этот раз я несколько раз пересоздавал все ключи и сертификаты, но так и не мог понять, в чём же дело, пока не пошёл гуглить. Как оказалось, уже встречались люди с подобной проблемой, и решалось оно просто вводом имени в Common Name, вместо использования значения по умолчанию, которое, собственно говоря, получают и сертификат и ключ сервера.
Заключение (ещё не всё, но конец уже близко)
На это небольшое задание я по идее должен был потратить максимум час времени, и надо было мне настроить три сети OpenVPN, и ещё время бы осталось, но... В итоге, к сожалению, я убил на это весь день.
Так же, хотелось бы отметить
Так же, хотелось бы отметить, что сервис DynDNS стал теперь платным, что не могло не опечалить. Да, раньше я им не пользовался, ибо как-то не приходилось, но знал, что он есть, и что работу с ним поддерживает многие сетевые устройства третьего уровня модели OSI (роутеры, если что). В итоге, пришлось икать аналог. В итоге пришёл к выводу, что hldns вроде работает более-менее нормально и корректно, разве что пришлось на поставить на сервер ещё небольшое приложение, чтобы оно постоянно сообщало свой актуальный IP-адрес. Немножко костыльно, но зато работает, хех)
Заключение (вот теперь точно всё)
Большое спасибо всем тем, что дочитал до конца, мне правда приятно знать, что выходит интересно, и радуют меня не только цифры, честно. Хотя, без цифр тоже бывает печально, поэтому буду благодарен всем, кто положительно оценит статью) А так же напоминаю, что мы есть в Telegram, подписывайтесь, ведь скоро выйдет статья и об этом мессенджере.