uzd Posted July 14, 2019 · Report post Добрый день. Столкнулся с проблемой прохождения трафика P2P - торренты и сетевые игры на PS4/XBOX плохо работали из-за симметричного режима NAT при приализации NAT на базе Linux Iptables. Для решения данной проблемы я написал отдельный модуль с функциональностью CGN для Linux, который показал заметно бОльшую производительность по сравнению со стандартным NAT в Linux (и это явно из-за урезанной функциональности моего модуля). Хотя модуль и поддерживает только самые необходимые фичи, но он успешно проработал более 2 лет для >100k абонентов, пока не был вытеснен аппаратными решениями :) Возможно это решение будет интересно тем, кто все еще использует NAT на базе Linux Iptables. Предупреждение: 1. Качество кода не очень высокое, так как программирование на C - не моя специализация 2. Дальнейшая поддержка не планируется P.S. Отдельное спасибо автору модулей ipt_NETFLOW и ipt_ratelimit - много идей и примеров было взято оттуда. Ссылка на проект. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
murano Posted July 15, 2019 · Report post Это было риторическое рассуждение? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
uzd Posted July 15, 2019 · Report post Нет, не риторическое. Код и описание по установке выложены на Github по ссылке из первого сообщения. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
vurd Posted July 15, 2019 · Report post Это шикарно. Теперь есть все компоненты для постройки браса на линухах ipt_netflow, ipt_ratelimit и вот ipt_cgnat, которого не хватало. Автору респект за раскрытие Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
pppoetest Posted July 16, 2019 · Report post Цитата No ALGs for FTP/SIP/PPTP are implemented Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
vurd Posted July 16, 2019 · Report post 1 час назад, pppoetest сказал: И? У меня прямо сейчас этого нет в железном эриксоне, живём как-то.. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
pppoetest Posted July 16, 2019 · Report post Как разбираетесь с клиентами которым позарез нужен пптп? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
StSphinx Posted July 16, 2019 · Report post 28 минут назад, pppoetest сказал: Как разбираетесь с клиентами которым позарез нужен пптп? Тоже , в свое время, стояли Эриксоны в качестве NAT box... За время их эксплуатации, а это года 4-ре, заявок на то, что вот такой протокол не работает через ваш NAT, было 5-6, не больше. Клиентам дали белые адреса и закрыли проблему. Сеть не очень большая ~20K клиентов. Сейчас перешли на CG-NAT на СКАТ. Пока не было ни одной заявки с жалобами на NAT. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Bushi Posted July 16, 2019 · Report post 18 часов назад, vurd сказал: Это шикарно. Теперь есть все компоненты для постройки браса на линухах ipt_netflow, ipt_ratelimit и вот ipt_cgnat, которого не хватало. Автору респект за раскрытие А если бы еще всё это запихать в красивую обертку как у vyatta/vyos... Я бы купил. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
uzd Posted July 17, 2019 · Report post On 7/16/2019 at 6:11 AM, pppoetest said: No ALGs for FTP/SIP/PPTP are implemented Что интересно - особой необходимости в данном функционале в моем случае так и не возникло. FTP работает в пассивном режиме, PPTP (TCP1723+GRE) тоже проходит через NAT. Проблемы с GRE могут быть в случае, когда несколько клиентов на одном внешнем IP используют GRE. SIP не проверял. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
h3ll1 Posted July 17, 2019 · Report post 3 hours ago, uzd said: особой необходимости в данном функционале в моем случае так и не возникло ну ето и дело. Давай! Действуьи. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
LostSoul Posted July 18, 2019 · Report post я смотрю все такие спецы по GRE. подскажите почему у у меня на современном debian не натится gre. ну то есть стоит правило в iptables iptables -t nat -I PREROUTING -s <src_ip> -d <gw_ip> -j NETMAP --to-address <internal_ip> раньше всегда работало. сейчас для всех типов трафика работает, для gre нет. alg загружал-выгружал, sysctl дергал , по колесу стучал Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
MATPOC Posted July 18, 2019 · Report post 15 минут назад, LostSoul сказал: подскажите почему у у меня на современном debian не натится gre. modprobe ip_nat_pptp Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
pppoetest Posted July 18, 2019 · Report post 3 часа назад, LostSoul сказал: alg загружал-выгружал Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
jffulcrum Posted July 18, 2019 · Report post @LostSoul Аплинк у себя прикрыл? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
LostSoul Posted July 18, 2019 · Report post 5 минут назад, jffulcrum сказал: Аплинк у себя прикрыл? мы сами себе аплинк. это считайте разновидность хитрого fallover железок без дополнительного дублирования волокон. в tcpdump все видно. но не форвардится и счетчики iptables тоже не увеличивает. я уже решил как то проблему один раз, но не сохранил в конфигурации debian. теперь, спустя год, забыл как. там еще что-то возможно завязанное на net.netfilter.nf_conntrack_helper и.т.п. в общем точный рецепт я забыл gre ходит не натуральный, фактически это IPOE микротиковский по 47 протоколу. но везде работает с обычными pptp/gre хелперами. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
ShumBor Posted July 18, 2019 (edited) · Report post @LostSoul echo 1 > /proc/sys/net/netfilter/nf_conntrack_helper ? https://home.regit.org/netfilter-en/secure-use-of-helpers/ Edited July 18, 2019 by ShumBor Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
LostSoul Posted July 18, 2019 · Report post 13 минут назад, ShumBor сказал: echo 1 > /proc/sys/net/netfilter/nf_conntrack_helper ? ну написал же сообщением выше, что не помогает. ни без хелперов с выкл и вкл, ни с хелперами с выкл и вкл, ни в разных сочетаниях типа ip_nat_gre грузим, а ip_nat_pptp нет. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
TriKS Posted July 18, 2019 (edited) · Report post 40 минут назад, ShumBor сказал: echo 1 > /proc/sys/net/netfilter/nf_conntrack_helper ? неа, ему извне во внутрь. Но он не понимает как оно работает, ведь на микротике клац-клац по роликам с ютуба и работает, а тут роликов на ютубе нету :) 1 час назад, LostSoul сказал: мы сами себе аплинк. На микротиках? :)) PS. А зачем любителю некротиков вдруг понадобился линукс с NAT? Ставь себе свой любимый некрик и радуйся :) Edited July 18, 2019 by TriKS Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
SABRE Posted July 19, 2019 · Report post 16 hours ago, LostSoul said: мы сами себе аплинк. это считайте разновидность хитрого fallover железок без дополнительного дублирования волокон. в tcpdump все видно. но не форвардится и счетчики iptables тоже не увеличивает. я уже решил как то проблему один раз, но не сохранил в конфигурации debian. теперь, спустя год, забыл как. там еще что-то возможно завязанное на net.netfilter.nf_conntrack_helper и.т.п. в общем точный рецепт я забыл gre ходит не натуральный, фактически это IPOE микротиковский по 47 протоколу. но везде работает с обычными pptp/gre хелперами. Можете пожалуйста показать conntrack для такой gre сессии и вывод lsmod? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
LostSoul Posted July 19, 2019 · Report post 1 час назад, SABRE сказал: Можете пожалуйста показать conntrack для такой gre сессии и вывод lsmod? указанного соединения в conntrack просто не появляется. счетчики соответствующих правил iptables не срабатывают. я уже решал раньше проблему именно с этой машиной и той же версией ядра linux , но забыл как. список модулей ( не относящееся к сетевой подсистеме убрал для сокращения обьёма ) Цитата Module Size Used by nf_nat_pptp 16384 0 nf_nat_proto_gre 16384 1 nf_nat_pptp nf_conntrack_pptp 20480 1 nf_nat_pptp nf_conntrack_proto_gre 16384 1 nf_conntrack_pptp ip_tunnel 24576 0 nf_conntrack_netlink 40960 0 xt_conntrack 16384 1 ipt_MASQUERADE 16384 1 nf_nat_masquerade_ipv4 16384 1 ipt_MASQUERADE xt_NETMAP 16384 6 xt_addrtype 16384 2 iptable_nat 16384 1 nf_conntrack_ipv4 16384 9 nf_defrag_ipv4 16384 1 nf_conntrack_ipv4 nf_nat_ipv4 16384 1 iptable_nat nf_nat 32768 5 nf_nat_masquerade_ipv4,nf_nat_ipv4,nf_nat_pptp,xt_NETMAP,nf_nat_proto_gre nf_conntrack 131072 11 xt_conntrack,nf_nat_masquerade_ipv4,nf_conntrack_ipv4,nf_nat,nf_conntrack_pptp,ipt_MASQUERADE,nf_nat_ipv4,nf_nat_pptp,xt_NETMAP,nf_conntrack_netlink,nf_conntrack_proto_gre libcrc32c 16384 2 nf_conntrack,nf_nat iptable_raw 16384 0 tcp_diag 16384 0 inet_diag 24576 1 tcp_diag ip_set 40960 0 ip6table_filter 16384 0 ip6_tables 28672 1 ip6table_filter iptable_filter 16384 1 nfnetlink_log 20480 1 nfnetlink 16384 4 nf_conntrack_netlink,ip_set,nfnetlink_log vhost_net 24576 1 vhost 45056 1 vhost_net tap 24576 1 vhost_net iscsi_tcp 20480 0 libiscsi_tcp 20480 1 iscsi_tcp ip_tables 28672 3 iptable_filter,iptable_raw,iptable_nat x_tables 40960 9 ip6table_filter,xt_conntrack,iptable_filter,ipt_MASQUERADE,xt_addrtype,xt_NETMAP,ip6_tables,iptable_raw,ip_tables e1000e 249856 0 ptp 20480 1 e1000e pps_core 20480 1 ptp 1 час назад, SABRE сказал: Можете пожалуйста показать conntrack для такой gre сессии и вывод lsmod? или вы хотели вывод с других систем, где все работает? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
LostSoul Posted July 19, 2019 · Report post кажется я начал вспоминать, возможно там дело в аппаратной проверке crc на сетевухе. сегодня проверю. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
SABRE Posted July 19, 2019 · Report post 1 hour ago, LostSoul said: указанного соединения в conntrack просто не появляется. счетчики соответствующих правил iptables не срабатывают. Тогда и модули не интересно) Можете создать тестовое правило в raw с селектором такого типа пакетов, попадают ли они вообще туда? Если да, смотрим дальше iptables, нет - tcpdump и ingress фильтры Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
LostSoul Posted July 19, 2019 · Report post 8 минут назад, SABRE сказал: Тогда и модули не интересно) Можете создать тестовое правило в raw с селектором такого типа пакетов, попадают ли они вообще туда? Если да, смотрим дальше iptables, нет - tcpdump и ingress фильтры вот таким правилом ( raw ) пакеты proto=47 в лог падают, счетчики правила срабатывают Цитата iptables -t raw -s <src_ip> -j LOG вот такими двумя правилами счетчики не тикают, в лог ничего не падает Цитата iptables -t nat -I INPUT -s <src_ip> -j LOG iptables -t nat -I PREROUTING -s <src_ip> -j LOG ситуация специфична для debian начиная с какого-то обновления Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
SABRE Posted July 19, 2019 · Report post @LostSoul вообще интересно) iptables -t raw -nvL iptables -t nat -nvL может оно уже чем-то до этого натится? conntrack | grep gre Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...