Автор Тема: Проброс порта с подменой ИП источника  (Прочитано 1572 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Faust

  • Ветеран
  • *****
  • Сообщений: 4302
  • Карма: 107
  • Пол: Мужской
  • Bla-bla-bla, mr. Freeman...
    • Просмотр профиля
Есть ipsec-тунель, через который есть связь с определенным сервером, ip и порт строго заданы
Этот сервер принимает пакеты только от одного ИП
Устройств, которые нужно подключить к серверу - 3 штуки, поэтому нужно реализовать эдакий шлюз с подменой ИП адреса отправляющего
В качестве шлюза - suse
На нем 2 сетевых интерфейса, один смотрит во внутреннюю сеть (eth0), второй тот самый, с которого принимает пакеты удаленный сервер (eth1).
Собсно, вся загвоздка в настройках iptables на suse. Нужно, чтобы все компьютеры, которые подключаются на внутренний ИП SUSE пробрасывались на удаленный сервер.
ИП сервера и ИП шлюза смотрящих друг на друга - в разных подсетях.

iptables щупаю в первый раз в жизни =)
Сначала разрешаю ходить пакетам, предназначенные для удаленного сервера, приходящие на интерфейс SUSE
iptables -A FORWARD -i eth1 -d 10.255.0.13 -p tcp --dport 3171 -m state --state NEW -j ACCEPT
10.255.0.13 - Это ИП удаленного сервера, 3171 - его порт
После этого нужно сделать само перенаправление

iptables -t nat -A PREROUTING -i eth1 -p tcp -j DNAT --to-destination 10.255.0.13:3171
И тут косяк=) Вроде сначала нам нужно сделать подмену ИП, а потом уже отправить пакет, а SNAT работает только в POSTROUTING
Как быть-то, мать его?:)
С компьютера, с которого подключаемся, ИП eth1 SUSE пингуется, это через роутинги сделал.

Все не так=)
Допедриваем по-тихоньку)))))
iptables -t nat -A PREROUTING -s 192.168.5.0/24 -i eth0 -j DNAT --to-destination 10.255.0.13  ===меняем адрес назначения с eth0 на 10.255.0.13 - адрес сервера
iptables -t nat -A POSTROUTING -s 192.168.5.0/24 -i eth0 -j SNAT --to-source 10.255.128.3 ===меняем адрес источника
Должно работать?:)
« Последнее редактирование: 01.04.14, 17:43:55 от Faust »


Оффлайн Crypt

  • Ветеран
  • *****
  • Сообщений: 1722
  • Карма: 137
  • Пол: Мужской
    • Просмотр профиля
Что то ты тут намудрил. Скажи сервер знает где находится сеть 192.168.5.0?
Пьяный проспиться, дурак - никогда.

Оффлайн Crypt

  • Ветеран
  • *****
  • Сообщений: 1722
  • Карма: 137
  • Пол: Мужской
    • Просмотр профиля
Понял, что меня смутило, во втором правиле должно быть не -i eth0, а -o eth1
Ну и первое правило можно опустить, если клиенты знают где находится сеть сервера и обращаются к его ИП, подмена будет работать.
Пьяный проспиться, дурак - никогда.

Оффлайн Faust

  • Ветеран
  • *****
  • Сообщений: 4302
  • Карма: 107
  • Пол: Мужской
  • Bla-bla-bla, mr. Freeman...
    • Просмотр профиля
Уже воткнули, но реализовали чуть иначе
iptables -t nat -A PREROUTING -p tcp -m tcp -d 192.168.5.15 --dport 3171 -j DNAT --to-destination 10.255.0.13:3171
iptables -t nat -A POSTROUTING -p tcp -m tcp -s 192.168.5.0/24 -j SNAT --to-source 10.255.128.3
где 192.168.5.0/24 наша сеть
192.168.5.15 - внутренний ИП suse
10.255.0.13 - ИП сервера
10.255.128.3 - ИП SUSE внешний

Так же вкатали строки
SuSEfirewall2 off - отключаем файерволл
sysctl net.ipv4.ip_forward=1 - разрешаем маршрутизацию между сетями
route add -net 10.255.0.0 netmask 255.255.255.0 gw 10.255.128.13 - роут где искать сеть удаленного сервера

Может что не так, но работает =)