LINUX.ORG.RU
ФорумAdmin

Ejabberd, доступ из вне iptables

 , ,


0

2

Всем добрый день. Прошу помощи в настройке подключения клиентов PSI+ из внешки. В локальной сети настроен сервер Ejabberd. 192.168.0.13 Внутри сети клиенты подключаются, все ок. Есть необходимость в подключении из вне. Сервер 0.13 стоит за шлюзом Debian 192.168.0.251 На шлюзе стоят правила iptales. Инет на шлюзе(eth1) идет по ppoe(ip статика). Так вот, проброс портов делаю так:

$IPTABLES -A FORWARD -i eth1 -p tcp --dport 5222 -j ACCEPT
$IPTABLES -t nat -A PREROUTING -p tcp -d 195.46.XXX.X --dport 5222 -j DNAT --to-destination 192.168.0.13:5222
$IPTABLES -t nat -A POSTROUTING -p tcp --dst 192.168.0.13 --dport 5222 -j SNAT --to-source 195.46.XXX.X

$IPTABLES -A FORWARD -i eth1 -p tcp --dport 5223 -j ACCEPT
$IPTABLES -t nat -A PREROUTING -p tcp -d 195.46.XXX.X --dport 5223 -j DNAT --to-destination 192.168.0.13:5223
$IPTABLES -t nat -A POSTROUTING -p tcp --dst 192.168.0.13 --dport 5223 -j SNAT --to-source 195.46.XXX.X

$IPTABLES -A FORWARD -i ppp0 -p tcp --dport 5222 -j ACCEPT
$IPTABLES -t nat -A PREROUTING -p tcp -d 195.46.XXX.X --dport 5222 -j DNAT --to-destination 192.168.0.13:5222
$IPTABLES -t nat -A POSTROUTING -p tcp --dst 192.168.0.13 --dport 5222 -j SNAT --to-source 195.46.XXX.X

$IPTABLES -A FORWARD -i ppp0 -p tcp --dport 5223 -j ACCEPT
$IPTABLES -t nat -A PREROUTING -p tcp -d 195.46.XXX.X --dport 5223 -j DNAT --to-destination 192.168.0.13:5223
$IPTABLES -t nat -A POSTROUTING -p tcp --dst 192.168.0.13 --dport 5223 -j SNAT --to-source 195.46.XXX.X

Это не работает. При попытке подключения с PSI+ получаю ошибку «Ошибка обмена данными с сервером. Ошибка согласования потока. Узел не найден.» До этого на шлюзе был «белый ip» и эти правила работали. Возможно не срабатывают из-за ppoe? Подскажите, как можно поправить? Спасибо…

Во-первых, оформи сообщение. Во-вторых, у тебя правила дублируются (но это не страшно). В-третьих, если убрать SNAT, то внешние клиенты подключаются? У тебя сейчас SNAT'ятся вообще любые запросы.

YAR ★★★★★ ()

Какой логикой ты руководствуешься, добавляя в POSTROUTING -d 192.168.0.13? Это не могло работать.

iptables -t nat -A POSTROUTING -s 192.168.0.13 -p tcp --sport 5223 -j SNAT --to-source xx.xx.xx.xx
shell-script ★★★★★ ()

Кто и как писал эти правила? Это ебейшая галиматья. Приведите вывод команд:

iptables -t nat -L -nxv
iptables -t filter -L -nxv

Вам нужно всего 2 правила. 1 SNAT для работы интернета в локалке и 1 правило DNAT для проброса портов

Anoxemian ★★★★★ ()
Последнее исправление: Anoxemian (всего исправлений: 1)

Тебе не нужен SNAT. Для форвардинга портов:

  1. Убеждаешься, что соответствующий sysctl разрешен (т. к. у тебя там работает NAT, то это уже есть)
  2. Убеждаешься, что в FORWARD цепочке есть правило, разрешающее данные пакеты. В принципе, твоего FORWARD более чем достаточно (он разрешит как входящие, так и исходящие коннекты на 5222 порт — возможно последнее тебе не нужно)
  3. Добавляешь DNAT правило, как у тебя
  4. Вместо SNAT добавляешь
    iptables -t nat -A POSTROUTING -o $внутренний_сетевой_интерфейс_по_которому_идет_комммуникация_к_192.168.0.13 -j MASQUERADE

Проверяешь безо всяких PSI и прочей муры, выбрав левый порт (чтобы не беспокоить тех, кто живет на внутреннем джаббере) и запускаешь на целевой машине слушать этот порт кого угодно (хоть nc, хоть nginx), а снаружи ломишься туда хоть curl-ом, хоть telnet-ом и убеждаешься, что коннект и обмен данными происходит.

Если что-то не работает, дебажишь tcpdump-ом, записывая трафик на шлюзе и машине-приемнике.

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

Это тоже ебейшая галиматья, прекратите давать вредные советы. В данном случае еще и некорректные.

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

Убрал SNAT, клиенты не подключаются. За оформление простите. Поторопился. Правила дублировал для разных портов, и для подключения ppp0. Думал что из-за этого не работают.(

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

iptables были еще до меня. Там править и править все нужно. Опыта большого нет у меня, и поэтому особо не правил их и не лез. Да и видите, элементарный вопрос про проброс портов, и теряюсь. Понял, буду изучать дальше, готового не нужно, так не интересно. Просто сейчас все работает, инет раздается в локалку. И я могу экспериментировать с правилами только по вечерам после 20:00, что не очень удобно мне. Пока раздается лишь правилами iptfbles. В скором времени подниму прокси squid, думаю так будет лучше. Выводы команд боюсь давать, думаю там бардак полный. Сначала изучу все как нужно, а там может и понимание придет. Спасибо за советы всем. Пошел набираться опыта.

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

Squid уже давно не нужен. В современных реалиях он бесполезен. Куда копать с конкретно этой задачей, я тебе написал, попробуй.

shell-script ★★★★★ ()
Ответ на: комментарий от serega1576

В скором времени подниму прокси squid, думаю так будет лучше.

Нет.

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

Squid уже давно не нужен.

Бывает что нужен удобен. Пример: разные браузеры выходят через разные прокси, сами прокси в разных странах. Удобство в том, что одновременно можно выходить из разных стран не парясь с переключением туннелей.

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

Лови:

$IPTABLES -t nat -A POSTROUTING -o ppp0 -j SNAT --to-source 195.46.XXX.X

Это даст доступ локалке твоей в интернет.

$IPTABLES -t nat -A PREROUTING -p tcp -m multiport --dports 5222,5223 -j DNAT --to-destination 192.168.0.13

Это пробросит порты для ejabberd.

Anoxemian ★★★★★ ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.