LINUX.ORG.RU
ФорумAdmin

Проброс трафика на другой хост - помогите найти ошибку.

 


0

1

На сервере asterisk интерфейс eth0.11 (1.1.1.1) и на него приходит sip трафик.
Надо этот трафик отправлять на другой хост (2.2.2.2) доступный на интерфейсе eth0
Погуглил и пришел к такому решению:

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp -d 1.1.1.1 -j DNAT --to-destination 2.2.2.2
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Решение не заработало.
tcpdump на входящем интерфейсе показывает трафик и он попадает в asterisk находящийся на локальном хосте вместо того чтобы отправляться на другой хост.

Подскажите пожалуйста что я делаю не так?

★★★

Во-первых, как правило трафик в VoIP завернут в udp. Я бы начал с того, что в правилах форвардинга указал просто:

iptables -t nat -A PREROUTING -d 1.1.1.1 -j DNAT --to-destination 2.2.2.2

Вместо:

iptables -t nat -A PREROUTING -p tcp -d 1.1.1.1 -j DNAT --to-destination 2.2.2.2

Во-вторых почему сразу не сделать настройки в asterisk на нужный интерфейс, чем делать вот это все?

Ну в третьих я бы пошел путем зеркалирования трафика а не заворачивания его в NAT.

yakunin
()
Ответ на: комментарий от yakunin

iptables -t nat -A PREROUTING -d 1.1.1.1 -j DNAT --to-destination 2.2.2.2

И так не работает. Отвечает астериск на этом хосте.

Во-вторых почему сразу не сделать настройки в asterisk на нужный интерфейс, чем делать вот это все?

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

NOTICE[2930] chan_sip.c: Call from 'sipext' to extension 'NNNNNN' rejected because extension not found.

Ну в третьих я бы пошел путем зеркалирования трафика а не заворачивания его в NAT.

Можно пруфлинк?

n0mad ★★★
() автор топика
Ответ на: комментарий от n0mad

Я вам больше скажу. Маскарадинг в вашем случае вообще не вариант. Для чего нужен NAT? Что бы вы могли выпустить приватные адреса как один белый адрес. То есть например что бы ваши машины в локальной сети 192.168.0.0/24 были видны в сети как один адрес 8.8.8.8.

А вам надо зеркалировать трафик на другой хост. Это не задача NAT. Но это можно сделать через IPTables + Tee погуглите найдете массу документации.

Вам надо что бы и на боевой и на тестовый стенд шли пакеты одновременно.

Например: https://superuser.com/questions/853077/iptables-duplicate-traffic-to-another-ip

yakunin
()

Немного не вкурил. У вас на eth0 есть адрес 1.1.1.1 а адрес 2.2.2.2 физически на другом хосте но исходящим интерфейсом для него будет тот же eth0 и через тот же gw ?

anc ★★★★★
()
Ответ на: комментарий от anc

Немного не вкурил. У вас на eth0 есть адрес 1.1.1.1 а адрес 2.2.2.2 физически на другом хосте но исходящим интерфейсом для него будет тот же eth0 и через тот же gw ?

Есть eth0.11 (vlan11 приходящий на eth0 и выглядящий как отдельный интерфейс и 1.1.1.1 доступен без gw) и есть eth0 - собственно интерфейс на котором без всяких gw доступен 2.2.2.2

n0mad ★★★
() автор топика
Ответ на: комментарий от n0mad

Хм, оба локальные и при этом при правиле iptables -t nat -A PREROUTING -d 1.1.1.1 -j DNAT --to-destination 2.2.2.2 пакеты получает слушающий только на 1.1.1.1 а не слушающий на 2.2.2.2 ?

anc ★★★★★
()
Ответ на: комментарий от anc

пакеты получает слушающий только на 1.1.1.1 а не слушающий на 2.2.2.2 ?

Да запросто, если действительно пробовать локально на этом же хосте без правила OUTPUT :) Впрочем, для localhost похоже вообще даже OUTPUT не помогает...

vodz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.