Jump to content

Recommended Posts

Posted

Добрый день.

Столкнулся с проблемой прохождения трафика 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 - много идей и примеров было взято оттуда.

 

Ссылка на проект.

  • Replies 152
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Posted Images

Posted

Это шикарно. Теперь есть все компоненты для постройки браса на линухах ipt_netflow, ipt_ratelimit и вот ipt_cgnat, которого не хватало. Автору респект за раскрытие

Posted
28 минут назад, pppoetest сказал:

Как разбираетесь с клиентами которым позарез нужен пптп?

Тоже , в свое время, стояли Эриксоны в качестве NAT box... За время их эксплуатации, а это года 4-ре, заявок на то, что вот такой протокол не работает через ваш NAT, было 5-6, не больше. Клиентам дали белые адреса и закрыли проблему. Сеть не очень большая ~20K клиентов. Сейчас перешли на CG-NAT на СКАТ. Пока не было ни одной заявки с жалобами на NAT.

Posted
18 часов назад, vurd сказал:

Это шикарно. Теперь есть все компоненты для постройки браса на линухах ipt_netflow, ipt_ratelimit и вот ipt_cgnat, которого не хватало. Автору респект за раскрытие

А если бы еще всё это запихать в красивую обертку как у vyatta/vyos... Я бы купил.

Posted
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 не проверял.

Posted
3 hours ago, uzd said:

особой необходимости в данном функционале в моем случае так и не возникло

ну ето и дело. 

Давай! Действуьи.

Posted

я смотрю все такие спецы по GRE.

подскажите почему у у меня на современном debian  не натится gre.

ну то есть стоит  правило в iptables

 

iptables -t nat -I PREROUTING -s <src_ip>  -d <gw_ip>   -j NETMAP --to-address <internal_ip>

 

раньше всегда работало.  сейчас для всех типов трафика работает, для gre нет.

alg загружал-выгружал, sysctl дергал , по колесу стучал

 

Posted
15 минут назад, LostSoul сказал:

подскажите почему у у меня на современном debian  не натится gre.

modprobe ip_nat_pptp

Posted
5 минут назад, jffulcrum сказал:

Аплинк у себя прикрыл?

мы сами себе аплинк.

это считайте разновидность хитрого fallover железок без дополнительного дублирования волокон.

в tcpdump все видно. но не форвардится и счетчики iptables тоже не увеличивает.

я уже решил как то проблему один раз, но не сохранил в конфигурации debian.

теперь, спустя год, забыл как.

там еще что-то возможно завязанное на net.netfilter.nf_conntrack_helper   и.т.п.

в общем точный рецепт я забыл

 

gre ходит не натуральный, фактически это IPOE микротиковский по 47 протоколу.

но везде работает с обычными pptp/gre хелперами.

 

 

Posted
13 минут назад, ShumBor сказал:

 echo 1 > /proc/sys/net/netfilter/nf_conntrack_helper ?

ну написал же сообщением выше, что не помогает.

ни без хелперов с выкл и вкл,  ни с хелперами с выкл и вкл, ни в разных сочетаниях типа ip_nat_gre грузим, а ip_nat_pptp нет.

 

Posted (edited)
40 минут назад, ShumBor сказал:

echo 1 > /proc/sys/net/netfilter/nf_conntrack_helper ?

неа, ему извне во внутрь. Но он не понимает как оно работает, ведь на микротике клац-клац по роликам с ютуба и работает, а тут роликов на ютубе нету :)

1 час назад, LostSoul сказал:

мы сами себе аплинк.

На микротиках? :))

 

PS. А зачем любителю некротиков вдруг понадобился линукс с NAT? Ставь себе свой любимый некрик и радуйся :)

Edited by TriKS
Posted
16 hours ago, LostSoul said:

мы сами себе аплинк.

это считайте разновидность хитрого fallover железок без дополнительного дублирования волокон.

в tcpdump все видно. но не форвардится и счетчики iptables тоже не увеличивает.

я уже решил как то проблему один раз, но не сохранил в конфигурации debian.

теперь, спустя год, забыл как.

там еще что-то возможно завязанное на net.netfilter.nf_conntrack_helper   и.т.п.

в общем точный рецепт я забыл

 

gre ходит не натуральный, фактически это IPOE микротиковский по 47 протоколу.

но везде работает с обычными pptp/gre хелперами.

 

 

Можете пожалуйста показать conntrack для такой gre сессии и вывод lsmod?

Posted
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? 

или вы хотели вывод с других систем, где все работает?

 

Posted
1 hour ago, LostSoul said:

указанного соединения в conntrack просто не появляется.

счетчики соответствующих правил iptables не срабатывают.

Тогда и модули не интересно) Можете создать тестовое правило в raw с селектором такого типа пакетов, попадают ли они вообще туда? Если да, смотрим дальше iptables, нет - tcpdump и ingress фильтры

Posted
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 начиная с какого-то обновления

 

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.