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

iptables перенаправляет порт между 2 сетями с 2 картами Ethernet

У меня есть сервер, обслуживающий несколько служб. Для целей этого вопроса предположим, что один из них - почта. Если почта выходит из строя, я хочу переслать ее другому хосту. Моя сеть выглядит так:

-- Network 1 --

Box 1
eth1: 192.168.1.5
eth0: 10.10.10.3

-- Network 2 --

Box 2
eth0: 10.10.10.5

Итак ... Входящие запросы поступают на адрес 192.168.1.5 на eth1 в блоке 1. Вместо того, чтобы останавливаться на нем, я хочу перенаправить их через eth0 в ящик 2 и позволить этому обработать это.

Я пробовал следующие правила iptables:

iptables -t nat -A PREROUTING -p tcp -m tcp -d 192.168.1.5 --dport 25 -j DNAT --to-destination 10.10.10.5:25
iptables -A FORWARD -m state -p tcp -d 10.10.10.5 --dport 25 --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -p tcp -m tcp -s 10.10.10.5 --sport 25 -j SNAT --to-source 192.168.1.5

... Но безрезультатно. Используя tcpdump, я вижу, что запрос поступает во втором поле, но на запрашивающем компьютере ничего не происходит.

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

На данный момент закончил использование xinetd для работы с почтой.

service smtp
{
        disable = no
        socket_type     = stream
        wait            = no
        user            = root
        redirect        = 10.10.10.5 25
        log_on_failure  += USERID
}

Спасибо за вашу помощь всем!

Если вам нужна помощь с этим, я предлагаю вам показать полный набор правил iptables. Несколько пакетов от tcpdump тоже не повредят.

Между тем:

У вас включена переадресация ip? Проверить с:

sysctl net.ipv4.conf.all.forwarding

Установить с:

sysctl net.ipv4.conf.all.forwarding=1

Сделайте постоянным, добавив в /etc/sysctl.conf (или там, где этого ожидает ваш дистрибутив).

Вам также необходимо разрешить переадресацию для противоположного направления, добавьте правило пересылки для -s 10.10.10.5 и -o eth1 тоже (если у вас его нет, или политика для всех / по умолчанию уже ACCEPT):

iptables -A FORWARD -s 10.10.10.5 -o eth1 -j ACCEPT

Несколько комментариев в целом:

  • Вероятно, вы захотите сопоставить интерфейсы, а также просто tcp / ip source / destination / ports.
  • Я не совсем уверен, что правило POSTROUTING / snat необходимо для того, что вы пытаетесь выполнить. DNAT уже преобразовал исходный адрес пакета перед POSTROUTING.

Одной из возможных причин, по которой вы не видели никаких ответов на клиенте, может быть таблица маршрутизации на Блоке 2. DNAT не перезаписывает адрес источника, и для того, чтобы DNAT работал, Блоку 2 необходим маршрут обратно к источнику, который проходит через Box 1. Если это «произвольный IP-адрес», то для Box 2 потребуется маршрут по умолчанию через Box 1, если это конкретные сети, подойдут обратные маршруты в эти сети через Box 1.