Как написать свой vpn на python
Перейти к содержимому

Как написать свой vpn на python

  • автор:

VPN сервер, создание VPN подключения

Каким образом можно создать VPN сервер, к которому можно создать подключение через Питон?

Отслеживать

16.8k 4 4 золотых знака 21 21 серебряный знак 31 31 бронзовый знак

задан 24 июн 2018 в 14:27

Jedi Knight Jedi Knight

281 3 3 серебряных знака 14 14 бронзовых знаков

Так вопрос в создании сервера или в подключении к серверу средствами python?

24 июн 2018 в 15:31

Скорее в подключении средствами

24 июн 2018 в 15:46

Запустить из питона программу или батник/скрипт, который в свою очередь запустит vpn-клиента, поднимет туннельные интерфейсы и т.д. и т.п. А если найдёте системные вызовы для этого и как вызывать их из питона, то будет ещё лучше.

5 июл 2022 в 2:34

если подключаемся средствами ОС, то какой ОС?

2 ноя 2022 в 7:16

а так то щас как напишу впн сервер и клиента на питоне — тут на часик делов то

2 ноя 2022 в 7:19

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Попробуй через http.server:

import http.server import urllib PORT = 9097 class MyProxy(http.server.SimpleHTTPRequestHandler): def do_GET(self): url=self.path[1:] self.send_response(200) self.end_headers() self.copyfile(urllib.urlopen(url), self.wfile) httpd = socketserver.ForkingTCPServer(('', PORT), MyProxy) print ("Now serving at", str(PORT)) httpd.serve_forever()``` 

VPN за 60 секунд

Если Вы предпочитаете простые и красивые решения, или Вам нравится всё, что попадает под категорию It Just Works, то эта статья для Вас. Для запуска шифрованного подключения достаточно иметь на своем компьютере SSH-клиент, установить sshuttle (об этом чуть позже) и приобрести VPS с любым тарифным планом в интересующей Вас стране. На удалённой VPS-машине в большинстве случаев абсолютно ничего настраивать не нужно (достаточно, чтобы были установлены пакеты python и сервер SSH).

На своем компьютере установим sshuttle:

pip install sshuttle
git clone https://github.com/sshuttle/sshuttle.git && python setup.py install
apt-get install sshuttle
sudo sshuttle -r username@sshserver 0.0.0.0/0

где username — логин на удаленном виртуальном сервере, sshserver — его IP-адрес или доменное имя, параметр 0.0.0.0/0 означает, что мы собираемся добавить в нашу таблицу маршрутизации правило, благодаря которому весь исходящий трафик будет отправляться на удалённый сервер, за исключением DNS-запросов. Разработчик намеренно не включает по умолчанию этот функционал для DNS, потому что у некоторых пользователей для выхода в интернет должны использоваться провайдерские серверы разрешения имен. Если мы можем пользоваться любыми DNS-серверами, то и запросы к ним можем “завернуть” в наш шифрованный SSH-туннель:

sshuttle --dns -r username@sshserver 0.0.0.0/0 

Помимо этого мы можем направлять в туннель наш исходящий трафик не полностью, а только для определенных IP-подсетей, указывая соответствующий параметр:

sshuttle -r username@sshserver 11.12.13.14/0

Преимущества этого решения в следующем:

  • у Вас нет необходимости иметь права администратора на удалённом сервере, используемом для выхода в интернет
  • Вам не нужно создавать правила SSH для форварда каждого порта

Свой VPN сервер дома

Последнее время вижу очень много статей на тему vds с впн для тех или иных задач.

В основном людям нужен такой сервер для обычного неторопливого серфинга.

В связи с тем что сервер за пределами РФ стало получить сложнее и дороже решил поделиться этим способом. Он подойдет если у вас есть возможность создать виртуалку дома или рф хостинг который заметно дешевле зарубежного.

1) Создаем отдельную виртуальную машину с ОС linux, например ubuntu.

2) Настроим машину, все команды выполняются от root.

echo net.ipv4.ip_forward=1 > /etc/sysctl.conf sysctl -p
apt update && apt install iptables-persistent -y systemctl enable iptables systemctl start iptables

Можно очистить все текущие правила если вы понимаете зачем это делаете

iptables -F -t nat && iptables -F

Базовые правила которые нужны для работы:

Также обратите внимание что мой сетевой интерфейс в машине называется ens18, у вас может быть другой. внесите правки самостоятельно.

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 9051 iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 9051 iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 9053 iptables -t nat -A POSTROUTING -o ens18 -j MASQUERADE 

Установим tor и obfsproxy

apt install obfs4proxy tor -y systemctl enable tor

Обратите внимание что в конфиге используются Bridge, если с этими не заработает можно взять здесь.

 cat /etc/tor/torrc DataDirectory /var/lib/tor Log notice file /var/log/tor/notice.log VirtualAddrNetworkIPv4 10.192.0.0/10 AutomapHostsOnResolve 1 SocksPort 0.0.0.0:9052 TransPort 0.0.0.0:9051 DNSPort 0.0.0.0:9053 ClientTransportPlugin obfs4 exec /usr/bin/obfs4proxy Bridge obfs4 94.140.115.5:443 28CA5C42872FD6FBEDA9658F2A63618776A54416 cert=GYIbAY5uvHsfB9lBMGOS9/0+nU3uIO+DdxBZsOWwfwZsjUlxz3YIOqFKQg5GRzINiy1jAw iat-mode=0 Bridge obfs4 162.19.245.215:42001 9953E998B6C65012A49A6B48BE42065E6559804A cert=vBTn9bnFVGxcL067lP3zwqkN1gKv9VsKVZIgUIYOirVXd0D2KaPQnZjgKTgIt1sk1sZyFA iat-mode=0 UseBridges 1 # для жителей СНГ рекомендую исключить Exit-ноды следующих стран ExcludeExitNodes ,, EOF cat /etc/tor/torsocks.conf TorAddress 127.0.0.1 TorPort 9050 OnionAddrRange 127.42.42.0/24 EOF systemctl restart tor 

Чтобы убедиться что служба тор успешно работает можете ввести команду:

tail -f /var/log/tor/notice.log

Если увидели Bootstrapped 100% (done) : Done значит все хорошо.

Далее нам нужно установить любой удобный вам vpn, я предпочитаю этот.

apt install wget -y wget https://raw.githubusercontent.com/hwdsl2/setup-ipsec-vpn/master/vpnsetup_ubuntu.sh -O vpn.sh && sh vpn.sh 

Скрипт выведет вам настройки для подключения. ip адрес локальной машины можете посмотреть через команду ip a .

Сохраним правила iptables

iptables-save > /etc/iptables/rules.v4

Если ваш сервер доступен по публичному адресу рекомендую немного настроить безопасность:

# разрешаем ssh iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT # разрешаем весь трафик через впн соединения iptables -A INPUT --in-interface ppp+ -j ACCEPT iptables -A INPUT --in-interface lo -j ACCEPT # запрещаем все что не разрешили iptables -P INPUT DROP # сохраним правила iptables-save > /etc/iptables/rules.v4 

На всякий случай выложу полный листинг правил iptables.

# Generated by iptables-save v1.8.4 on Fri May 12 08:00:50 2023 *nat :PREROUTING ACCEPT [41:9322] :INPUT ACCEPT [22:3346] :OUTPUT ACCEPT [39:2458] :POSTROUTING ACCEPT [27:1638] -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 9051 -A PREROUTING -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 9051 -A PREROUTING -p udp -m udp --dport 53 -j REDIRECT --to-ports 9053 -A POSTROUTING -s 192.168.42.0/24 -o ens18 -j MASQUERADE -A POSTROUTING -s 192.168.43.0/24 -o ens18 -m policy --dir out --pol none -j MASQUERADE -A POSTROUTING -o ens18 -j MASQUERADE COMMIT # Completed on Fri May 12 08:00:50 2023 # Generated by iptables-save v1.8.4 on Fri May 12 08:00:50 2023 *filter :INPUT DROP [2:256] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [348:126087] -A INPUT -p udp -m udp --dport 1701 -m policy --dir in --pol none -j DROP -A INPUT -m conntrack --ctstate INVALID -j DROP -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -p udp -m multiport --dports 500,4500 -j ACCEPT -A INPUT -p udp -m udp --dport 1701 -m policy --dir in --pol ipsec -j ACCEPT -A INPUT -p udp -m udp --dport 1701 -j DROP -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -i ppp+ -j ACCEPT -A INPUT -i lo -j ACCEPT -A FORWARD -m conntrack --ctstate INVALID -j DROP -A FORWARD -i ens18 -o ppp+ -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A FORWARD -i ppp+ -o ens18 -j ACCEPT -A FORWARD -i ppp+ -o ppp+ -j ACCEPT -A FORWARD -d 192.168.43.0/24 -i ens18 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A FORWARD -s 192.168.43.0/24 -o ens18 -j ACCEPT -A FORWARD -s 192.168.43.0/24 -o ppp+ -j ACCEPT -A FORWARD -j DROP COMMIT # Completed on Fri May 12 08:00:50 2023 

UPD для тех кто читает через слово или видит ФР хостинг и пугается:

  • трафик выходит через tor, блокировки запрещенных ресурсов обходятся.
  • статья что это еще один способ который подойдет для некоторых ситуаций, а не лучший итп

Как сделать свой VPN дешево и быстро

В этой инструкции мы покажем, как самостоятельно развернуть свой VPN-сервер, чтобы раз и навсегда перестать беспокоиться о собственной безопасности в сети и получить доступ к заблокированным ресурсам.

Блокировками в России сегодня уже никого не удивить. С пугающей частотой Роскомнадзор добавляет в список заблокированных ресурсов сайты и сервисы, которые распространяют фейковые новости, а многие зарубежные сайты сами покидают рунет или собираются прекратить свою деятельность в России в самое ближайшее время. Простым пользователям остается привыкать к текущим реалиям или искать пути обхода, которые, как правило, сводятся к трем основным способам:

  1. Создание собственного VPN
  2. Подключение к коммерческому VPN-сервису
  3. Подключение к бесплатным VPN-сервисам

Однако наиболее целесообразным из них является только первый пункт, так как практически любые сторонние VPN-серверы имеют ряд существенных недостатков. В случае большой загруженности они могут снижать скорость соединения, а также имеют ограничения по количеству подключаемых устройств.

Кроме того, в теории такие сервисы могут хранить логи ваших действий в сети и передавать их по запросу третьим лицам, например, властям. Пожалуй, единственный плюс платных VPN — возможность быстрого переключения между серверами в разных локациях.

Фото: Unsplash

Стоит ли упоминать про бесплатные VPN, с которыми дела обстоят еще хуже? Главное, что необходимо понимать о работе бесплатных VPN сервисов: если вы не платите за VPN, значит, за него платит кто-то еще. Естественно, взамен этот «кто-то» должен получать что-то ценное, например, ваши конфиденциальные данные.

С собственным VPN сервером вы забудете про любые ограничения. Вы сможете раздать интернет своим друзьям и вместе наслаждаться свободным интернетом, так как даже самый дешевый сервер за 3$ в месяц справится с такой нагрузкой, а ваше соединение всегда будет оставаться под надежной защитой.

Итак, думаю выбор очевиден. Нам нужен собственный VPN-сервер. Многие пользователи полагают, что создание собственного VPN — это непосильная задача, для реализации которой необходимы навыки программирования или, как минимум, базовые знания управления консолью Linux и многочасовые манипуляции с компьютером.

Спешим вас обрадовать. Запустить собственный VPN-сервер сможет каждый, а мы покажем как сделать это с минимальными усилиями и научим вас подключать к нему любые свои устройства без каких-либо ограничений.

Вот несколько этапов, которые потребуются для создания собственного VPN-сервера:

  1. Выбор хостинг-провайдера.
  2. Аренда виртуального сервера.
  3. Удаленное подключение к серверу.
  4. Развертывание VPN сервера с помощью терминала командной строки.
  5. Подключение и настройка интернет-соединения.

Поиск и выбор хостинг-провайдера

Для того чтобы создать свой VPN, первый, и, пожалуй, самый сложный этап — это поиск и аренда виртуального сервера.

Критерии при выборе очень просты:

  • Арендуемый сервер не должен находиться в России.
  • Услуги провайдера можно оплатить без «танцев с бубнами».

Но если найти провайдера с широкой географией расположения серверов сегодня не представляет особого труда, то со вторым пунктом действительно могут возникнуть проблемы — в связи с последними событиями на политической арене многие популярные зарубежные провайдеры просто позакрывали свои «двери» для клиентов из России. Остальные же теперь физически не могут принимать оплату по картам Visa и Mastercard, что делает ситуацию тупиковой.

Выход один — искать провайдера среди российских компаний с дата-центрами за границей. Среди них мы нашли несколько: RuVDS, PQHosting и FirstByte. У каждого из этих провайдеров имеются серверы в ряде европейских стран и большой выбор методов оплаты.

Мы остановили свой выбор на провайдере FirstByte, но вы можете выбрать любой из вышеперечисленных или какой-то свой. Все действия по развертыванию VPN у любого хостинг-провайдера будут аналогичными.

Арендуем сервер

После того, как мы определились с выбором провайдера, необходимо зарегистрироваться на сервисе. Здесь все просто, поэтому расписывать все шаги не имеет смысла. Главное, указать свой действующий адрес e-mail и телефон, так как они могут понадобиться для активации аккаунта.

После регистрации переходим к процедуре аренды виртуального сервера. Для этого идем в раздел «Товары/услуги»→ Виртуальные серверы и жмем «Заказать».

На странице заказа меняем локацию дата-центра с России на любую другую страну в списке. Расстояние может косвенно повлиять на будущую скорость интернет-соединения, поэтому лучше отдать свое предпочтение ближайшим к России европейским странам. И, само собой, ориентируемся на стоимость, которая прежде всего зависит от производительности сервера. Для наших задач подойдет машина с минимальными требованиями и каналом в 100 MB/s. Аренда такого сервера обойдется в 222 рубля в месяц.

В следующем окне указываем произвольное доменное имя, которое должно состоять из любых двух слов на латинице, отделенных друг от друга точкой.

В строке «Операционная система» выбираем последнюю версию Ubuntu и добавляем товар в корзину.

После этого оплачиваем услугу любым удобным способом и ждем пока сервер зарегистрируют. Эта процедура может занять от нескольких минут до 1 часа.

После того как сервер будет подготовлен, на почту, указанную при регистрации, должно прийти письмо с уведомлением об активации и данными для подключения к серверу.

Информацию о сервере вы также можете посмотреть в списке на странице ваших выделенных серверов. Для этого выберите сервер из списка мышкой и нажмите на кнопку «Инструкция».

Эти данные пригодятся нам в дальнейшем, поэтому лучше всего сохранить их в отдельном текстовом файле на рабочем столе.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *