Форвардинг/проксирование TCP/UDP пакетов , akahan, 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? Нет четкого понимания - застрял. Кто понимает о чем речь укажите направление, подскажите, что нужно сделать, чтобы реализовать мою связку?
|
- Форвардинг/проксирование TCP/UDP пакетов , gra, 19:31 , 11-Авг-23 (1)
>[оверквотинг удален] > есть выполнение PostUp сркрипта с настройкой iptables, но это не нужно, > так как связка работает и без этого правила. > Я пишу код на rust, реализовал сетевой стек в юзер-спейс (smoltcp). Юзерспейс > - это важно. Получаю на прокси расшифрованные пакеты с сервера WireGuard. > Не понимаю как мне проксировать их в интернет и отдавать обратно > на сервер с последующей передачей ответов клиенту обратно. > Я понимаю, что нужно подменять адреса получателя в IP-пакетах, но как их > отправлять в интернет и потом передавать обратно в WireGuard? Нет четкого > понимания - застрял. Кто понимает о чем речь укажите направление, подскажите, > что нужно сделать, чтобы реализовать мою связку?Не до конца понял вопрос. Может есть смысл как сделаны другие прокси? https://github.com/sozu-proxy/sozu https://github.com/shadowsocks/shadowsocks-rust
- Форвардинг/проксирование TCP/UDP пакетов , akahan, 21:33 , 11-Авг-23 (2)
>[оверквотинг удален] >> Не понимаю как мне проксировать их в интернет и отдавать обратно >> на сервер с последующей передачей ответов клиенту обратно. >> Я понимаю, что нужно подменять адреса получателя в IP-пакетах, но как их >> отправлять в интернет и потом передавать обратно в WireGuard? Нет четкого >> понимания - застрял. Кто понимает о чем речь укажите направление, подскажите, >> что нужно сделать, чтобы реализовать мою связку? > Не до конца понял вопрос. > Может есть смысл как сделаны другие прокси? > https://github.com/sozu-proxy/sozu > https://github.com/shadowsocks/shadowsocks-rust Ну это не прокси, я просто назвал так. Для прокси нужно открывать порт, на который потом, например, браузер будет подключаться и трафик браузера будет проксироваться. А у меня трафик приходит из тоннеля IP-пакетами. А мне нужно его направлять в интернет и потом обратно в тоннель. Я не знаю как правильно назвать это процесс, форвардинг может. Это приложение, которое запускается удаленно, подключается к Wireguard на сервере и держит подключение, слушая пакеты с UDP wireguard endpoint.
- Форвардинг/проксирование TCP/UDP пакетов , Аноним, 13:13 , 13-Авг-23 (3)
Опишите изначальную задачу, а не свою попытку её решения.
- Форвардинг/проксирование TCP/UDP пакетов , akahan, 22:42 , 13-Авг-23 (4)
> Опишите изначальную задачу, а не свою попытку её решения.В первом сообщение же описано. Что именно не понятно?
- Форвардинг/проксирование TCP/UDP пакетов , Аноним, 03:38 , 14-Авг-23 (5)
Ничего не понятно. Какое-то прокси, но не прокси. Статья на хабре, в которой ни слова про прокси. Почему вам не подходят стандартные решения вроде socks-прокси или NATа? Какую такую уникальную задачу вы пытаетесь решить, что понадобилась самописная программа?
- Форвардинг/проксирование TCP/UDP пакетов , Аноним, 03:39 , 14-Авг-23 (6)
- Форвардинг/проксирование TCP/UDP пакетов , ц, 10:06 , 18-Авг-23 (8)
> Я понимаю, что нужно подменять адреса получателя в IP-пакетах, но как их > отправлять в интернет и потом передавать обратно в WireGuard? Нет четкого > понимания - застрял. Кто понимает о чем речь укажите направление, подскажите, > что нужно сделать, чтобы реализовать мою связку?Самое очевидное сделать таблицу соответствия входящих и исходящих соединений. Как потом смотреть флаги (ask и.т.д.) и по этой таблице гонять пакеты, если запись есть и не устарела то меняем ip отправителя и на табличную, если нет делаем новую запись. Можно еще проще сделать соединение прямо из прокси, 1 поток на соединение и там все гонять но для этого надо как то завернуть из гуарда на твой прокси.
|