💾 Archived View for betahowto.duckdns.org › yggdrasil:tunnels:socat captured on 2024-05-10 at 11:24:25. Gemini links have been rewritten to link to archived content

View Raw

More Information

⬅️ Previous capture (2024-03-21)

-=-=-=-=-=-=-

Проброс соединений 6-4 (4-6) с помощью socat

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

Ниже будет пара примеров использования утилиты socat для проброса соединений с IPv4 на IPv6 и обратно.

Это может понадобиться, например, если у вас есть очень старое устройство, которое не поддерживает протокол IPv6, но вы хотите вывести его в Yggdrasil ( gemini://betahowto.duckdns.org/yggdrasil:yggdrasil ).

Установка

Установить утилиту в дистрибутиве на базе Debian ( https://ru.wikipedia.org/wiki/Debian ) можно так:

sudo apt install socat

Для Windows socat можно скачать, например, отсюда: https://sourceforge.net/projects/unix-utils/files/socat/1.7.3.2/

4-6

socat TCP4-Listen:4321,fork TCP6:[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]:80

Допустим, мы выполнили эту команду на устройстве, подключенном к Yggdrasil и имеющим локальный IPv4-адрес: 192.168.1.3

На устройстве, которое не подключено к Yggdrasil, но так же подключено к локальной сети IPv4, запускаем браузер, вбиваем в адресную строку: http://192.168.1.3:4321 и что же видим?

А увидим мы стартовую страницу этого ресурса.

Браузер устанавливает TCP-соединение c 192.168.1.3:4321, на этом адресе и порте слушает socat, который "перебрасывает" соединение на [222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]:80.

Ключ fork означает, что после установки соединения оно переносится в дочерний процесс, а родительский процесс (socat) после этого будет готов принимать новые соединения.

Как видите, всё довольно просто :)

6-4

socat TCP6-Listen:4321,fork TCP4:192.168.1.10:5000

Выполняем эту команду на устройстве, подключенном к Yggdrasil.

На другом устройстве (так же подключенном к Yggdrasil) открываем браузер, вбиваем в адресной строке http://[203:52a2:a8fa:3f22:71cd:8310:6f4:f771]:4321 (Yggdrasil-адрес первого устройства) и попадаем в Web-интерфейс устройства с адресом ЛВС 192.168.1.10 [как бы, не подключенного к Yggdrasil] (естественно, адреса и порты должны быть правильные, рабочие (на устройствах должны быть запущены соответствующие сервисы)).

6-4 & 4-6

Ну, и напоследок строка для запуска экземпляров socat для проброса соединений с 4 на 6 и с 6 на 4 одновременно.

Команды выполняем на устройстве, подключенном к Yggdrasil, имеющим адреса: 192.168.1.3 и 203:52a2:a8fa:3f22:71cd:8310:6f4:f771.

socat TCP4-LISTEN:4322,fork TCP6:[202:421a:2eb5:40a4:fa32:f4a4:9b42:d4e4]:3202|socat TCP6-Listen:4321,fork TCP4:192.168.1.10:16881

Для проверки того, что у нас получилось выполним:

sudo netstat -natup |grep socat
tcp        0      0 0.0.0.0:4322            0.0.0.0:*               LISTEN      8428/socat          
tcp6       0      0 :::4321                 :::*                    LISTEN      8429/socat

Слушаем IPv4 на 4322 и IPv6 на 4321.

4322 перенаправляем на [202:421a:2eb5:40a4:fa32:f4a4:9b42:d4e4]:3202; 4321 перенаправляем в обратную сторону - на 192.168.1.10:16881.

Автозапуск socat

Запускать socat можно из системного планировщика.

В Linux с systemd ( https://ru.wikipedia.org/wiki/Systemd ) надежнее будет создать простенький юнит, например, такой:

[Unit]
Description=socat-forwarding
Documentation=http://www.dest-unreach.org/socat/doc/socat.html
After=network-online.target

[Service]
Type=simple
ExecStart=/usr/bin/socat TCP4-LISTEN:4322,fork TCP6:[202:421a:2eb5:40a4:fa32:f4a4:9b42:d4e4]:3202|/usr/bin/socat TCP6-Listen:4321,fork TCP4:192.168.1.10:16881 2>&1
Restart=always
RestartSec=1
TimeoutStopSec=0

[Install]
WantedBy=multi-user.target

Юнит можно поместить в /lib/systemd/system/.

Ссылки

Страница socat в Интернет (EN): http://www.dest-unreach.org/socat/

Материалы

gemini://betahowto.duckdns.org/yggdrasil:yggdrasil

https://ru.wikipedia.org/wiki/Debian

https://sourceforge.net/projects/unix-utils/files/socat/1.7.3.2/

http://192.168.1.3:4321

http://[203:52a2:a8fa:3f22:71cd:8310:6f4:f771]:4321

https://ru.wikipedia.org/wiki/Systemd

http://www.dest-unreach.org/socat/doc/socat.html

http://www.dest-unreach.org/socat/

Навигация

Поиск

Главная страница

Редактировать

Проект β-Doku

Алиас

[0200::/7]

Alfis / Yggdrasil