2024-02-10 12:53:55 +00:00

83 lines
5.6 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

====== Проброс соединений 6-4 (4-6) с помощью socat ======
**Socat** - это утилита на основе командной строки, которая устанавливает два двунаправленных потока байтов и передает данные между ними. Поскольку потоки могут быть сконструированы из большого набора различных типов приемников данных и источников, а также поскольку к потокам может быть применено множество вариантов адресации, socat можно использовать для самых разных целей.
Ниже будет пара примеров использования утилиты socat для проброса соединений с IPv4 на IPv6 и обратно.
Это может понадобиться, например, если у вас есть очень старое устройство, которое не поддерживает протокол IPv6, но вы хотите вывести его в [[yggdrasil:yggdrasil|Yggdrasil]].
===== Установка =====
Установить утилиту в дистрибутиве на базе [[wpru>Debian|Debian]] можно так:
<code>sudo apt install socat</code>
Для Windows socat можно скачать, например, отсюда: https://sourceforge.net/projects/unix-utils/files/socat/1.7.3.2/
===== 4-6 =====
<code>socat TCP4-Listen:4321,fork TCP6:[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]:80</code>
Допустим, мы выполнили эту команду на устройстве, подключенном к 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=====
<code>socat TCP6-Listen:4321,fork TCP4:192.168.1.10:5000</code>
Выполняем эту команду на устройстве, подключенном к 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.
<code>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</code>
Для проверки того, что у нас получилось выполним:
<code>sudo netstat -natup |grep socat</code>
<code>tcp 0 0 0.0.0.0:4322 0.0.0.0:* LISTEN 8428/socat
tcp6 0 0 :::4321 :::* LISTEN 8429/socat</code>
Слушаем IPv4 на 4322 и IPv6 на 4321.
4322 перенаправляем на [202:421a:2eb5:40a4:fa32:f4a4:9b42:d4e4]:3202; 4321 перенаправляем в обратную сторону - на 192.168.1.10:16881.
===== Автозапуск socat =====
Запускать socat можно из системного планировщика.
В Linux с [[wpru>Systemd|systemd]] надежнее будет создать простенький юнит, например, такой:
<code>[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</code>
Юнит можно поместить в ''%%/lib/systemd/system/%%''.
====== Ссылки ======
Страница socat в Интернет (EN): http://www.dest-unreach.org/socat/