@stepanof23
DevOps/DataOps

В чем ошибка настройки перенаправления в iptables?

Есть сервер ip1, который доступен для подключения с локальной машины, с этого сервера есть доступ до сервера ip2. Чтобы не использовать ssh тунели через ip1 для доступа к ip2, хочу настроить перенаправление траффика через iptables.

Выполняю
sudo sysctl net.ipv4.ip_forward=1
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport $PORT1 -m state --state NEW -j DNAT --to $IP2:$PORT2
sudo iptables -t nat -A POSTROUTING -j MASQUERADE

Выполняю на сервере ip1 команду 'telnet $IP2 $PORT2' - успех
Однако на локальной машине выполнение 'telnet $IP1 $PORT1' не дает результата.

В чем ошибка?
PS
Не лучше ли для такой задачи использовать nginx или haproxy?

UPD:
а, так $PORT1 на $IP1 никто ведь не слушает ‍♂️
nginx или haproxy как раз и будут процессами, которые слушают $PORT1?
Или как можно по-другому систему заставить слушать определенный порт
UPD2:
Запустил nginx, теперь $PORT1=80 слушается на $IP1
Однако перенаправление не работает
  • Вопрос задан
  • 180 просмотров
Решения вопроса 1
@hbfhqvl331
Вот тут и тут написано как настроить DNAT.

MASQUERADE не нужен т.к. это SNAT, а тут настраивается DNAT.

Указывать -m state --state NEW нет смысла.
Netfilter вроде и так реализует NAT через отслеживание соединений, т.е. он и так применяет правило из таблицы nat только к первому пакету соединения, а у остальных пакетов соединения ip-адреса и порты перезаписываются автоматически.
Вот тут есть про это:
At each of the points above, when a packet passes we look up what connection it is associated with. If it's a new connection, we look up the corresponding chain in the NAT table to see what to do with it. The answer it gives will apply to all future packets on that connection.

Посмотреть текущие отслеживаемые соединения можно с помощью conntrack и cat /proc/net/ip_conntrack

В общем, должно хватить такого:
sudo sysctl net.ipv4.ip_forward=1
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport $PORT1 -j DNAT --to-destination $IP2:$PORT2

У меня работает.

Если никак не получается, можно использовать TRACE (описание ищите здесь) чтобы увидеть где именно в iptables пакеты не проходят.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы