Как прозрачно туннелировать порт от IPv4 к удаленному устройству IPv6?

11

Дома я подключен к IPv6-адресу, и, кроме того, мой провайдер предоставляет настройку, подобную NAT, через которую я получаю общедоступный IPv4-адрес, которым я делюсь с другими клиентами (очевидно, что у нас мало IPv4-адресов).

В результате я не могу подключиться к своим устройствам дома (например, к своему VPN-шлюзу), когда нахожусь в сети IPv4. Тем не менее, у меня есть сервер, который имеет как IPv4, так и IPv6-адрес. Таким образом, должна быть возможность доступа к моим домашним устройствам, если я пройду через свой сервер.

Вот что я имею в виду: поскольку на IPv6 каждое устройство получает свой собственный IP, мой домашний сервер получает статический IPv6 IP. Мой удаленный сервер уже имеет статический IPv4 и IPv6.

Когда я теперь хочу получить доступ к своему серверу OpenVPN дома, ранее я открывал порт 1194 в моем маршрутизаторе, и NAT передавал туда соединения с сервером. В моем новом сценарии я хочу подключиться к порту 1194 (или другому, неважно) на моем удаленном сервере, и оно должно принять это подключение и туннелировать его на мой домашний сервер (видя, что у них обоих есть IPv6).

Графически это будет означать:

Мобильное устройство (IPv4) -> Удаленный сервер (IPv4 + IPv6) -> Домашний сервер (IPv6)

Но это должно происходить только на выбранных портах (или есть даже более умный способ, чем выбирать по порту?).

У меня вопрос, как мне добиться этой настройки?

На каком уровне это должно работать? Если я хочу сделать это по порту, я, очевидно, должен переслать пакет на уровне TCP / UDP. Моей первой идеей будет iptables, но может ли iptables переслать пакет на удаленный IP? Или есть другое программное обеспечение, которое может? Или я должен создать туннель между двумя серверами, а затем переслать это локально? Как бы я пошел об этом?

javex
источник
1
Рассматривали ли вы использование туннельного брокера IPv6 для вашего ноутбука?
Майкл Хэмптон
@MichaelHampton спасибо за предложение, но мне бы очень хотелось, чтобы на устройстве не требовались изменения, поскольку я также собираюсь установить соединение со своего телефона (android) и, возможно, других устройств. Настройка должна быть такой же простой, как и раньше, с точки зрения устройств.
Javex

Ответы:

13

Наконец-то я нашел решение с переадресацией портов IPv4 на хосты только для IPv6, которые в основном используют socat:

socat TCP4-LISTEN:22,fork,su=nobody TCP6:[2a01:198:79d:1::8]:22

Мое решение в основном то же самое, за исключением того, что я использую имя хоста за исключением статического IP там. Старайтесь не использовать квадратные скобки с именем хоста, так как это будет интерпретировать его как IP.

javex
источник