Перейти к содержимому
Калькуляторы

Добрый день.

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Это было риторическое рассуждение?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Нет, не риторическое.

Код и описание по установке выложены на Github по ссылке из первого сообщения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Цитата

No ALGs for FTP/SIP/PPTP are implemented

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

И? У меня прямо сейчас этого нет в железном эриксоне, живём как-то..

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

3 hours ago, uzd said:

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

ну ето и дело. 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

 

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

 

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

modprobe ip_nat_pptp

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

alg загружал-выгружал

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

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

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

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

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

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

 

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

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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

https://home.regit.org/netfilter-en/secure-use-of-helpers/

Изменено пользователем ShumBor

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

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

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

 

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

Изменено пользователем TriKS

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

16 hours ago, LostSoul said:

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

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

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

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

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

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

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

 

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

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

 

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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? 

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

кажется я начал вспоминать, возможно там дело в аппаратной проверке  crc на сетевухе.   сегодня проверю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1 hour ago, LostSoul said:

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@LostSoul вообще интересно) iptables -t raw -nvL 

iptables -t nat -nvL

может оно уже чем-то до этого натится?

conntrack | grep gre

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.