LINUX.ORG.RU

Как работаю VPN приложения, в крайне общем виде

 


0

1

Добрый день, можете подсказать, допустим вот есть какое-то впн приложение для линукс. В самом общем виде, был допустим у нас какое-то TCP приложение которое открывало сокет и отсылало туда содержимое буфера в памяти. Затем ядро наверное там писало в буфер сетевой карты и дальше уже пакет шел по ethernet. А что при запуске VPN происходит, у нас приложение все также наверное делаешь connect к требуемому нами адресу, а дальше строится что-то типа внутренней таблицы маршрутизации и пакет идет на адрес впн, а на том конце деинкапсулируются? Понимаю, что очень сумбурно написал, что бы такое почитать, максимально доходчивое и просто?


Почитай про tun и tap интерфейсы. Если кратко — создаётся виртуальное устройство, с которыми взаимодействует программа предоставляющая vpn, может писать туда пакеты и читать их оттуда.

PolarFox ★★★★★
()

В крайне общем виде VPN работает как второй сетевой интерфейс, в который отправляются и из которого принимаются определённые сетевые пакеты.

При отправке пакета в интерфейс VPN реальный сетевой пакет инкапсулируется (помещается) внутрь пакета данных соответствующего протокола VPN, пакет протокола помещается в TCP или UDP пакет и в качестве адресов отправителя / получателя указываются внешние IP адреса VPN сервера и клиента.

При получении пакета VPN сервер или клиент извлекают из пакета данных VPN протокола переданный пакет.

В остальном всё согласно точно таких же принципов, как работает и с одним интерфейсом в системе.

kostik87 ★★★★★
()

Создай впн сетку при помощи wireguard, он прост и максимально близок к системному уровню. Не забудь задать новый wg интерфейс дефолтным гейтом. Наверное, это даст хорошее базовое представление

kvpfs_2
()

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

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

KivApple ★★★★★
()
Последнее исправление: KivApple (всего исправлений: 1)