LINUX.ORG.RU
ФорумAdmin

iptables PREROUTING и отдача трафика с локальной машины вовне

 ,


0

1

Господа умные. Простите, если дурью своей вас посмешу. Применительно к iptables и правилам фильтрации владею базовыми знаниями. Внесите, пожалуйста, ясность, если не затруднит. Итак. Есть 3 домашних рутера, последовательно соединенных: один получает интернет в WAN, 2 остальныъ один за другим соединены в LANы и работают как точки доступа. Есть внешний ip, который назначается 1му рутеру с локальным ip 192.168.1.1. У 2го рутера локальный адрес – 192.168.1.2, у 3го – 192.168.1.3.

Стояла задача для домашних нужд поставить программу трансляции видео вовне родственникам. Ввиду того что на 1м базовом рутере уже висели ресурсоемкие задачи, было принято решение программу поставить на 2й. Был сделан прерутинг такого рода:

iptables -t nat -A PREROUTING -p tcp --dport порт_раздачи --dst внешн._IP -j DNAT --to-destination 192.168.1.2

Родственники обращаются к ссылкам с внешним ip, пакеты уходят на 2й рутер, который отправляет им ответ. Все работает. Но! Не могу взять в толк. Когда проверяю работу изнутри и строю ссылку напрямую через 192.168.1.2 – все работает без тормозов. Когда строю ссылку через внешний ip (когда начинает работать PREROUTING), начинаются подвисания картинки. Внимание, вопрос! Может ли PREROUTING влиять на это, могут ли пакеты пропадать в пути, или мне копать в сторону низкой скорости отдачи? Хотя у меня тариф 100/100. На спидтесте по 95 в обе стороны. Поток на раздачу – 22 мбит/с (одновременно загружаются из сети программой трансляции и перенаправляются клиенту).


Смотрите картину (далее ip вымышленные). Вы обращаетесь из локалки например с адреса 192.168.1.200 на внешний ip 1.1.1.1 роутера, правило dnat отправляет на 192.168.1.2 а он ответ будет отправлять напрямую на 192.168.1.200. Т.е. исходящие пакеты отправляем на 1.1.1.1 а вот входящие получаем от 192.168.1.2.
Вариантов решения больше одного. Простые решения: Если хотите «прозрачности» и вас мало волнует кто ходил на 192.168.1.2 то добавьте еще правило snat. Или что проще так и ходите на 192.168.1.2 из локалки, «тупо и злобно». :) Вообще тема «избита» дальше некуда.

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

на 192.168.1.2 никто не попадет, там только для определенных ip доступ. А по сути – я-то все равно не смотрю! А если смотрю, могу поток напрямую грузить. Задача – без потерь его переадресовать во внешнюю сеть, когда оттуда стучатся на внешний ip. И тут начинаются лаги по сравнению с ситуацией, когда я запрашиваю трафик из локалки. Мне принципиально была интересна техническая стороны вопроса. Влияет ли как-то существенно этот dnat на скорость отдачи или нет. Просто, если есть предпосылки к влиянию, то мне проще транслятор установить на 1й рутер.

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

Видимо не очень распарсил. У вас лаги и из вне идут? Если да то тут уж скорее вопрос к скоростям/провайдерам.

Мне принципиально была интересна техническая стороны вопроса. Влияет ли как-то существенно этот dnat на скорость отдачи или нет.

nat теоретически/практически всегда влияет. Но вы же не на калькуляторе запускаете. Если уж интересно посмотрите на загрузку cpu и потребление памяти.
А судя по вашему описанию скорее предположу что у вас snat больше сожрет. :)

anc ★★★★★
()

PS

На спидтесте по 95 в обе стороны.

Он «от лукавого». Хотите померить скорость между точками запустите ipref3.

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

iperf3

Воевал с идиотами, использующими speedtest, года 3, пока в телекоме работал. Как же приятно это видеть.

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

фиг знает, не больше 10% загрузка процессора у рутера с транслятором и не больше 5% – у 1го рутера. Iperf3 выдает 95/95. Скорость на торрентах – по 9,5-11 мб/c на загрузку/отдачу. Короче, что-то не так, но что конкретно – не пойму. Как дело доходит до раздачи в Интернет, начинаются подвисания. Попробую запустить через основной рутер. Отпишусь о результатах.

Poheto
() автор топика

что за роутеры и какие прошивки?

Какой тип соединения с провайдером?

интернет в локалке точно нормально работает? Серфинг, всякие там видео с ютуба не тормозит? Нет проблем c MRU MTU TCP-MSS...

Если из локалки стучаться на внешний адрес, то работает без тормозов или тоже тормозит? Только тут необходимо, что бы hairpin nat работал. Возможно придется добавить еще одно правило SNAT (как уже было отмечено выше)

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

1й – rtn56u (Padavan). 2й (с транслятором) – rtn66u (последняя сток. прошивка). Я ж говорю, из локалки на внешний ip c dnat – работает, но с тормозами (snat в Padavan по умолчанию). Из локалки на 192.168.1.2 – нормально. По поводу MRU MTU TCP-MSS – не в курсе, что может быть с ними не так. По дефолту. Все остально работает блестяще. Поток в интернете на переадресацию – 20 мбит/c. По схеме запроса из локалки на локальный адрес получает 20 мбит/c загрузка WAN, 20 мбит/c отдача LAN. По схеме запроса из локалки на внешний ip – 20 мбит/c загрузка WAN, 20 мбит/c загрузка LAN, 40 мбит/c отдача LAN соответственно. Порты гигабитные у обоих рутеров, соединение 100 мбит/c (iperf 3 дает 92-94 мбит/c). Где узкое место, не понимаю.

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

