Браузерный VPN и роутерный VPN одновременно
Хей, нужно узнать, будет ли браусерный/ програмнный VPN считывать информацию сети из роутерного VPN'а, если такой подключен, или от моего инет провайдера?
Спасибо.
Хей, нужно узнать, будет ли браусерный/ програмнный VPN считывать информацию сети из роутерного VPN'а, если такой подключен, или от моего инет провайдера?
Спасибо.
Большинство распространённых протоколов VPN, вроде OpenVPN можно заблокировать. Однако есть решение - технология Shadowsocks. Эта технология работает по принципу прокси, но с шифрованием. Она маскируется под https трафик, поэтому использование этого протокола сложно вычислить и заблокировать. В этой статье мы рассмотрим как выполняется настройка Shadowsocks Ubuntu
Прежде всего, обратите внимание, что для работы Shadowsocks, как собственно и для VPN вам понадобится сервер, в стране, где нужные вам сайты не заблокированы. Именно на этом сервере устанавливается сервер Shadowsocks. На вашем компьютере или телефоне устанавливается клиент, который подключается к этому серверу. Между вашим клиентом и сервером трафик будет зашифрован поэтому провайдер, не сможет понять какой сайт вы открываете, поэтому не заблокирует его. А уже на сервере запрос будет расшифрован и в открытом виде поступит на сайт.
Реализация shadowsocks на Си есть в официальных репозиториях Ubuntu. Вы можете установить её с помощью команды:
sudo apt install shadowsocks-libev
Конфигурационный файл shadowsocks находится по пути /etc/shadowsocks-libev/config.json и по умолчанию выглядит вот так:
{
"server":["::1", "127.0.0.1"],
"mode":"tcp_and_udp",
"server_port":8388,
"local_port":1080,
"password":"<Password>",
"timeout":86400,
"method":"chacha20-ietf-poly1305"
}
Вот что означают эти сроки:
server - IP адрес, на котором программа будет ожидать соединений, должно соответствовать внешнему IP адресу вашего сервера.
mode - указывает какой протокол соединение использовать - tcp, udp или оба.
server_port - порт сервера, который вы будете использовать для подключения, по умолчанию - 8388.
local_port - порт клиента, к которому будет подключаться браузер по протоколу SOCS5.
password - пароль, который будет использоваться клиентами для подключения.
method - метод шифрования, по умолчанию используется chacha20-ietf-poly1305.
Для начала работы с shadowsocks надо установить в поле server внешний IP адрес вашего сервера. Также в поле password, надо прописать пароль, который будет использоваться на клиенте для подключения к серверу. Всё остальное можно оставить по умолчанию. Также после внесения изменений в конфигурационный файл необходимо перезапустить сервис:
sudo systemctl restart shadowsocks-libev
На этом базовая настройка закончена, можно переходить к подключению. Если вы хотите запустить сервер для отладки, чтобы видеть всё, что происходит, можете остановить systemd службу и запустить его вручную:
/usr/bin/ss-server -c /etc/shadowsocks-libev/config.json
Для подключения вам понадобится клиент. В Linux можно использовать GUI клиент от Outline. Однако и его мы не будем рассматривать в этой статье. Мы поговорим про использование консольного клиента. Его можно получить установив тот же пакет, что и для сервера. Вы можете собрать его из исходников, как описано выше или установить из репозиториев дистрибутива:
sudo apt install shadowsocks-libev
После установки нужно отредактировать конфигурационный файл, так чтобы он был таким же как и на сервере. Например:
{
"server": "<remote_server_ip",
"mode":"tcp_and_udp",
"server_port":8388,
"local_port":1080,
"password":"<Password_from_remote_server_config>",
"timeout":86400, "method":"chacha20-ietf-poly1305"
}
После этого можно запустить клиент:
sudo ss-local -v -c /etc/shadowsocks-libev/config.json
Опция -v здесь означает максимально подробный вывод, а -c - указывает путь к конфигурационному файлу. Клиент запущен, но ваш трафик ещё не перенаправляется через тоннель. Для этого надо настроить подключение к прокси в вашем браузере. Клиент ожидает соединений от браузера на порту 1080 (по умолчанию).
Для настройки прокси в Firefox откройте Настройки. В разделе Основные пролистайте в самый низ и найдите Параметры сети, тут нажмите Настроить и в открывшемся окне введите адрес 127.0.0.1 и порт 1080. После этого Firefox будет использовать Shadowsocks для открытия сайтов. Если вы откроете сайт eth0.me, то увидите, что ваш IP адрес соответствует адресу сервера, на котором установлен Shadowsocks.
Обратите внимание, что многие провайдеры блокируют сайты по DNS, так что лучше в настройках своего роутера указать DNS Google - 8.8.8.8 или включить в браузере DNS over HTTPS.
WireGuard - это новый, современный VPN сервис с открытым исходным кодом, который позиционирует себя как замену OpenVPN и использует современную криптографию. Он реализован в виде модуля ядра Linux. Изначально он поддерживал только Linux, но потом были разработаны приложения для Windows, MacOS и Android.
В установке нет ничего сложного, выполните такие команды:
sudo apt update
sudo apt install wireguard
Для того, чтобы пакеты перенаправлялись туда, куда надо, нужно разрешить перенаправление сетевых пакетов на уровне ядра. Для этого откройте файл /etc/sysctl.conf и добавьте в конец такие строки:
net.ipv4.ip_forward = 1
net.ipv6.conf.default.forwarding = 1
net.ipv6.conf.all.forwarding = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0
Затем необходимо выполнить команду sysctl -p чтобы система перечитала конфигурацию:
sysctl -p
Для сервера надо создать приватный и публичный ключ. Эти ключи, потом надо будет записать в конфигурационный файл сервера и клиента, сами файлы ключей вам не нужны, поэтому можете создавать их где хотите, например, в домашней папке:
wg genkey | sudo tee server_private.key | wg pubkey | sudo tee server_public.key
Аналогичным образом создаём ключи для клиента. Команда та же:
wg genkey | sudo tee client_private.key | wg pubkey | sudo tee client_public.key
Наш конфигурационный файл сервера будет находится по пути /etc/wireguard/wg0.conf и будет выглядеть следующим образом:
[Interface]
Address = 10.66.66.1/24,fd42:42:42::1/64
ListenPort = 63665
PrivateKey = <server_private.key>
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A
POSTROUTING -o enp0s8 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o enp0s8 -j MASQUERADE PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o enp0s8 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o enp0s8 -j MASQUERADE [Peer]
PublicKey = <client_public.key>
AllowedIPs = 10.66.66.2/32,fd42:42:42::2/128
Файл разделен на две секции:
Interface - настройка сервера;
Peer - настройка клиентов, которые могут подключаться к серверу, секций Peer может быть несколько.
В данном случае мы настраиваем сервер WireGuard для работы с IPv4 и IPv6 одновременно, вот, что значат основные параметры:
Address - адрес сервера в сети VPN;
ListenPort - порт, на котором будет ожидать подключения WireGuard;
PrivateKey - приватный ключ сервера, сгенерированный ранее;
PostUp - команда, которая выполняется после запуска сервера. В данном случае включается поддержка MASQUERADE для интерфейса enp0s8, а также разрешается прием пакетов на интерфейсе wg0. Сетевые интерфейсы вам придется заменить на свои.
PostDown - выполняется после завершения работы WireGuard, в данном случае удаляет все правила, добавленные в PostUp.
Секции Peer содержат настройки клиентов, которые могут подключится к серверу:
PublicKey - публичный ключ клиента, сгенерированный ранее;
AllowedIPs - IP адрес, который может взять клиент. Обратите внимание, маска для IPv4 должна быть 32.
Теперь можно переходить к созданию конфигурационного файла непосредственно для клиента.
Конфигурационный файл клиента будет выглядеть примерно так:
[Interface]
PrivateKey = <client_private.key>
Address = 10.66.66.2/24,fd42:42:42::2/64
DNS = 8.8.8.8,8.8.4.4
[Peer]
PublicKey = <server_public.key>
Endpoint = 192.168.56.101:63665
AllowedIPs = 0.0.0.0/0,::/0
Обратите внимание, что все ключи мы генерируем на сервере, а затем уже скидываем конфигурационный файл клиента на компьютер, который надо подключить к сети. Рассмотрим подробнее что за что отвечает:
PrivateKey - приватный ключ клиента, сгенерированный ранее;
Address - IP адрес интерфейса wg0 клиента;
DNS - серверы DNS, которые будут использоваться для разрешения доменных имён;
PublicKey - публичный ключ сервера, к которому надо подключится.
Endpoint - здесь надо указать IP адрес сервера, на котором установлен WireGuard и порт;
AllowedIPs - IP адреса, трафик с которых будет перенаправляться в сеть VPN, в данном примере выбраны все адреса.
После того, как вы внесли все изменения, скопируйте файл на компьютер клиента под именем /etc/wireguard/wg0.conf.
Для запуска сервера используйте такую команду:
sudo wg-quick up wg0
Аналогично можно использовать systemd:
sudo systemctl start wg-quick@wg0
С помощью systemd можно настроить автозагрузку интерфейса:
sudo systemctl enable wg-quick@wg0
Подключение клиента выполняется аналогично запуску сервера. Если WireGuard уже установлен, а конфигурационный файл клиента находится по пути /etc/wireguard/wg0.conf:
sudo wg-quick up wg0
Если у вас не получается установить WireGuard самому, вы можете попробовать скрипт автоматической установки.
Взять с собой побольше вкусняшек, запасное колесо и знак аварийной остановки. А что сделать еще — посмотрите в нашем чек-листе. Бонусом — маршруты для отдыха, которые можно проехать даже в плохую погоду.
Соре, что пишу тут, это не реклама, просто, что-то мне подсказывает, что только тут можно найти нормального гика в этом. Я уже все облазил(
Стиль ведения канала - новости мира ВПН/технологий
Для ЛЛ: Тут о роутерах Keenetic, Python и ChatGPT.
Как полноценно пользоваться VPN разделяя при помощи роутера трафик на тот, что должен идти напрямую и тот, что должен ходить через VPN туннель на основании доменного имени, т.е. адресе сайта, без необходимости постоянно лазить в админку и что-то там шаманить?
Можно воспользоваться готовыми решениями типа KVAS, xKeen, ADGh и т.п. или каким-нибудь облачным «Hosted Router». Но что если железо домашнего роутера подкачало, а открыв админку облачного роутера становится понятно, что ничего не понятно?
Так со мной и случилось. В моем распоряжении скромный роутер Keenetic Air, он хорош для своих задач, но у него на борту мало памяти и нет USB порта, из-за чего невозможно использование необходимых мне готовых решений на основе OPKG пакетов.
Но делать, что-то надо и мелькнула мысль - а почему бы не попробовать найти какое-то более-менее подходящее решение и подстроить его под себя?
Однако, с попыткой разобраться в исходном коде программ других людей пришло понимание, что это просто безнадежно и проще будет сделать что-то самостоятельно, постепенно вникая в процесс и принципы работы всего этого сетевого добра.
Никогда не считал себя программистом, у меня есть лишь базовый опыт работы с командной строкой в Win и Unix системах, разве что когда-то давно я владел ZX Spectrum c его вариацией Basic...
С этим, безусловно «солидным» багажом я и решил попробовать.
Не обладая опытом программирования, пришлось обратиться за помощью к ChatGPT. Это был довольно занятный процесс, при всей мощи искусственного интеллекта, какой промт ему не напиши, он не выдаст результат на 100% соответствующий твоим ожиданиям и уж тем более готовое и полностью функционирующее решение, но тем не менее он помогает облегчить задачу тысячекратно.
Результатом такого совместного труда стал DNSmasq сервер на Python который выступая промежуточным звеном между конечным устройством (роутером или ПК) и публичным DNS сервером закидывает в роутер статические маршруты к указанным пользователем доменам, для перенаправления к ним траффика через VPN подключение.
Видео с демонстрацией:
Во избежание случайного возбуждения товарища майора для демонстрации выбран закрытый для российских IP-адресов ChatGPT, но какие домены добавлять в фильтр дело каждого ;)
Код доступен на GitHub.
Из основных проблем это низкая производительность и странная стабильность – может работать сутками, а может замереть через пару минут после запуска.
Скрипт скорее является «proof of concept» т.е. демонстрацией жизнеспособности задумки, работает на Windows и Unix в т.ч. на VPS.
Подытоживая. Думаю, что для непрограммиста получилось вполне неплохо ;)
Пост запилил скорее себе на память, но, если кто чего подскажет в плане какого-то готового решения аналогичного функционала или изменений в коде - тоже будет хорошо, а если кому-то окажется полезным так и вообще - восторг.
Всем – Добра.
У меня есть ощущение, что борьба с VPN будет эпичней блокировки телеграм!
Все темы, которые были связаны с установкой, подключением и обходом блокировок с помощью VPN пропали с форума.
Ранее Роскомнадзор предложил с 1 марта ограничить доступ к информации об обходе блокировок
Многие сталкиваются с проблемой получения доступа к OPENAI или переживают из-за большой цены за подписку. Специально для вас, мы встроили GPT-4 в Telegram бота, который также работает с изображениями. Наверное, это лучший бот, которого вы когда-либо видели. Тестируйте: t.me/Gpt4_NeuroBot?start=14