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

Переписывает ли NAT-ing исходный IP-адрес в пакетах?

Я пытаюсь настроить переадресацию портов, чтобы конкретный IP-адрес (например, 1.2.3.4/32) мог использовать SSH через бастион (например, 5.5.5.5:2222) на сервер приложений (10.3.3.3:22). Бастион и сервер приложений работают в VPC в Amazon, и только бастион доступен в Интернете.

Я использую следующее правило на бастионе (я пропустил исходный IP-адрес, пока он не заработает):

iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 2222 -j DNAT --to 10.3.3.3:22

но когда я пытаюсь подключиться, я не получаю ответа.

Запуск tcpdump на бастионе показывает, что трафик проходит, поэтому я предполагаю, что я попал в группы безопасности VPC сервера приложений и не добрался до порта 22 на нем. Я думаю, это происходит потому, что, хотя у бастиона есть разрешение на доступ к порту 22 на сервере приложений, IP 1.2.3.4 - нет.

Итак, мой вопрос: изменяет ли NAT-способ, который я установил, автоматически исходный IP-адрес пакетов, чтобы они выглядели как исходящие от бастиона, или они будут содержать исходный исходный IP-адрес, в данном случае 1.2.3.4?

Если пакеты действительно содержат 1.2.3.4 в качестве IP-адреса источника после их пересылки, как я могу изменить исходный адрес на адрес бастиона?

Обновить

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

Теперь я попытался добавить SNAT с помощью:

iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 10.2.2.2

но все равно не работает (10.2.2.2 - это внутренний IP бастиона).

Итак, мой вопрос: изменяет ли NAT-способ, как я его настроил, автоматически исходный IP-адрес пакетов, чтобы они выглядели как исходящие от бастиона, или они будут содержать исходный исходный IP-адрес, в данном случае 1.2.3.4?

Нет, DNAT не меняет исходный ip, только место назначения. DNAT - Трансляция сетевых адресов назначения

Как я узнаю, включена ли переадресация IP на бастионе?

Следующая команда должна вернуть 1

# cat /proc/sys/net/ipv4/ip_forward

И как я могу заставить iptables выполнять SNAT (если это действительно то, что я хочу - я хочу, чтобы весь трафик внутри VPC поступал с бастиона, а затем бастион соответствующим образом перенаправлял его обратно)?

# iptables -t nat -I POSTROUTING -p tcp -s 1.2.3.4 -d 5.5.5.5 --dport 2222 -j DNAT --to-destination 10.3.3.3:22

Вы настроили DNAT, или "NAT назначения", что означает, что ваш шлюз перезаписывает место назначения адрес подключений, соответствующих этому правилу. Исходный адрес останется прежним, и вы сможете определить, запустили ли вы tcpdump на исходящем интерфейсе вашего хоста-бастиона или на сервере приложений.

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

Простым решением было бы заменить правило iptables простым прокси-сервером tcp (например, haproxy, ручка, баланс, и т.д). Попросите прокси-сервер прослушивать порт 2222 на вашем хосте-бастионе и перенаправлять соединения на порт 22 на сервере приложений, и он будет просто работать, потому что с точки зрения сервера приложений соединения происходят с хоста-бастиона.

Это просто быстрое исправление / краткосрочное решение

Тогда как насчет туннеля SSH?

ssh -L 2222:10.3.3.3:22 username@5.5.5.5 -N &
#then
ssh username@localhost -p 2222

SSH через SSH: D

Просто мысль.

Обновление: не видел этого: - /: «Обновление, я думаю, специально для SSH я мог бы настроить SSH-туннель, но мне также нужно аналогичное решение, чтобы разрешить доступ к порту 443 на нескольких разных серверах приложений».