Перенаправление трафика на другой внешний адрес средствами iptables

Добрый день всем.

Возникла очередная задача: заказчик захотел скрыть внешний адрес своего сервиса в интерне для подключаемых клиентов.

Было предложено решение: арендовать виртуальный сервер где-то  за границей и входящий трафик по определенному порту перенаправлять  на сервер заказчика. Схема решения следующая:

iptables001

На самом деле таких решений  в интернете море, просто распишу в подробностях, может кому то поможет:

За сам проброс отвечает iptables, соответсвенно правила для проброса следующие:

iptables -t nat -A PREROUTING -p tcp --dst  x.x.x.x   --dport 3389 -j DNAT --to-destination y.y.y.y:3389

iptables -t nat -A POSTROUTING -p tcp --dst y.y.y.y  --dport 3389 -j SNAT --to-source x.x.x.x

Где :

x.x.x.x  — ip адрес виртуального сервера с iptables

y.y.y.y — ip адрес терминального сервера заказчика

Т.к. правила в iptables живут до перезагрузки нам нужно сделать скрипт и заставить его запускаться при старте системы.

1) создаем сам файл port_forward:

vi  /etc/init.d/port_forward    и вставляем следующее содержание:

#!/bin/bash
echo "1"> /proc/sys/net/ipv4/ip_forward
iptables -F
iptables -t nat -A PREROUTING -p tcp --dst x.x.x.x --dport 3389 -j DNAT --to-destination y.y.y.y:3389
iptables -t nat -A POSTROUTING -p tcp --dst y.y.y.y --dport 3389 -j SNAT --to-source x.x.x.x

2) даем данному файлу права запуска:

chmod 755 /etc/init.d/port_forward

3) добавляем данный файл в автозагрузку:

cp -s /etc/init.d/port_forward   /etc/rc3.d/S90port_forward

И перезагружаем виртуальный сервер —  теперь терминальным клиентам остается только прописать в адресе подключения  адрес x.x.x.x и их прозрачно будет перенаправлять на сервер y.y.y.y

Добавлю, что при работе на терминальном сервере в верху экрана (где пишется адрес, куда мы подключились) отображается адрес  x.x.x.x

На самом терминальном сервере в рамках задачи тоже нужно сделать ряд ограничений, но это выходит за рамки данной заметки.

 

 

 

Запись опубликована в рубрике Без рубрики с метками . Добавьте в закладки постоянную ссылку.

6 комментариев на «Перенаправление трафика на другой внешний адрес средствами iptables»

  1. Анна говорит:

    Спасибо, инструкция подробная.
    А если задача осложнена тем, что нужна переадресация не только пользователей по RDP, но дополнительно на арендованный IP прикреплены домены, а сами сайты лежат на y.y.y.y сервере? Это возможно сделать силами iptables?

  2. Dzuba говорит:

    Добрый вечер,
    Ваш запрос тоже должен быть решен данным сценарием, т.к. пробрасывается порт и в 99% случаев неважно для какой службы.

  3. Андрей говорит:

    Добрый день.
    где-то вычитал что перенаправление не будет работать если:
    /etc/sysctl.conf:
    net.ipv4.ip_forward = 0
    Может кто-то прокоментировать?

    • Dzuba говорит:

      Вы все правильно написали — в вашем примере перенаправление работать не будет.

      В своем сценарии я этот момент учел:
      echo «1»> /proc/sys/net/ipv4/ip_forward

  4. Роман говорит:

    Вопрос такой — а если на терминальном сервере заведено две линии, одна основная, вторая резервная, возможно настроить перенаправление на резервную, если не работает основная и возврат на основную когда она заработала. Пробовал через доменное имя (прикручен noip) — не получается.

    • Dzuba говорит:

      Добрый вечер.
      Такое можно настроить с помощью скриптов — т.е. скрипт периодически пингует сервер и если сервер не доступен по первому адресу — выполняется другой скрипт, который вносит изменения в iptables

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *