The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Форвардинг/проксирование TCP/UDP пакетов "
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Rust)
Изначальное сообщение [ Отслеживать ]

"Форвардинг/проксирование TCP/UDP пакетов "  +/
Сообщение от akahan (ok), 11-Авг-23, 16:44 
Привет всем. Не уверен в каком именно разделе нужно разместить, но суть в сетевом программировании. Это мой первый опыт в таком программировании, поэтому не ругайте, если что))

Я пишу связку ПО реализующую VPN на основе WireGuard с конечным выходом пакетов в интернет через удаленную программу (далее прокси) и обратно.

Общими словами, есть 3 устройства. Клиент, сервер и прокси. На сервере WireGuard интерфейс слушает на UDP порту подключения от клиентов и от прокси. Создает с ними одну сеть.

В целом, средствами обычных конфигов WireGuard это реализуется как тут https://habr.com/ru/companies/xakep/articles/699000/. Все работает. Но в своей реализации я застрял с прокси.
В статье с хабра прокси - это сервер с конфигом wg-external.conf. Там есть выполнение PostUp сркрипта с настройкой iptables, но это не нужно, так как связка работает и без этого правила.

Я пишу код на rust, реализовал сетевой стек в юзер-спейс (smoltcp). Юзерспейс - это важно. Получаю на прокси расшифрованные пакеты с сервера WireGuard. Не понимаю как мне проксировать их в интернет и отдавать обратно на сервер с последующей передачей ответов клиенту обратно.  

Я понимаю, что нужно подменять адреса получателя в IP-пакетах, но как их отправлять в интернет и потом передавать обратно в WireGuard? Нет четкого понимания - застрял. Кто понимает о чем речь укажите направление, подскажите, что нужно сделать, чтобы реализовать мою связку?

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по времени | RSS]


1. "Форвардинг/проксирование TCP/UDP пакетов "  +/
Сообщение от gra (ok), 11-Авг-23, 19:31 
>[оверквотинг удален]
> есть выполнение PostUp сркрипта с настройкой iptables, но это не нужно,
> так как связка работает и без этого правила.
> Я пишу код на rust, реализовал сетевой стек в юзер-спейс (smoltcp). Юзерспейс
> - это важно. Получаю на прокси расшифрованные пакеты с сервера WireGuard.
> Не понимаю как мне проксировать их в интернет и отдавать обратно
> на сервер с последующей передачей ответов клиенту обратно.
> Я понимаю, что нужно подменять адреса получателя в IP-пакетах, но как их
> отправлять в интернет и потом передавать обратно в WireGuard? Нет четкого
> понимания - застрял. Кто понимает о чем речь укажите направление, подскажите,
> что нужно сделать, чтобы реализовать мою связку?

Не до конца понял вопрос.

Может есть смысл как сделаны другие прокси?

https://github.com/sozu-proxy/sozu
https://github.com/shadowsocks/shadowsocks-rust

Ответить | Правка | Наверх | Cообщить модератору

2. "Форвардинг/проксирование TCP/UDP пакетов "  +/
Сообщение от akahan (ok), 11-Авг-23, 21:33 
>[оверквотинг удален]
>> Не понимаю как мне проксировать их в интернет и отдавать обратно
>> на сервер с последующей передачей ответов клиенту обратно.
>> Я понимаю, что нужно подменять адреса получателя в IP-пакетах, но как их
>> отправлять в интернет и потом передавать обратно в WireGuard? Нет четкого
>> понимания - застрял. Кто понимает о чем речь укажите направление, подскажите,
>> что нужно сделать, чтобы реализовать мою связку?
> Не до конца понял вопрос.
> Может есть смысл как сделаны другие прокси?
> https://github.com/sozu-proxy/sozu
> https://github.com/shadowsocks/shadowsocks-rust

Ну это не прокси, я просто назвал так. Для прокси нужно открывать порт, на который потом, например, браузер будет подключаться и трафик браузера будет проксироваться. А у меня трафик приходит из тоннеля IP-пакетами. А мне нужно его направлять в интернет и потом обратно в тоннель. Я не знаю как правильно назвать это процесс, форвардинг может. Это приложение, которое запускается удаленно, подключается к Wireguard на сервере и держит подключение, слушая пакеты с UDP wireguard endpoint.

Ответить | Правка | Наверх | Cообщить модератору

3. "Форвардинг/проксирование TCP/UDP пакетов "  +/
Сообщение от Аноним (3), 13-Авг-23, 13:13 
Опишите изначальную задачу, а не свою попытку её решения.
Ответить | Правка | Наверх | Cообщить модератору

4. "Форвардинг/проксирование TCP/UDP пакетов "  +/
Сообщение от akahan (ok), 13-Авг-23, 22:42 
> Опишите изначальную задачу, а не свою попытку её решения.

В первом сообщение же описано. Что именно не понятно?

Ответить | Правка | Наверх | Cообщить модератору

5. "Форвардинг/проксирование TCP/UDP пакетов "  +/
Сообщение от Аноним (3), 14-Авг-23, 03:38 
Ничего не понятно. Какое-то прокси, но не прокси. Статья на хабре, в которой ни слова про прокси. Почему вам не подходят стандартные решения вроде socks-прокси или NATа? Какую такую уникальную задачу вы пытаетесь решить, что понадобилась самописная программа?
Ответить | Правка | Наверх | Cообщить модератору

6. "Форвардинг/проксирование TCP/UDP пакетов "  +/
Сообщение от Аноним (3), 14-Авг-23, 03:39 
https://xyproblem.info/
Ответить | Правка | К родителю #4 | Наверх | Cообщить модератору

7. "Форвардинг/проксирование TCP/UDP пакетов "  +/
Сообщение от akahan (ok), 14-Авг-23, 05:30 
> https://xyproblem.info/

Разобрался. Спасибо.

Ответить | Правка | Наверх | Cообщить модератору

8. "Форвардинг/проксирование TCP/UDP пакетов "  +/
Сообщение от ц (?), 18-Авг-23, 10:06 
> Я понимаю, что нужно подменять адреса получателя в IP-пакетах, но как их
> отправлять в интернет и потом передавать обратно в WireGuard? Нет четкого
> понимания - застрял. Кто понимает о чем речь укажите направление, подскажите,
> что нужно сделать, чтобы реализовать мою связку?

Самое очевидное сделать таблицу соответствия входящих и исходящих соединений.
Как потом смотреть флаги (ask и.т.д.) и по этой таблице гонять пакеты, если запись есть и не ​устарела то меняем ip отправителя и на табличную, если нет делаем новую запись.

Можно еще проще сделать соединение прямо из прокси, 1 поток на соединение и там все гонять но для этого надо как то завернуть из гуарда на твой прокси.

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру