788просмотров
2 марта 2026 г.
question📷 ФотоScore: 867
Как работают современные VPN: OpenVPN, Outline, VLESS, CISCO AnyConnect и многие другие? ☺️ В основе VPN, которые используют L4 уровень для передачи данных, лежат TUN/TAP интерфейсы. Это виртуальные сетевые устройства. В отличие от обычных, они работают не с физической сетью, а с другими приложениями. 🤫 TUN и TAP: В чем разница?
• TUN (L3): Работает на уровне IP-пакетов. Именно он нужен для большинства VPN (OpenVPN в режиме tun, WireGuard, VLESS). В нашем примере будем говорить про него.
• TAP (L2): Работает на уровне Ethernet-кадров. Используется, если нужно объединить две сети в одну огромную "локальную сеть" (Ethernet-мост). 🥸 Как это работает (на примере TUN)
1. Пусть "Приложение А" хочет отправить данные на IP-адрес 1.1.1.2 через TCP сокет.
2. Данные поступают в пространство ядра и передаются в сетевую подсистему ОС.
3. Сетевая подсистема смотрит на IP-адрес назначения, сверяется с таблицей маршрутизации и решает, что эти данные должен отправить интерфейс tun0. К данным добавляется IP-заголовок.
4. tun0 — это виртуальный интерфейс, и работать с ним можно как с обычным файлом (read/write). Пусть "Приложение B" открыло интерфейс tun0 и обычной операцией read прочитало наш IP-пакет.
5. "Приложение B" открыло UDP-сокет для работы с удаленным сервером с IP-адресом 51.250.2.96 . Теперь "Приложение B" может отправить полученный IP-пакет из tun0 в UDP-сокет.
6. Через UDP-сокет данные поступают в пространство ядра и передаются в сетевую подсистему ОС.
7. Сетевая подсистема смотрит на IP-адрес назначения, сверяется с таблицей маршрутизации и решает, что эти данные должен отправить интерфейс eth0. К данным добавляется IP-заголовок.
8. eth0 — настоящий сетевой интерфейс, получив данные для отправки, он отправляет их в сеть. 👻 Что летит в сеть
В итоге пакет, который вы отправляете на Wi-Fi роутер, выглядит так:
[Ethernet | IP (от B) | UDP (от B) | IP (от A) | TCP (от A) | Данные] То, что выделено жирным — это ваш оригинальный запрос, упакованный внутрь нового UDP-пакета. Ничего не напоминает?! 😏 😎 Актуальность
Понимая эту механику, вы можете написать свой собственный VPN! Это не так сложно, как кажется. Я уместил простейший VPN-сервер и клиент в одном файле на 142 строки (с комментариями) на Python. В моем курсе "Разработка сетевых приложений на Python" я подробно разбираю TUN/TAP, и мы шаг за шагом пишем свое VPN-решение.