Удаленный vpn сервер ip или dns хост
Давно была идея сделать свой VPN сервер, для того чтобы "ходить" на ресурсы типа Linkedin. Со временем подумал, что неплохо было бы сделать еще и блокировку рекламы, а потом и DNS сервер. Простых инструкций в интернете я не нашел, поэтому со временем написал ее для себя. Возможно кому-то еще поможет.
Проверка и итоги
Суть задачи в том, чтобы сделать свой VPN и DNS сервер с шифрованным трафиком DNS и блокировкой рекламы через Pihole.
В качестве VPN сервера был выбран Wireguard, а DNS сервера - Unbound. По моему мнению, они одни из самых простых в настройке.
1. Первым делом меняем список репозиториев, на дефолтные для Debian 11.
nano /etc/apt/sources.list
Удаляем там все и вставляем эти строки:
Если у вас Ubuntu 20.04, то вот список репозиториев:
Далее обновляем систему:
apt update -y
apt upgrade -y
Если система не обновляется, то проблема возможно в файле /etc/resolv.conf
Нужно добавить там строку nameserver 8.8.8.8.
2. Ставим сначала VPN сервер. По моему опыту, самый быстрый и простой в настройке VPN сервер - это Wireguard. Для простоты и скорости, качаем скрипт:
Если нет curl, то ставим командой apt install curl
./wireguard-install.sh
Дальше все время нажимаем Enter и придумываем название для клиента. В конце будет QR код для настройки VPN с клиента на телефоне. Клиент на телефонах, к слову, так и называется - Wireguard. При повторном запуске скрипта создается второй клиент VPN. По умолчанию он сохраняется в корневую директорию и имеет формат .conf.
Для шифрования DNS трафика установим службу DNS-proxy.
Для работы службы шифрования DNS-proxy необходимо установить язык go (минимум версии 1.15):
Если в конце такой вывод с версией языка, значит все верно.
3. Далее качаем файлы для установки DNS-proxy:
если в системе нет утилиты git, то устанавливаем ее командой sudo apt install git
и компилируем программу:
cd dnsproxy
go build -mod=vendor
./dnsproxy -u sdns://AgcAAAAAAAAABzEuMC4wLjGgENk8mGSlIfMGXMOlIlCcKvq7AVgcrZxtjon911-ep0cg63Ul-I8NlFj4GplQGb_TTLiczclX57DvMV8Q-JdjgRgSZG5zLmNsb3VkZmxhcmUuY29tCi9kbnMtcXVlcnk
Затем правила для рекурсивного DNS:
Виртуальные ip адреса 10.20.20.0/24 меняем, на адрес вашей подсети Wirguard.
Чтобы сохранить маршруты ставим и настраиваем iptables-persistent
sudo apt-get install iptables-persistent
4. Ставим Pihole для блокировки рекламы.
После запуска скрипта выбираем виртуальный интерфейс нашего wireguard - wg0. Далее жмем Enter и в конце сохраняем пароль для веб интерфейса программы.
5. Переходим к установке и настройке своего DNS сервера.
Установим Unbound DNS:
Создаем конфиг /etc/unbound/unbound.conf.d/pi-hole.conf
Туда копируем эту конфигурацию:
Виртуальный адрес access-control: 10.20.20.0/24 меняем на адрес своей подсети!
Ребутим сервер командой reboot и проверяем работу DNS сервера командами:
В первом и третьем случае должен выдаваться статус NOERROR, во втором SERFAIL. Если выводы такие - то все супер.
Внизу еще можно поставить галочку Use DNSSEC и сохранить.
Ну и хорошо бы закрыть веб интерфейс Pihole чтобы его не брутили. Оставим доступ только из внутренней подсети:
Также не забывает тут подставить свою виртуальную сеть вместо 10.55.55.0/24.
6. Чтобы протестировать все настраиваемые сервисы, переходим по ссылкам:
Для большей эффективности Pihole, можно добавить дополнительные источники с адресами для фильтрации мусорного трафика. Я добавлял эти:
Добавляется через веб интерфейс.
По итогу мы имеем свой VPN сервер за границей, соответственно и возможность посещать желаемые ресурсы, свой DNS сервер, с шифрованием трафика, а также блокировщик рекламы, что является приятным дополнением. Эффективность блокировки конечно не 100%, но почти вдвое больше чем изначально. Реклама блокируется не только в браузере, но и в приложениях телефона (например Avito).
Многие из вас пользуются VPN подключением к рабочей локальной сети из дома.
Благодаря этому, подключив VPN вы работаете с рабочей сетью «как будто находясь в ней».
Как выглядит типичная настройка в linux?
В /etc/resolv.conf прописывается (при помощи openresolv или NetworkManager)
Как выглядит работа?
Казалось бы, что может быть проще? Однако путь к решению был долгим и извилистым.
Подробное описание результата
Какой сервис VPN и DNS лучший?
Качество имеет цену, поэтому держитесь подальше от услуг VPN или DNS, которые утверждают, что предлагают эти функции бесплатно: связанные с этим риски значительно перевешивают возможные выгоды. Однако это не означает, что лучший сервис должен быть дорогим. Используя программное обеспечение, такое как IPVanish или StrongVPN, вы получите поддержку компаний, которые стремятся предоставить своим клиентам лучший опыт. Если вы не можете решить, что получить, вы можете положиться на такие сервисы, как StrongVPN, которые предлагают возможности VPN и DNS почти по цене только VPN ( ). Таким образом, все ваши потребности в сетевой безопасности и гео-разблокировке контента будут удовлетворены.
Решение при сравнении VPN с DNS может быть трудным, но в конечном итоге это будет зависеть от того, что вам нужно и что вы хотите сделать. Заинтересованы в получении контента на вашем HTPC? Используйте один из 10 лучших фильмов-дополнений Kodi или 10 лучших приложений для потоковой передачи Android , и не забудьте правильно использовать VPN или DNS, если вам это нужно!
OpenVPN
Разработан компанией OpenVPN Technologies.
Протокол с открытым исходным кодом, который прошёл все возможные проверки безопасности.
Протокол OpenVPN стабилен и может обеспечить хорошую скорость передачи данных. Ещё одно преимущество протокола в том, что он использует для работы стандартные протоколы TCP и UPD, а также может работать на любом из портов. Это усложняет блокировку VPN сервиса провайдерами.
Для подключения к сети с использованием OpenVPN, необходимо устанавливать дополнительное программное обеспечение, что иногда бывает затруднительно или невозможно.
Этот вариант нам бы тоже подошёл, но, к сожалению, из-за необходимости установки клиента, придётся отказаться от этого протокола.
Настраиваем VPN-сервер
Прежде чем приступить к настройке сервера, необходимо определиться, где мы будем размещать наш(и) сервер(а).
Самый простой критерий выбора расположения сервера — это удалённость от вас, т.е. если будет выбор между размещением сервера в Германии или в США, то своё предпочтение следует отдать Германии (если вы находитель в России), т.к., в теории, ваш трафик будет проходить через меньшее кол-во магистралей и будет идти по более короткому маршруту.
Для личного использования или небольшого кол-ва пользователей подойдёт самый простой вариант сервера, к примеру на digitalocean можно взять самую базовую конфигурацию сервера с одним ядром, 1 Gb оперативной памяти и 25 Gb дискового пространства.
От слов к практике, каких-то особых навыков и тайных знаний для настройки VPN-сервера не понадобится.
Для установки и настройки сервера будем использовать следующие инструменты:
- Docker + docker-compose.
- strongswan — реализацию IPSec сервера.
- Let's Encrypt — для генерации сертификатов.
- Radius — для мониторинга и отправки статистических данных.
Начнём с Docker контейнера, в котором и будет запускаться vpn-сервер.
Для управления пользователями мы создаём два скрипта adduser.sh, rmuser.sh для добавления и удаления пользователя соответственно.
adduser.sh
rmuser.sh
На сервере все пользователи будут храниться в файле ipsec.secrets.
Для запуска нашего сервера подготовим следующий скрипт:
Чтобы было проще запустить весь сервер одной командой, завернём всё в docker-compose:
Здесь мы сохраняем в volume ключи сертификата, чтобы при каждом перезапуске сервера не генерировать их снова.
Пробрасываем порты, необходимые для подключения к серверу, а также для генерации сертификатов через Let's Encrypt.
Перед запуском и сборкой контейнеров необходимо создать и заполнить .env файл, в который помещаем следующее:
Выполняя команду docker-compose up -d , мы запускаем наш vpn-сервер, а также radius сервер (если он вам нужен).
IKEv2/IPSec
Был разработан Microsoft совместно с Cisco, существуют реализации протокола с открытым исходным кодом (например, OpenIKEv2, Openswan и strongSwan).
Поддерживает Mobility and Multi-homing Protocol (MOBIKE), что обеспечивает устойчивость к смене сетей.
IKEv2 очень хорошо подходит для использования на мобильных устройствах, которые чаще всего склонны к переключению между WiFi и мобильным интернетом.
IKEv2 имеет нативную поддержку в большинстве операционных систем.
Вот этот вариант нам уже больше подходит, т.к. поддержка Mobility and Multi-homing Protocol будет очень большим плюсом при использовании на мобильных устройствах.
L2TP/IPSec
Протокол во многом схож с PPTP, разрабатывался и принимался практически одновременно с ним. Этот протокол более требователен к вычислительным мощностям, часто используется интернет-провайдерами, т.к. считается более эффективным для построения виртуальных сетей.
L2TP/IPsec позволяет обеспечить высокую безопасность данных, поддерживается всеми современными операционными системами. Есть одно но: он инкапсулирует передаваемые данные дважды, что делает его менее эффективным и более медленным, чем другие VPN-протоколы.
От этого протокола пришлось отказаться т.к. он более требователен к вычислительным мощностям сервера, а значит велик риск получить стабильное, но медленное соединение, что может огорчить пользователей.
Могу ли я защитить свой просмотр с помощью DNS?
Если вы сравниваете услуги VPN и Smart DNS, вам необходимо знать, что служба DNS или Smart DNS не защищает вашу конфиденциальность или активность в Интернете. Все, что он делает – это разрешает доступ к геолокированному контенту. Конечно, при попытке выбрать лучшие альтернативы VPN и DNS важно сравнить их и выбрать то, что соответствует вашим потребностям. В качестве альтернативы вы можете использовать SmartDNS и VPN почти по той же цене, что и VPN.
Рабочая сеть
Если VPN подключение выключено — имя не будет найдно.
Как мы выбирали VPN-протокол
VPN-протокол должен без проблем поддерживаться на мобильных устройствах без установки дополнительного программного обеспечения.
Мы выбрали самые известные реализации протоколов и отсеяли не подходящие по условиям исходной задачи.
А условия всего два, я напомню:
- Стабильное и надёжное подключение.
- Без установки стороннего программного обеспечения на устройство клиента.
Пробегусь по протоколам и кратко расскажу о них + расскажу причины, почему тот или иной протокол нам не подошёл.
Wireguard
На данный момент это самый свежий протокол VPN. Его часто сравнивают с IPSec и OpenVPN, и называют его их заменой, но он всё ещё слишком сырой, чтобы использовать его в больших масштабах.
Лучшие результаты этот протокол показывает на Unix системах, т.к. он реализован в виде модуля ядра Unix. Но эта высокая пропускная способность достигается за счёт замедления сетевой активности других приложений.
Чтобы настроить на своём мобильном устройстве данный протокол, необходимо будет установить клиент, что тоже не всегда возможно в силу обстоятельств.
И снова необходимость установки дополнительного клиента на устройство отменяет все шансы на использование этого протокола в наших целях.
В итоге мы решили остановится на IKEv2/IPSeс, по следующим причинам:
- Поддержка Mobility and Multi-homing Protocol (MOBIKE).
- Нативная поддержка в большинстве операционных систем.
- Обеспечивает высокую скорость соединения.
- Не требователен к ресурсам сервера.
Перейдём от теории к практике.
VPN против Smart DNS: что я должен получить?
В этот момент может показаться, что вы должны получить VPN, поскольку он делает больше вещей. Он сохраняет вас в безопасности и разблокирует контент для вас. Интеллектуальный DNS позволяет разблокировать только контент с географической привязкой и ничего не делать в интересах вашей конфиденциальности. Однако службы Smart DNS имеют преимущества перед VPN, что может заставить вас задуматься о том или ином.
Рабочая сеть
Если VPN подключение выключено — имя не будет найдно.
PPTP (Point-To-Point Tunneling Protocol)
Один из самых старейших VPN протоколов, разработанный компанией Microsoft. Из-за солидного возраста протокол поддерживается большинством операционных систем, но в то же время не может обеспечить стабильное и надёжное соединение. Компания Microsoft советует использовать L2TP или SSTP на замену PPTP.
Этот протокол прост в настройке и не требователен к ресурсам сервера, но проблемы с безопасностью заставляют отказаться от его использования в наших целях.
VPN против DNS: что это?
Для начала нужно понять основные понятия. Что такое VPN? Что такое DNS? Как они могут помочь мне защитить мой просмотр и позволить мне получать доступ к геолокационному контенту (например, телеканалам Netflix и США за пределами доступных стран)? Некоторое время назад мы написали небольшое руководство, в котором говорили об использовании VPN с Kodi . В этой статье вы можете найти общее представление о том, что такое VPN-сервис.
По сути, если вы используете службу VPN, вы заставляете удаленные веб-сайты «думать», что просматриваете их из какого-то другого места. Что действительно происходит, так это то, что вы подключаетесь через сервер, который перенаправляет ваше соединение. Это может иметь дополнительное преимущество: шифровать ваше общение, защищать вашу конфиденциальность и предоставлять вам доступ к геолокационному контенту. Шифрование может защитить вас во время просмотра или потоковой передачи контента (например, с помощью аддонов Kodi).
Сбор статистики с VPN-сервера
Нам ещё было очень интересно, сколько пользователей подключено в данный момент к серверу, какой объём трафика потребляется и раздаётся на сервере. Изначально хотели сделать всё максимально просто и забирать статистику через команды ipsec, но столкнулись с тем, что мы можем терять данные из-за того, что пользователь может отключиться или подключиться в период таймаута между командами для сбора статистики.
Испробовав разные варианты, решили остановиться и разобраться, как настроить FreeRadius сервер, который как раз и будет получать данные от ipsec и отправлять данные со статистикой нам.
FreeRadius сервер можно использовать и для авторизации пользователей, но мы остановились только на сборе статистики.
Для включения radius необходимо добавить следующее в конфигурацию ipsec:
Чтобы наши данные уходили на наш endpoint, включаем модуль rest. Для этого в файле /etc/raddb/mods-enabled/rest настраиваем блок accounting, получится что-то вроде:
Здесь мы можем как угодно комбинировать данные и отправлять на наш сервер.
При настройке VPN сервера столкнулись с некоторыми нюансами, вроде таких, что устройства Apple не могут подключить к серверу, если на нём будет самоподписанный сертификат, всё заработало только после того, как сертификат начали генерировать через Let's Encrypt.
Какие недостатки присутствуют в нашей сборке?
- Если radius сервер не отвечает, то пользователь не сможет подключиться к VPN.
- Если закончится срок действия сертификата, пользователь не сможет авторизоваться на VPN-сервере.
Что можно было бы добавить в следующих версиях VPN-сервера?
- Авторизацию пользователей вынести в radius.
- Добавить автоматическое обновление сертификата.
- Провести рефакторинг скриптов, а также файлов конфигураций.
- Добавить health-check для впн сервера.
Что же у нас получилось в итоге?
Методом проб и ошибок мы пришли к варианту, который описан в статье, прежде всего мы придерживались принципа "делай проще", не стали изобретать свои велосипеды и воспользовались уже готовыми инструментами типа Docker, FreeRadius. Да, скорее всего тут есть место для оптимизации, ужесточения политик безопасности, автоматизации. Но наш вариант отлично подойдёт для личного использования и для использования в небольших компаниях, если вам нужно организовать доступ к приватной (закрытой) информации.
1. Для подключения беспроводного маршрутизатора с прошивкой от Padavan (Asus RT-N56U, Asus RT-65U и др.) подключитесь к маршрутизатору через Web интерфейс и выберете в корневом меню – “VPN клиент” и передвиньте ползунок “Включить VPN клиент” в положение включено:
2. Запустите процесс OpenVPN на сервере VPNKI и скачайте профиль соединения, сохраните файл vpnki_XXXXXX.ovpn на свой компьютер, он нам понадобится. Допустим, что вы запустили на сервере процесс OpenVPN поверх протокола UDP с шифрованием
3. Дальше в выпадающем пункте меню “Протокол VPN клиента” выбираем – “OpenVPN”
В строке “Порт” вписываем значение, выданное вам при старте процесса OpenVPN на сайте. Это же значение находится в скачанном на компьютер профиле подключения
В меню “Транспорт” выбирайте “UDP” (если на сервере вы запустили вариант с UDP), в меню “Уровень инкапсуляции” выбираем “L3-TUN(IP)”.
“Тип аутентификации” устанавливаем “TLS: username/password”.
После этого, в строку “Логин” вписываем логин вида: “userXXXXX”, полученный на сайте при регистрации туннеля и в строку “Пароль” – пароль, который вы вводили там-же.
Меню “Алгоритм проверки подлинности” лучше оставить без изменения - “[SHA1]SHA-1, 160bit”.
В меню “Блокировать доступ со стороны VPN-сервера” если вы доверяете сервису – выбирайте “Нет (Site-to-Site), только маршрутизация”, в противном случае настраивайте согласно ваших требований.
Пункты меню “Получать адреса DNS от VPN-сервера” и “Направлять весь трафик через VPN интерфейс?” настраиваются под ваши требования.
4. Для дальнейших настроек переходим на вкладку “Сертификаты/ключи OpenVPN”:
5. Любым текстовым редактором открываем файл “vpnki_XXXXXX.ovpn” скачанный с сайта ранее
6. Выделяем и копируем текст начиная со строки -----BEGIN CERTIFICATE----- и заканчивая строкой -----END CERTIFICATE----- (включая эти строки) и затем вставляем эти строки в поле “ca.crt (Root CA Certificate)” в Web интерфейсе маршрутизатора.
Затем, также выделяем и копируем текст начиная со строки -----BEGIN OpenVPN Static key V1----- и заканчивая строкой -----END OpenVPN Static key V1----- (включая эти строки) и затем вставляем эти строки в поле “ta.key (TLS Auth Key) - secret” в Web интерфейсе маршрутизатора.
7. ВСЁ. Настройка закончена, осталось нажать кнопку “Применить” и перейти на вкладку “Настройки” и если все сделано правильно в конце строки “ Удаленный VPN-сервер (IP или DNS-хост)” мы увидим надпись “Подключено” (не торопитесь это может занимать несколько секунд).
8. Дальнейшие проверки выполняются с сайта согласно инструкций. После успешного установления соединения между вашим маршрутизатором и сервером vpnki вы можете проверить связь при помощи утилит на странице "Инструменты" на вашей личной странице.
PS: В целях борьбы с зависшими сессиями мы принудительно отключаем пользовательские туннели с протоколом OpenVPN в 00:00 по Московскому времени. При правильной настройке соединения должны автоматически переустановиться.
Наша система будет работать с многими типами домашних и офисных маршрутизаторов. Более подробно смотрите в разделе по настройке оборудования, а начать настройку лучше с этого примера.
Итак, вы хотите узнать, выбрать ли DNS или DNS для вашего домашнего сервера? В этой статье мы сравним VPN с DNS или, как некоторые скажут, VPN с сервисами Smart DNS. К концу этой статьи вы должны знать различия между ними, а также преимущества использования одного или другого. Это позволит вам принять обоснованное решение. Выберите этот лучший VPN и DNS для вашего домашнего сервера с этим небольшим, но полезным руководством.
Личный сервер на hetzner
С ним всё немного хитрее
Локальная подсеть — 10.10.10.0/24 (т.е. 10.10.10.* — из подсети)
Домен — *.my.domain
Локальный DNS сервер — 10.10.10.253
Сервер my.domain имеет белый IP адрес и доступен извне
На сервере стоит nginx, который проксирует запросы вида subdomain.my.domain машинам из локальной подсети.
С другой стороны, при включенном VPN мои подключения вида:
должны попадать напрямую на машину из локальной подсети.
Зачем?
Мне так удобно. Я один раз настроил рабочую машину, и прозрачно гуляю по рабочей сети и личной сети. Снаружи по *.my.domain пользователи видят ровно один сервер (который по совместительству и VPN) и к локальным машинам доступа не имеют. Я же могу напрямую подключать по ssh как к машинам из рабочей сети, так и из личной.
«Подожди», скажет мне юзер.
«Я просто пропишу /etc/resolv.conf»:
«И всё будет работать.»
Решение
Мне пришлось несколько часов мучать гугль и знакомых админов, чтобы найти решение.
Мой пост призван сэкономить ваше время.
Итак, прежде всего нужно поставить bind. Рабочая машина у меня на Arch Linux:
Дальше настраиваем /etc/named.conf, добавляет туда:
В openvpn скрипт для my.domain добавляем:
Добавляем скрипт /usr/share/openvpn/update-dns-my.domain который будет обновлять настройки bind и перезапускать его после установления VPN подключения:
Как это работает?
- openvpn запускает скрипт /usr/share/openvpn/update-dns-my.domain
- скрипт в файл /usr/share/openvpn/named.conf.my.domain записывает содержимое /usr/share/openvpn/named.conf.my.domain.template
- скрипт перезапускает bind
- bind вычитывает настройки зоны my.domain из обновлённого файла
- зона my.domain теперь ресолвится DNS сервером из локальной сети (доступен через VPN)
- openvpn запускает скрипт /usr/share/openvpn/update-dns-my.domain
- скрипт очищает содержимое /usr/share/openvpn/named.conf.my.domain
- скрипт перезапускает bind
- bind вычитывает настройки зоны my.domain из обновлённого файла (забывает про зону)
- зона my.domain теперь ресолвится общедоступными DNS
Как это выглядит на практике?
Забавно, что для получения такого простого поведения пришлось проделать столько работы.
У нас было: 10 самых простых конфигураций серверов на DigitalOcean, мобильные устройства на базе iOS, сервер для сбора статистики, никакого опыта в настройке VPN-серверов, а также неукротимое желание сделать быстрый, надёжный и простой в использовании VPN-сервис, которым будет приятно пользоваться. Не то, чтобы всё это было категорически необходимо, но если уж начали, то к делу надо подходить серьёзно.
В этой статье кратко опишу, как мы выбирали VPN-протокол, как настраивали сервер и как организовали сбор статистики с каждого VPN-сервера. Не стоит рассчитывать на подробную пошаговую инструкцию. В статье я буду приводить отрывки из файлов конфигураций с краткими комментариями.
Я думаю, что в IT сфере уже не найти человека, который не знал бы, что такое VPN и зачем он нужен.
Но если тезисно объяснять, зачем нужен VPN современному человеку, то получится примерно следующее:
- Если у вас есть какие-то внутренние (приватные) ресурсы, доступ к которым должен быть ограничен из глобальной сети интернет.
- Если вам необходимо организовать защищенное соединение между двумя сетями.
- Если вам нужно получить доступ к ресурсам, которые по тем или иным причинам недоступны из вашей страны (меняется ваше местоположение относительно вашего IP-адреса).
Читайте также: