Використовувати iptables для пересилання ipv6 на ipv4?


16

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


2
Те, що ви шукаєте, називається NAT64, і я не думаю, що iptables будуть робити (поки).
Chris S

Кріс прямо - RF64 NAT64 щойно опубліковані, я б приділив йому час, поки що-небудь дійсно це не підтримає. Однак, можливо, ви зможете досягти своєї мети іншим способом, але у нас немає достатньо деталей, щоб точно знати. Наприклад, якщо це HTTP-сервер, ви можете звернути проксі-проксі на запити між протоколами.
Шейн Мадден

Відповіді:


16

Наразі IPtables не можуть цього зробити, тому для проксі з'єднань вам потрібен процес в просторі користувачів. socat є підходящим інструментом для цього:

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

1
дякую, це було корисно! У випадку, якщо хтось шукає рішення UDP: socat UDP6-RECVFROM: 64444, fork UDP4-SENDTO: localhost: 64443 працював на мене
Олександр

10

Як зазначається в коментарях до вашого запитання , 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 local-host] original-port destination-host destination-port
  • Ця [-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.


Опублікувати його як нову відповідь, тому що редагування поточної відповіді головоломкою занадто сильно змінить шлях і може бути відхилено як запропонована редакція!
Лео Лам

5

Останні версії програми 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, ймовірно, буде встановлено у вашій базовій системі або доступне у затверджених сховищах постачальників.


3

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

Для тих, хто йде по цій темі: Мій провайдер змінив мій зв’язок з IPv4 на IPv6 з Dual Stack Lite, а це означає, що я вже не маю власної IPv4 адреси. Це було проблемою, оскільки я хочу отримати доступ до своєї IP-камери з будь-якого сайту, який не підтримує IPv6. Щоб вирішити це, я спробував наступне:

  1. Увімкнення IPv6 Forward для порту 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 .. Ідеально! Я планую або отримати малину, яка виконає цю роботу, або банан пі м3 для інших завдань.


1
Тепер ви знаєте, що робити, коли вам потрібна інша IP-камера. Це 2015 рік; Купівля тієї, яка не підтримує IPv6, - це повна витрата грошей.
Майкл Хемптон

його не так, як фотокамері кілька років: p
Crumar

2

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.