- VPN в домашнюю локалку
- Конфигурация VPS
- Конфигурация OpenWRT
- Настраиваем смартфон
- Готово
- Как поднять OpenVPN сервер на Ubuntu 22.04?
- Где взять VPS(виртуальную машину) и как к ней подключится?
- Создание нового пользователя и вход под ним(по соображениям безопасности)
- Предварительная подготовка
- Установка пакетов
- Настройка FireWall
- Настройка директорий VPN
- Настройка VPN
- Конфигурируем конфиги
- Настройка vars
- Настройка /etc/nat(FireWall)
- Создание ключей сервера
- Настройка сервера
- Запуск сервера
- Запуск сервера
- Генерация сертификатов
- Генерация сертификатов
- Задание статических адресов клиентам
VPN в домашнюю локалку
TL;DR: я устанавливаю Wireguard на VPS, подключаюсь к нему с домашнего роутера на OpenWRT, и получаю доступ к домашней подсети с телефона.
Если вы держите на домашнем сервере личную инфраструктуру или у вас дома множество девайсов управляемых по IP, то вы наверняка хотите иметь к ним доступ с работы, из автобуса, поезда и метрo. Чаще всего для аналогичных задач приобретается IP у провайдера, после чего порты каждого сервиса пробрасываются наружу.
Вместо этого я настроил VPN с доступом в домашнюю локалку. Плюсы такого решения:
- Прозрачность: чувствую себя как дома при любых обстоятельствах.
- Простота: настроил и забыл, не надо думать о пробросе каждого порта.
- Цена: у меня уже есть VPS, для таких задач современный VPN почти бесплатен по ресурсам.
- Безопасность: ничего не торчит наружу, можно оставить MongoDB без пароля и никто не утащит данные.
- VPS (в моём случае на Debian 10).
- Роутер на OpenWRT.
- Телефон.
- Домашний сервер с каким-нибудь веб-сервисом для проверки.
- Прямые руки.
Конфигурация VPS
Для дела хватит даже самого нищенского VPS за 30 рублей в месяц, если вам повезёт такой урвать.
Все операции на сервере я выполняю от рута на чистой машине, при необходимости добавьте `sudo` и адаптируйте инструкции.
Wireguard не успели завезти в стейбл, поэтому я выполняю `apt edit-sources` и добавляю бэкпорты двумя строчками в конец файла:
deb http://deb.debian.org/debian/ buster-backports main
# deb-src http://deb.debian.org/debian/ buster-backports main
Пакет устанавливается привычным образом: apt update && apt install wireguard .
Далее генерируем пару ключей: wg genkey | tee /etc/wireguard/vps.private | wg pubkey | tee /etc/wireguard/vps.public . Эту операцию повторите ещё дважды для каждого девайса-участника схемы. Поменяйте пути к файлам с ключами для другого устройства и не забудьте о безопасности приватных ключей.
Теперь готовим конфиг. В файл /etc/wireguard/wg0.conf помещается конфиг:
[Interface]
Address = 192.168.99.1/24
ListenPort = 57953
PrivateKey = 0JxJPUHz879NenyujROVK0YTzfpmzNtbXmFwItRKdHs=
[Peer] # OpenWRT
PublicKey = 36MMksSoKVsPYv9eyWUKPGMkEs3HS+8yIUqMV8F+JGw=
AllowedIPs = 192.168.99.2/32,192.168.0.0/24
[Peer] # Smartphone
PublicKey = /vMiDxeUHqs40BbMfusB6fZhd+i5CIPHnfirr5m3TTI=
AllowedIPs = 192.168.99.3/32
В секции [Interface] указываются настройки самой машины, а в [Peer] — настройки для тех, кто будет к ней подключаться. В AllowedIPs через запятую прописываются подсети, которые будут маршрутизироваться в соответствующего пира. Из-за этого пиры устройств-«клиентов» в подсети VPN должны иметь маску /32 , всё остальное будет маршрутизироваться сервером. Так как домашняя сеть будет маршрутизироваться через OpenWRT, в AllowedIPs соответствующего пира дописываем домашнюю подсеть. В PrivateKey и PublicKey разложите приватный ключ сгенерированный для VPS и публичные ключи пиров соответственно.
На VPS осталось только запустить команду, которая поднимет интерфейс и добавит его в автозапуск: systemctl enable —now wg-quick@wg0 . Текущий статус соединений можно проверить командой wg .
Конфигурация OpenWRT
Всё, что нужно для этого этапа есть в модуле luci (веб-интерфейс OpenWRT). Залогиньтесь в нём и в меню System откройте вкладку Software. OpenWRT не хранит кэш на машине, поэтому надо обновить список доступных пакетов, нажав на зелёную кнопку Update lists. После завершения в фильтр вбиваете luci-app-wireguard и, глянув на окошко с красивым деревом зависимостей, устанавливаете этот пакет.
В меню Networks выбираете Interfaces и жмёте зелёную кнопку Add New Interface под списком уже имеющихся. После ввода имени (так же wg0 в моём случае) и выбора протокола WireGuard VPN открывается форма настроек с четырьмя вкладками.
На вкладке General Settings надо вбить приватный ключ и IP адрес заготовленный для OpenWRT вместе с подсетью.
На вкладке Firewall Settings заводите интерфейс в локальную сеть. Так соединения из VPN будут свободно попадать в локалку.
На вкладке Peers жмёте единственную кнопку, после чего в обновленной форме заполняете данные VPS-сервера: публичный ключ, Allowed IPs (надо всю VPN-подсеть замаршрутизировать в сервер). В Endpoint Host и Endpoint Port вводите соответственно IP адрес VPS с портом в ранее указанным в директиве ListenPort. Отметьте Route Allowed IPs, чтобы были созданы маршруты. И обязательно заполните Persistent Keep Alive, иначе туннель туннель от VPS к роутеру будет обрываться, если последний за NAT.
После этого можно сохранить настройки, а затем на странице со списком интерфейсов нажать Save and apply. При необходимости явно запустите интерфейс кнопкой Restart.
Настраиваем смартфон
Вам потребуется клиент Wireguard, он доступен в F-Droid, Google Play и App Store. Открыв приложение жмёте плюсик и в секции Interface вводите имя соединения, приватный ключ (публичный сгенерируется автоматически) и адрес телефона с маской /32. В секции Peer указываете публичный ключ VPS, пару адрес: порт VPN-сервера в качестве Endpoint и маршруты до VPN- и домашней подсети.
Жмёте на дискетку в углу, включаете и…
Готово
Теперь вы можете получить доступ к домашнему мониторингу, менять настройки роутера, или делать что угодно на уровне IP.
Как поднять OpenVPN сервер на Ubuntu 22.04?
В эпоху массовых блокировок и ограничений в сети, сохранение своей онлайн приватности становится все более актуальным. И здесь вам на помощь приходит OpenVPN – одно из самых популярных и надежных решений для создания безопасного туннеля в интернет. Если вы хотите обойти географические ограничения, обеспечить защиту своих данных или просто настроить собственный сервер для удаленного доступа к локальным ресурсам, то данная статья именно для вас! Мы рассмотрим этапы создания и настройки своего собственного OpenVPN сервера, чтобы вы могли насладиться свободным и безопасным интернетом, не зависимо от места нахождения. Присоединяйтесь к нам и давайте начнем этот увлекательный путь в мир безграничной свободы в онлайне!
Где взять VPS(виртуальную машину) и как к ней подключится?
Я лично использовал justhost(тык!) и брал самую дешёвую виртуалку в Нидерландах.
Далее будет инструкция по подключению:
- Зарегистрироваться, оплатить VPS
- Пока Вы ждёте её включение, скачайте PuTTy(тык!, тык!)
- Когда VPS запустилась, Вам на почту по которой вы регистрировались приходит письмо, в котором есть пароль от пользователя root, и IPv4 адрес, запоминаем их
- Открываем PuTTy и в поле Host Name (or IP address) вводим ip(IPv4) адрес который мы запомнили из письма и нажимаем Open
- Соглашаемся(Accept) с предупреждением о безопасности(оно появляется 1 раз)
- Если вы увидели надпись login as: , то Вы подключились
- Вводим root и при запросе пароля вводим пароль из письма
Создание нового пользователя и вход под ним(по соображениям безопасности)
- useradd -m
- passwd
- usermod -aG sudo
- sudo chsh -s /bin/bash
Подключаемся заново и входим под ранее созданным пользователем (предыдущий пункт, всё с 3 шага)
Предварительная подготовка
Установка пакетов
- sudo apt install easy-rsa
- sudo apt install openvpn
- sudo apt install iptables-persistent
Настройка FireWall
Настройка директорий VPN
- sudo mkdir -p /etc/openvpn/keys
- sudo mkdir /etc/openvpn/easy-rsa
- cd /etc/openvpn/easy-rsa
- sudo cp -r /usr/share/easy-rsa/* .
- sudo mkdir /etc/openvpn/ccd
Настройка VPN
Конфигурируем конфиги
Настройка vars
export KEY_COUNTRY=«RU» export KEY_PROVINCE=«Moscow» export KEY_CITY=«Moscow» export KEY_ORG=«sten» export KEY_ORG=»fdjgbi@sten.com« export KEY_CN=«sten» export KEY_OU=«sten» export KEY_NAME=«vpn.StenLi.com» export KEY_ALTNAMES=«vpn2.StenLi.com»
KEY_ORG, KEY_ORG, KEY_CN, KEY_OU, KEY_NAME, KEY_ALTNAMES — можно указывать всё, что угодно
- нажимаем по порядку: ctrl+x, y, enter
Настройка /etc/nat(FireWall)
#!/bin/sh # Включаем форвардинг пакетов echo 1 > /proc/sys/net/ipv4/ip_forward # Сбрасываем настройки брандмауэра iptables -F iptables -X iptables -t nat -F iptables -t nat -X # Разрешаем инициированные нами подключения извне iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT # Разрешаем подключения по SSH iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT # Разрешаем подключения к OpenVPN iptables -A INPUT -i eth0 -p udp --dport 1194 -j ACCEPT # Разрешает входящий трафик из tun0 iptables -A INPUT -i tun0 -j ACCEPT # Разрешает транзитный трафик между eth0 и tun0: iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT iptables -A FORWARD -i tun0 -o eth0 -j ACCEP # Запрещаем входящие извне iptables -A INPUT -i eth0 -j DROP # Разрешаем инициированные нами транзитные подключения извне iptables -A FORWARD -i eth0 -o tun0 -m state --state ESTABLISHED,RELATED -j A # Запрещаем транзитный трафик извне iptables -A FORWARD -i eth0 -o tun0 -j DROP # Включаем маскарадинг для локальной сети iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.0/24 -j MASQUERADE
- нажимаем по порядку: ctrl+x, y, enter
- sudo chmod 755 /etc/nat
Создание ключей сервера
- sudo ./easyrsa init-pki
- sudo ./easyrsa build-ca
- вводим пароль и запоминаем его(Enter New CA Key Passphrase)
- sudo ./easyrsa gen-req server nopass
- sudo ./easyrsa sign-req server server
После ввода команды подтверждаем правильность данных, введя yes,
и вводим пароль, который указывали при создании корневого сертификата.
- sudo ./easyrsa gen-dh
- sudo openvpn —genkey secret pki/ta.key
- sudo cp pki/ca.crt /etc/openvpn/keys/
- sudo cp pki/issued/server.crt /etc/openvpn/keys/
- sudo cp pki/private/server.key /etc/openvpn/keys/
- sudo cp pki/dh.pem /etc/openvpn/keys/
- sudo cp pki/ta.key /etc/openvpn/keys/
Настройка сервера
local 999.999.999.999 port 1194 proto udp dev tun ca keys/ca.crt cert keys/server.crt key keys/server.key dh keys/dh.pem tls-auth keys/ta.key 0 server 10.0.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt client-to-client client-config-dir /etc/openvpn/ccd keepalive 10 120 max-clients 32 persist-key persist-tun status /var/log/openvpn/openvpn-status.log log-append /var/log/openvpn/openvpn.log verb 4 mute 20 daemon mode server tls-server comp-lzo tun-mtu 1500 mssfix 1620 cipher AES-256-GCM topology subnet push «redirect-gateway def1» push «dhcp-option DNS 8.8.8.8» up /etc/nat
- client-to-client даёт возможность клиентам видеть и общаться друг с другом в локальной сети
- client-config-dir /etc/openvpn/ccd мы указываем директорию в которой задаём статические ip адреса клиентам. Об этом позже
— Меняем local 999.999.999.999 на local
Запуск сервера
Запуск сервера
- sudo systemctl start openvpn@server
- sudo systemctl status openvpn@server
- Вы запустили сервер. УРА.
Генерация сертификатов
Генерация сертификатов
Со 2 по 4 выполняется 1 раз!
После этого запускаем 1, и 5+
#!/bin/bash if [ $# -ne 1 ]; then echo «Usage: $0 --client-name» exit 1 fi client_name=$1 password=«» rm -r /tmp/keys mkdir /tmp/keys cd /etc/openvpn/easy-rsa export EASYRSA_CERT_EXPIRE=1460 echo «$password» | ./easyrsa build-client-full $client_name nopass cp pki/issued/client_name.key pki/ca.crt pki/ta.key /tmp/keys/ chmod -R a+r /tmp/keys cat /tmp/keys/$client_name.ovpn client resolv-retry infinite nobind remote 999.999.999.999 1194 proto udp dev tun comp-lzo ca ca.crt cert $client_name.crt key $client_name.key tls-client tls-auth ta.key 1 float keepalive 10 120 persist-key persist-tun tun-mtu 1500 mssfix 1620 cipher AES-256-GCM verb 0 EOF echo «OpenVPN client configuration file created: /tmp/keys/$client_name.ovpn»
- Заменяем remote 999.999.999.999 1194 на remote 1194
- sudo bash ./gen_sert.sh
- cd /tmp/keys
- Например с помощью winscp достаем из этой директории сертификаты(получение файлов, скачать)
Задание статических адресов клиентам
ifconfig-push 10.0.0. 255.255.255.0