Я использую этот туннельный подход:

https://superuser.com/a/1357450/972858

перенаправить порт N из хххх в гггг Он работает отлично, и пункт назначения yyyy может видеть фактический IP-адрес источника. Но есть одна маленькая проблема. хххх:N может быть доступен из любого места, но не из самого гггг. Я не уверен, почему, но я не могу telnet xxxx:N от гггг

Пожалуйста помоги.

1 ответ1

1

Это не работает по той же причине, что и переадресация портов в одной локальной сети, как правило, не работает. Другими словами, это ситуация шпильки-NAT. (Представьте себе туннель, как если бы он был просто локальной сетью локальной сети.)

Сам туннель может работать нормально - пакет достигает X, получает NAT и возвращается в Y. Однако, поскольку Y видит исходного отправителя как локального, ответ не проходит через X и, следовательно, X не может отменить NAT. В результате адреса в ответе не совпадают с адресами в исходном пакете, и Y (как исходный инициатор) не может найти подходящее соединение для ответа, который он только что получил.

Попробуйте добавить в iptables правило -t nat -I PREROUTING -d x.x.x.x --dport N -j REDIRECT для обработки этого случая - оно должно перехватывать исходящие пакеты без необходимости задействовать X вообще.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .