Заставьте socat прослушивать стеки IPv4 и IPv6

1632
LDericher

Перешли провайдеры на днях, они только назначают DSlite-соединения. Я в порядке, подумал я. Дело в том, что я хочу получить доступ к некоторым своим материалам из-за пределов моей сети, что должно быть гораздо меньше хлопот, теперь я получил собственный IPv6.

Моя новая главная проблема заключалась в том, что я не могу предположить, что это будет везде, где я бродю, поэтому большую часть времени я буду пытаться получить доступ с точки входа только для IPv4. Найдено $ socatбыло моим другом, так как я могу получить доступ к одной коробке с истинным соединением с двумя стеками - поэтому получить доступ к моему IPv6 с помощью соединения только по IPv4 так же просто, как запустить $ socat UDP4-LISTEN:sourceport,fork,su=nobody UDP6:my-ipv6-hostname-behind.cgn:targetportна машине с двумя стеками и впоследствии подключиться к my-dualstack-hostna.me:sourceportизвне.

Теперь $ netstat -tulpen | grep sourceportна машине с двумя стеками обнаруживается только прослушиватель UDP4 - поэтому моя текущая проблема:

  • Для доступа через IPv6-соединение требуется подключение к my-ipv6-hostname-behind.cgn:targetport
  • Для доступа через IPv4-соединение требуется подключение к my-dualstack-hostna.me:sourceport
  • Доступ из DS (-lite) соединения позволяет мне использовать оба, но предпочтительно использовать прямой IPv6-маршрут

Поэтому было бы здорово иметь возможность использовать my-dualstack-hostna.me:sourceportкак для подключений IPv4, так и для IPv6, а не обновлять конфигурацию root каждый раз, когда я перемещаю свой ноутбук или телефон! Как заставить socatслушать на обоих? Должен быть способ! $ netstat -tulpen | grep ":22"на DS-машине видно это:

tcp 0 0 0.0.0.0:22 […] tcp6 0 0 :::22 […] 
1
Ваш вывод netstat показывает что-то слушающее как TCPv4, так и TCPv6. Так что мне не понятно, что не работает? Zoredache 9 лет назад 0
22 не мой исходный порт. Последний вывод является единственным доказательством того, что возможно что-то прослушивать как на IPv6, так и на IPv6. Он просто показывает SSH-сервер, а не переадресацию, созданную socat. Как указывалось ранее, «$ netstat -tulpen | grep sourceport` на машине с двумя стеками показывает только прослушиватель UDP4», например, «udp 0 0 0.0.0.0:sourceport […]` LDericher 9 лет назад 0

1 ответ на вопрос

3
nosyjoe

У меня была та же проблема - вы можете решить ее, запустив два экземпляра socat, один прослушивая ipv4 и один прослушивая один и тот же порт ipv6, привязав каждый к соответствующему адресу, например так:

socat UDP4-LISTEN:sourceport,bind=<ipv4-addr>,fork,su=nobody UDP6:my-ipv6-hostname-behind.cgn:targetport  socat UDP6-LISTEN:sourceport,bind=<ipv6-addr>,fork,su=nobody UDP6:my-ipv6-hostname-behind.cgn:targetport