uzd Posted July 14, 2019 Posted July 14, 2019 Добрый день. Столкнулся с проблемой прохождения трафика 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
murano Posted July 15, 2019 Posted July 15, 2019 Это было риторическое рассуждение? Вставить ник Quote
uzd Posted July 15, 2019 Author Posted July 15, 2019 Нет, не риторическое. Код и описание по установке выложены на Github по ссылке из первого сообщения. Вставить ник Quote
vurd Posted July 15, 2019 Posted July 15, 2019 Это шикарно. Теперь есть все компоненты для постройки браса на линухах ipt_netflow, ipt_ratelimit и вот ipt_cgnat, которого не хватало. Автору респект за раскрытие Вставить ник Quote
pppoetest Posted July 16, 2019 Posted July 16, 2019 Цитата No ALGs for FTP/SIP/PPTP are implemented Вставить ник Quote
vurd Posted July 16, 2019 Posted July 16, 2019 1 час назад, pppoetest сказал: И? У меня прямо сейчас этого нет в железном эриксоне, живём как-то.. Вставить ник Quote
pppoetest Posted July 16, 2019 Posted July 16, 2019 Как разбираетесь с клиентами которым позарез нужен пптп? Вставить ник Quote
StSphinx Posted July 16, 2019 Posted July 16, 2019 28 минут назад, pppoetest сказал: Как разбираетесь с клиентами которым позарез нужен пптп? Тоже , в свое время, стояли Эриксоны в качестве NAT box... За время их эксплуатации, а это года 4-ре, заявок на то, что вот такой протокол не работает через ваш NAT, было 5-6, не больше. Клиентам дали белые адреса и закрыли проблему. Сеть не очень большая ~20K клиентов. Сейчас перешли на CG-NAT на СКАТ. Пока не было ни одной заявки с жалобами на NAT. Вставить ник Quote
Bushi Posted July 16, 2019 Posted July 16, 2019 18 часов назад, vurd сказал: Это шикарно. Теперь есть все компоненты для постройки браса на линухах ipt_netflow, ipt_ratelimit и вот ipt_cgnat, которого не хватало. Автору респект за раскрытие А если бы еще всё это запихать в красивую обертку как у vyatta/vyos... Я бы купил. Вставить ник Quote
uzd Posted July 17, 2019 Author Posted July 17, 2019 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
h3ll1 Posted July 17, 2019 Posted July 17, 2019 3 hours ago, uzd said: особой необходимости в данном функционале в моем случае так и не возникло ну ето и дело. Давай! Действуьи. Вставить ник Quote
LostSoul Posted July 18, 2019 Posted July 18, 2019 я смотрю все такие спецы по 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
MATPOC Posted July 18, 2019 Posted July 18, 2019 15 минут назад, LostSoul сказал: подскажите почему у у меня на современном debian не натится gre. modprobe ip_nat_pptp Вставить ник Quote
pppoetest Posted July 18, 2019 Posted July 18, 2019 3 часа назад, LostSoul сказал: alg загружал-выгружал Вставить ник Quote
jffulcrum Posted July 18, 2019 Posted July 18, 2019 @LostSoul Аплинк у себя прикрыл? Вставить ник Quote
LostSoul Posted July 18, 2019 Posted July 18, 2019 5 минут назад, jffulcrum сказал: Аплинк у себя прикрыл? мы сами себе аплинк. это считайте разновидность хитрого fallover железок без дополнительного дублирования волокон. в tcpdump все видно. но не форвардится и счетчики iptables тоже не увеличивает. я уже решил как то проблему один раз, но не сохранил в конфигурации debian. теперь, спустя год, забыл как. там еще что-то возможно завязанное на net.netfilter.nf_conntrack_helper и.т.п. в общем точный рецепт я забыл gre ходит не натуральный, фактически это IPOE микротиковский по 47 протоколу. но везде работает с обычными pptp/gre хелперами. Вставить ник Quote
ShumBor Posted July 18, 2019 Posted July 18, 2019 (edited) @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
LostSoul Posted July 18, 2019 Posted July 18, 2019 13 минут назад, ShumBor сказал: echo 1 > /proc/sys/net/netfilter/nf_conntrack_helper ? ну написал же сообщением выше, что не помогает. ни без хелперов с выкл и вкл, ни с хелперами с выкл и вкл, ни в разных сочетаниях типа ip_nat_gre грузим, а ip_nat_pptp нет. Вставить ник Quote
TriKS Posted July 18, 2019 Posted July 18, 2019 (edited) 40 минут назад, ShumBor сказал: echo 1 > /proc/sys/net/netfilter/nf_conntrack_helper ? неа, ему извне во внутрь. Но он не понимает как оно работает, ведь на микротике клац-клац по роликам с ютуба и работает, а тут роликов на ютубе нету :) 1 час назад, LostSoul сказал: мы сами себе аплинк. На микротиках? :)) PS. А зачем любителю некротиков вдруг понадобился линукс с NAT? Ставь себе свой любимый некрик и радуйся :) Edited July 18, 2019 by TriKS Вставить ник Quote
SABRE Posted July 19, 2019 Posted July 19, 2019 16 hours ago, LostSoul said: мы сами себе аплинк. это считайте разновидность хитрого fallover железок без дополнительного дублирования волокон. в tcpdump все видно. но не форвардится и счетчики iptables тоже не увеличивает. я уже решил как то проблему один раз, но не сохранил в конфигурации debian. теперь, спустя год, забыл как. там еще что-то возможно завязанное на net.netfilter.nf_conntrack_helper и.т.п. в общем точный рецепт я забыл gre ходит не натуральный, фактически это IPOE микротиковский по 47 протоколу. но везде работает с обычными pptp/gre хелперами. Можете пожалуйста показать conntrack для такой gre сессии и вывод lsmod? Вставить ник Quote
LostSoul Posted July 19, 2019 Posted July 19, 2019 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
LostSoul Posted July 19, 2019 Posted July 19, 2019 кажется я начал вспоминать, возможно там дело в аппаратной проверке crc на сетевухе. сегодня проверю. Вставить ник Quote
SABRE Posted July 19, 2019 Posted July 19, 2019 1 hour ago, LostSoul said: указанного соединения в conntrack просто не появляется. счетчики соответствующих правил iptables не срабатывают. Тогда и модули не интересно) Можете создать тестовое правило в raw с селектором такого типа пакетов, попадают ли они вообще туда? Если да, смотрим дальше iptables, нет - tcpdump и ingress фильтры Вставить ник Quote
LostSoul Posted July 19, 2019 Posted July 19, 2019 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
SABRE Posted July 19, 2019 Posted July 19, 2019 @LostSoul вообще интересно) iptables -t raw -nvL iptables -t nat -nvL может оно уже чем-то до этого натится? conntrack | grep gre Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.