соединение 100 мбит/c (iperf 3 дает 92-94 мбит/c). Где узкое место, не понимаю.

Все-таки уточню. Именно точка(ваш сервер) - точка(клиент)? У клиента тоже 100-ка?

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

из локалки на внешний ip c dnat – работает, но с тормозами

Значит проблема не в провайдере/интернете. Тут работает только dnat+snat на первом роутере. Трафик гоняется только по локалке.

Вроде вы уже написали, но ещё раз уточним. Из интернета на внешний тоже тормозит?

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

Ответ и для anc в том числе.

Я уже сам не пойму, на самом деле, тормозит ли из интернета на внешний. Сам проверить не могу. А родственники что-то невразумительное мычат. Из локалки на внешний – точно тормозит по сравнение с «локалка <--> 192.168.1.2».

Если кто-то не боится или за сетью провайдера сидит.. И у кого нормальные 100 на прием, дайте ip, я внесу в список разрешенных и дам ссылку на видеопоток, попробуете его открыть в VLC. И проверим.

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

Из локалки на внешний – точно тормозит по сравнение с «локалка <--> 192.168.1.2».

Я же писал про snat, не пробовали еще? Именно отдельное правило snat для локалки а не то что вы предположили «по умолчанию» которое скорее всего только наружу.

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

не обязательно)

Какая разница как их (правила) смотреть. Главное какие они (эти правила)

2ТС: но лучше давайте полный выхлоп а не только nat и filter forward, те «выхлоп iptables-save» :)

samson ★★
()
Последнее исправление: samson (всего исправлений: 1)
Ответ на: комментарий от samson

Если речь о таком правиле snat:

iptables -t nat -I POSTROUTING 1 -p tcp --dst 192.168.1.2 --dport порт_трансляции -j SNAT --to-source 192.168.1.1
Его добавлял, но в нем нет необходимости.

Правила nat

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
vserver    all  --  0.0.0.0/0            внешний_ip       
DNAT       tcp  --  0.0.0.0/0            195.82.146.120/30    tcp dpt:80 to:163.172.167.207:3128
DNAT       tcp  --  0.0.0.0/0            внешний_ip        tcp dpt:1й_порт_трансляции to:192.168.1.2
DNAT       tcp  --  0.0.0.0/0            внешний_ip        tcp dpt:2й_порт_трансляции to:192.168.1.2

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
SNAT       all  --  192.168.1.0/24       0.0.0.0/0            to:внешний_ip
SNAT       all  --  192.168.1.0/24       192.168.1.0/24       to:192.168.1.1

Chain upnp (1 references)
target     prot opt source               destination         

Chain upnp-post (0 references)
target     prot opt source               destination         

Chain vserver (1 references)
target     prot opt source               destination         
upnp       all  --  0.0.0.0/0            0.0.0.0/0

Правила filter

Chain FORWARD (policy DROP)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
DROP       all  --  0.0.0.0/0            0.0.0.0/0            state INVALID
ACCEPT     udp  --  0.0.0.0/0            224.0.0.0/4         
doslimit   all  --  0.0.0.0/0            0.0.0.0/0            state NEW
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate DNAT

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain bfplimit (0 references)
target     prot opt source               destination         

Chain doslimit (2 references)
target     prot opt source               destination         
RETURN     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp flags:0x17/0x02 limit: avg 20/sec burst 30
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp flags:0x17/0x02
RETURN     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp flags:0x17/0x04 limit: avg 1/sec burst 5
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp flags:0x17/0x04
RETURN     icmp --  0.0.0.0/0            0.0.0.0/0            icmptype 8 limit: avg 2/sec burst 5
DROP       icmp --  0.0.0.0/0            0.0.0.0/0            icmptype 8

Chain upnp (0 references)
target     prot opt source               destination         

Chain vpnlist (0 references)
target     prot opt source               destination

INPUT правила, не думаю, что могут быть интересны. Там, главным образом, классическое ограничение доступа. Разве только вот это было по умолчанию в прошивке, что добавлял не я.

ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
DROP       all  --  0.0.0.0/0            0.0.0.0/0            state INVALID
ACCEPT     2    --  0.0.0.0/0            224.0.0.0/4         
ACCEPT     udp  --  0.0.0.0/0            224.0.0.0/4          udp dpt:!1900
doslimit   all  --  0.0.0.0/0            0.0.0.0/0            state NEW
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp spt:67 dpt:68
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0            icmp !type 8

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

Poheto
() автор топика
Ответ на: комментарий от Poheto
Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
SNAT       all  --  192.168.1.0/24       0.0.0.0/0            to:внешний_ip
SNAT       all  --  192.168.1.0/24       192.168.1.0/24       to:192.168.1.1

не видно инрефейсов. Если не прописаны, то второе правило не работает. Давайте вывод либо iptables-save либо iptables -vnL

c filter forward аналогично, не понятно что там за accept all.

попробуйте с такими правилами:

-t nat -A PREROUTING -d EXT_IP -p tcp --dport PORT -j DNAT --to-destination 192.168.1.2
-t nat -A POSTROUTING -o local_iface -d 192.168.1.2 -p tcp --dport PORT -j MASQUERADE
-t nat -A POSTROUTING -o wan_iface -j MASQUERADE
Ну и в forward не забыть разрешить. Этого должно быть достаточно.

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