Назад | Перейти на главную страницу

Использовать iptables для пересылки ipv6 на ipv4?

В настоящее время у меня есть установка, в которой из-за конфигурации, на исправление которой потребуется вечность, у меня есть сервер, доступ к которому возможен только с помощью ipv4. Однако у меня также есть сервер, к которому можно получить доступ по ipv6. Мне было интересно, могу ли я использовать iptables для перенаправления трафика ipv6 на определенный порт с одного из серверов на другой сервер с использованием трафика ipv4.

IPtables в настоящее время не может этого сделать, поэтому вам понадобится процесс пользовательского пространства для проксирования соединений. сокат подходит для этого:

socat TCP6-LISTEN:1234,fork TCP4:1.2.3.4:1234

Как отмечено в комментарии к вашему вопросу, NAT64 далек от того, чтобы быть готовым даже спустя 3 года.

Однако вы можете попробовать 6tunnel, как подсказывает недоумение.

К счастью, он присутствует в репозиториях Debian и Ubuntu, поэтому вы можете легко установить его, используя sudo apt-get install 6tunnel. Если вы используете другую систему, вам придется собрать ее из источник.

Сборка из исходных текстов действительно несложна, просто нужно выполнить несколько команд (от имени пользователя root):

git clone https://github.com/wojtekka/6tunnel && cd 6tunnel && ./autogen.sh && make && make install

Вот упрощенный синтаксис:

6tunnel [-4 | -6] [-l локальный-хост] исходный порт место назначения порт назначения
  • В [-4|-6] является необязательным и позволяет указать, будете ли вы выполнять привязку (прослушивание) по IPv4 или IPv6 (соответственно).
  • -l также необязательно. Он позволяет вам выбрать, к какому адресу (IPv4 или IPv6) вы хотите привязать.
  • В оригинальный порт это порт, к которому вы будете выполнять привязку.
  • В хост назначения куда вы будете перенаправлять трафик. Это может быть где угодно: localhost, или где-нибудь еще в вашей сети или в Интернете.
  • В порт назначения порт на хосте назначения, который будет принимать ваш перенаправленный трафик.

Например, если вы хотите разрешить доступ только к серверу IPv4, прослушивающему порт 1337, через IPv6, используйте:

6tunnel -6 1337 localhost 1337

Приведенная выше команда будет прослушивать порт 1337 на IPv6 и перенаправлять трафик на порт 1337 на той же машине через IPv4. Затем он будет работать в фоновом режиме, поэтому вам не о чем беспокоиться.

На самом деле вам следует настроить задание cron, чтобы убедиться, что оно все еще работает. 6tunnel дает пример для вашего удобства! Запуск его при загрузке тоже не должно быть плохой идеей.

Для получения дополнительной документации запустите 6tunnel -h или man 6tunnel.

Последние версии xinetd также может прослушивать IPv6, а затем перенаправлять соединение на IPv4-адрес.

Пример конфигурации, которая прослушивает соединения IPv6 на порту 3389 и перенаправляет их на порт 3389 внутреннего IPv4-адреса:

service rdp_port_forward
{
    flags           = IPv6
    disable         = no
    type            = UNLISTED
    socket_type     = stream
    protocol        = tcp
    user            = nobody
    wait            = no
    redirect        = 10.187.20.42 3389
    port            = 3389
}

Это может быть полезно в более ограниченных средах, поскольку xinetd скорее всего, будет установлен с вашей базовой системой или доступен в репозиториях утвержденных поставщиков.

Я хотел прокомментировать ответ Лео Ламса и проголосовать за него, но у меня недостаточно репутации. Прежде всего: Большое спасибо, Лео Лам!

Для всех, кто посещает эту тему: мой интернет-провайдер изменил мое соединение с IPv4 на IPv6 с помощью Dual Stack Lite, что означает, что у меня больше нет собственного IPv4-адреса. Это было проблемой, так как я хочу получить доступ к своей IP-камере из любого устройства, которое не поддерживает IPv6. Чтобы решить эту проблему, я попробовал следующее:

  1. Включение пересылки IPv6 для порта 99 в моем маршрутизаторе на мою машину Ubuntu.
  2. Машина Ubuntu (домашняя сеть): sudo 6tunnel -6 99 192.168.178.35 80
  3. vServer Debian со статическим IPv4 и IPv6-адресом: sudo 6tunnel -4 99 IPV6PREFIXROUTER:IPV6INTERFACEIDUUBUNTUMACHINE 99
  4. vServer Debian: разрешить входящие TCP-соединения на порт 99 в iptables

Префикс ipv6 был обозначен в моем маршрутизаторе, а идентификатор интерфейса был отображен в процессе пересылки IPv6.

Теперь я могу получить доступ к камере откуда угодно, используя домен vServer example.com:99 .. Отлично! Я планирую получить либо малину, которая выполнит эту работу, либо банановый кубический метр для других задач.

Больше для того, чтобы люди находили эту страницу, а не OP (я пришел сюда в поисках решения для подключения IPv6 для приложения IPv4 (Twisted)), одна из возможностей - это приложение 6tunnel, которое прослушивает IPv6 и пересылает запросы на другой интерфейс и порт.

Вы могли бы рассмотреть Джул https://www.jool.mx/en/download.html