vurd Posted July 21, 2019 41 минуту назад, LostSoul сказал: а как можно было call-центр крупного банка подключить с серым IP? или у этого банка надомные операторы , подключающиеся к серверу банковской телефонии? Второе, надомные. Там какой-то впн на базе веб приложения, шифрующийся сертификатом. Вот сообщение, которое транслирует их ТП через пользователей операторам. Цитата Добрый день!Просьба помочь в решении проблемы.Я являюсь вашим клиентом (). Для выполнения своих рабочих обязанностей я использую интернет-сервис для совершения звонков из браузера (через стандартные-протоколы), но не могу им воспользоваться в полной мере — вероятнее всего проблема вызвана некорректными сетевыми настройками на вашем оборудовании.Проблема в следующем — при звонке, совершаемом через сайт, соединение устанавливается, но далее я ничего не слышу. Все локальные настройки на компьютере, а также аудио-настройки произведены корректно. Подключение осуществляется напрямую, роутер из маршрута исключён.Скорее всего, это происходит потому, что на вашей стороне фильтруются фрагментированные UDP-пакеты, в которых передаётся сертификат для согласования DTLS с клиентом. Особенность DTLS в том, что при передаче сертификат не помещается в один пакет — идут 2 пакета, второй помечается флагом fragmented.Подскажите, пожалуйста, настроена ли на вашем оборудовании фильтрация фрагментированных UDP-пакетов? При диагностике было выявлено, что прохождение фрагментированного UDP-трафика (как входящего, так и исходящего) заблокировано — http://n1.netalyzr.icsi.berkeley.edu/summary/id=369839a0-583-6a6c8967-13dc-4e42-903d .Проверить работу сервиса можно на этой странице — https://weboffice.tinkoff.ru/AstPage/Demo2/AstIvrcall В случае успешного вызова вы услышите голосовое меню; если UDP-трафик блокируется, при вызове будет тишина. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
kisa Posted July 21, 2019 8 часов назад, LostSoul сказал: жуткие вещи вы рассказываете. что мешает проанализировать имеющиеся L3/L4 заголовки в рамках первого(первых) фрагментов , что необходимы для принятия решения о судьбе пакета, согласно настроенным и правилам и дальнейшей немедленной обработке и пересылке первого ( первых ) фрагментов? да, можно и так. сразу открыть сессию nat трансляции, привязать к ней ключ поиска последующих фрагментов, ну т.е. выполнять частично работу по дефрагментации (в части поиска сессий фраментов) самостоятельно в нате. фрагментированного трафика действительно немного, и когда дефрагментацию может делать какой-то модуль выше, то проще так и поступить, чтобы не усложнять nat алгоритмы. во всяком случае в NPF такая же схема. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
kisa Posted July 21, 2019 (edited) А можно чуть подробнее о случаях (игры/torrent), когда возникают проблемы у обычного linux nat (Address and Port-Dependent Mapping), и которые решаются схемой Endpoint-Independent Mapping (Assymetric (Full Cone) NAT )? А много проблем возникает из-за отсутствия hairpinning? Плохо работают это как? Edited July 21, 2019 by kisa Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
pppoetest Posted July 21, 2019 20 часов назад, SABRE сказал: ipset -N -! ct_fallback hash:ip А зачем тут "!"? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
vurd Posted July 21, 2019 Не сваливаться в ошибку, если список уже существует? Не работали с ипсетом до сих пор? Там постоянно это пишешь) -!, -exist Ignore errors when exactly the same set is to be created or already added entry is added or missing entry is deleted Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
pppoetest Posted July 21, 2019 Хмм, у меня скрипты создают/удаляют сеты, не проверял, но это камень в мой огород. Спасибо. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
uzd Posted July 23, 2019 On 7/21/2019 at 12:03 AM, SABRE said: Прежде всего спасибо за Вашу работу - модуль действитеьно очень нужет и является хорошим решением между stateless NAT via iproute и stateful conntrack NAT. Проверил на тестовом сервере - действительно NAT для GRE отрабатывает, но в сессиях записи об этом протоколе нет. Дописал часть правил чтобы клиентов, которые используют PPTP натить через conntrack: ipset -N -! ct_fallback hash:ip iptables -t raw -A PREROUTING -s <grey_net> -p tcp --dport 1723 -m set ! --match-set ct_fallback src -j SET --add-set ct_fallback src iptables -t raw -A PREROUTING -s <grey_net> -p gre -m set ! --match-set ct_fallback src -j SET --add-set ct_fallback src iptables -t raw -A PREROUTING -m set --match-set ct_fallback src -j RETURN iptables -t raw -A PREROUTING -s <grey_net> -j CT --notrack iptables -t raw -A PREROUTING -d <nat_pool> -j NAT --dnat iptables -A FORWARD -d <grey_net> -j ACCEPT iptables -A FORWARD -m set --match-set ct_fallback src -j ACCEPT iptables -A FORWARD -s <grey_net> -j NAT --snat iptables -t nat -A POSTROUTING -m set --match-set ct_fallback src -j SNAT --to-source <NAT_IP_for_fallback> Спасибо за обратную связь. И вообще жалко было просто удалять наработки - может быть они кому-нибудь пригодятся. On 7/21/2019 at 1:06 PM, kisa said: А можно чуть подробнее о случаях (игры/torrent), когда возникают проблемы у обычного linux nat (Address and Port-Dependent Mapping), и которые решаются схемой Endpoint-Independent Mapping (Assymetric (Full Cone) NAT )? А много проблем возникает из-за отсутствия hairpinning? Плохо работают это как? У нас были жалобы на "режим NAT3 при игре по сети на PS4". Суть в том, что два клиента за NAT могут установить P2P-соединение в случае, когда у них Asymmetric NAT - для этого используется промежуточный сервер в интернете (что-то типа STUN-сервера), но трафик при этом ходит напрямую между клиентами. Для PS4 такой режим называется "NAT2". Но если один из клиентов работает через Restricted NAT, то к нему никто не сможет подключиться по описанной выше схеме. Похожая ситуация и с torrent. Если вам через Asymmetric NAT удалось подключиться к клиенту с Public IP, и этот клиент сообщил о вас дргим пирам, то эти пиры смогут подключиться к вам на тот же NAT_IP:NAT_Port, который вы используете для подключения к клиенту с Public IP. При Restricted NAT так не получится. То есть обе ситуации не фатальны сами по себе, но в случае Asymmetric NAT это создает меньше проблем для клиентов. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Huko Posted March 6, 2020 У кого нибудь получилось собрать модуль под Debian 10 ? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
vurd Posted March 6, 2020 1 минуту назад, Huko сказал: У кого нибудь получилось собрать модуль под Debian 10 ? У меня. Скрытый текст root@nat-1:~# cat /etc/debian_version 10.3 root@nat-1:~# lsmod | grep nat xt_nat 16384 2 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Huko Posted March 6, 2020 Spoiler # uname -a Linux nat 4.19.0-8-amd64 #1 SMP Debian 4.19.98-1 (2020-01-26) x86_64 GNU/Linux # make make -C /lib/modules/4.19.0-8-amd64/build/ M=/usr/local/src/xt_NAT modules CONFIG_DEBUG_INFO=y make[1]: Entering directory '/usr/src/linux-headers-4.19.0-8-amd64' CC [M] /usr/local/src/xt_NAT/xt_NAT.o /usr/local/src/xt_NAT/xt_NAT.c: In function ‘stat_seq_show’: /usr/local/src/xt_NAT/xt_NAT.c:1547:43: warning: format ‘%ld’ expects argument of type ‘long int’, but argument 3 has type ‘s64’ {aka ‘long long int’} [-Wformat=] seq_printf(m, "Active NAT sessions: %ld\n", atomic64_read(&sessions_active)); ~~^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ %lld /usr/local/src/xt_NAT/xt_NAT.c:1548:42: warning: format ‘%ld’ expects argument of type ‘long int’, but argument 3 has type ‘s64’ {aka ‘long long int’} [-Wformat=] seq_printf(m, "Tried NAT sessions: %ld\n", atomic64_read(&sessions_tried)); ~~^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ %lld /usr/local/src/xt_NAT/xt_NAT.c:1549:44: warning: format ‘%ld’ expects argument of type ‘long int’, but argument 3 has type ‘s64’ {aka ‘long long int’} [-Wformat=] seq_printf(m, "Created NAT sessions: %ld\n", atomic64_read(&sessions_created)); ~~^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ %lld /usr/local/src/xt_NAT/xt_NAT.c:1550:41: warning: format ‘%ld’ expects argument of type ‘long int’, but argument 3 has type ‘s64’ {aka ‘long long int’} [-Wformat=] seq_printf(m, "DNAT dropped pkts: %ld\n", atomic64_read(&dnat_dropped)); ~~^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ %lld /usr/local/src/xt_NAT/xt_NAT.c:1551:39: warning: format ‘%ld’ expects argument of type ‘long int’, but argument 3 has type ‘s64’ {aka ‘long long int’} [-Wformat=] seq_printf(m, "Fragmented pkts: %ld\n", atomic64_read(&frags)); ~~^ ~~~~~~~~~~~~~~~~~~~~~ %lld /usr/local/src/xt_NAT/xt_NAT.c:1552:41: warning: format ‘%ld’ expects argument of type ‘long int’, but argument 3 has type ‘s64’ {aka ‘long long int’} [-Wformat=] seq_printf(m, "Related ICMP pkts: %ld\n", atomic64_read(&related_icmp)); ~~^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ %lld /usr/local/src/xt_NAT/xt_NAT.c:1553:36: warning: format ‘%ld’ expects argument of type ‘long int’, but argument 3 has type ‘s64’ {aka ‘long long int’} [-Wformat=] seq_printf(m, "Active Users: %ld\n", atomic64_read(&users_active)); ~~^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ %lld /usr/local/src/xt_NAT/xt_NAT.c: In function ‘nat_tg_init’: /usr/local/src/xt_NAT/xt_NAT.c:1664:5: error: implicit declaration of function ‘setup_timer’; did you mean ‘sk_stop_timer’? [-Werror=implicit-function-declaration] setup_timer( &sessions_cleanup_timer, sessions_cleanup_timer_callback, 0 ); ^~~~~~~~~~~ sk_stop_timer cc1: some warnings being treated as errors make[4]: *** [/usr/src/linux-headers-4.19.0-8-common/scripts/Makefile.build:315: /usr/local/src/xt_NAT/xt_NAT.o] Error 1 make[3]: *** [/usr/src/linux-headers-4.19.0-8-common/Makefile:1537: _module_/usr/local/src/xt_NAT] Error 2 make[2]: *** [Makefile:146: sub-make] Error 2 make[1]: *** [Makefile:8: all] Error 2 make[1]: Leaving directory '/usr/src/linux-headers-4.19.0-8-amd64' make: *** [Makefile:11: xt_NAT.ko] Error 2 ld поменять на lld ума хватило, но дальше уже не осилил. У вас все по дефолту собралось, т.е. без изменений модуля ? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
vurd Posted March 6, 2020 2 минуты назад, Huko сказал: Показать содержимое # uname -a Linux nat 4.19.0-8-amd64 #1 SMP Debian 4.19.98-1 (2020-01-26) x86_64 GNU/Linux # make make -C /lib/modules/4.19.0-8-amd64/build/ M=/usr/local/src/xt_NAT modules CONFIG_DEBUG_INFO=y make[1]: Entering directory '/usr/src/linux-headers-4.19.0-8-amd64' CC [M] /usr/local/src/xt_NAT/xt_NAT.o /usr/local/src/xt_NAT/xt_NAT.c: In function ‘stat_seq_show’: /usr/local/src/xt_NAT/xt_NAT.c:1547:43: warning: format ‘%ld’ expects argument of type ‘long int’, but argument 3 has type ‘s64’ {aka ‘long long int’} [-Wformat=] seq_printf(m, "Active NAT sessions: %ld\n", atomic64_read(&sessions_active)); ~~^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ %lld /usr/local/src/xt_NAT/xt_NAT.c:1548:42: warning: format ‘%ld’ expects argument of type ‘long int’, but argument 3 has type ‘s64’ {aka ‘long long int’} [-Wformat=] seq_printf(m, "Tried NAT sessions: %ld\n", atomic64_read(&sessions_tried)); ~~^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ %lld /usr/local/src/xt_NAT/xt_NAT.c:1549:44: warning: format ‘%ld’ expects argument of type ‘long int’, but argument 3 has type ‘s64’ {aka ‘long long int’} [-Wformat=] seq_printf(m, "Created NAT sessions: %ld\n", atomic64_read(&sessions_created)); ~~^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ %lld /usr/local/src/xt_NAT/xt_NAT.c:1550:41: warning: format ‘%ld’ expects argument of type ‘long int’, but argument 3 has type ‘s64’ {aka ‘long long int’} [-Wformat=] seq_printf(m, "DNAT dropped pkts: %ld\n", atomic64_read(&dnat_dropped)); ~~^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ %lld /usr/local/src/xt_NAT/xt_NAT.c:1551:39: warning: format ‘%ld’ expects argument of type ‘long int’, but argument 3 has type ‘s64’ {aka ‘long long int’} [-Wformat=] seq_printf(m, "Fragmented pkts: %ld\n", atomic64_read(&frags)); ~~^ ~~~~~~~~~~~~~~~~~~~~~ %lld /usr/local/src/xt_NAT/xt_NAT.c:1552:41: warning: format ‘%ld’ expects argument of type ‘long int’, but argument 3 has type ‘s64’ {aka ‘long long int’} [-Wformat=] seq_printf(m, "Related ICMP pkts: %ld\n", atomic64_read(&related_icmp)); ~~^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ %lld /usr/local/src/xt_NAT/xt_NAT.c:1553:36: warning: format ‘%ld’ expects argument of type ‘long int’, but argument 3 has type ‘s64’ {aka ‘long long int’} [-Wformat=] seq_printf(m, "Active Users: %ld\n", atomic64_read(&users_active)); ~~^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ %lld /usr/local/src/xt_NAT/xt_NAT.c: In function ‘nat_tg_init’: /usr/local/src/xt_NAT/xt_NAT.c:1664:5: error: implicit declaration of function ‘setup_timer’; did you mean ‘sk_stop_timer’? [-Werror=implicit-function-declaration] setup_timer( &sessions_cleanup_timer, sessions_cleanup_timer_callback, 0 ); ^~~~~~~~~~~ sk_stop_timer cc1: some warnings being treated as errors make[4]: *** [/usr/src/linux-headers-4.19.0-8-common/scripts/Makefile.build:315: /usr/local/src/xt_NAT/xt_NAT.o] Error 1 make[3]: *** [/usr/src/linux-headers-4.19.0-8-common/Makefile:1537: _module_/usr/local/src/xt_NAT] Error 2 make[2]: *** [Makefile:146: sub-make] Error 2 make[1]: *** [Makefile:8: all] Error 2 make[1]: Leaving directory '/usr/src/linux-headers-4.19.0-8-amd64' make: *** [Makefile:11: xt_NAT.ko] Error 2 ld поменять на lld ума хватило, но дальше уже не осилил. У вас все по дефолту собралось, т.е. без изменений модуля ? Разумеется с изменениями. Вам помочь или вы просто интересуетесь у кого как дела? :) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Huko Posted March 6, 2020 Просто думал, может я что не так делаю :) Если не трудно - поделитесь вашими наработками, т.к. личных скиллов знания gcc не хватает. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
vurd Posted March 6, 2020 8 минут назад, Huko сказал: Просто думал, может я что не так делаю :) Если не трудно - поделитесь вашими наработками, т.к. личных скиллов знания gcc не хватает. Автору прислали пул реквест, но он его не заапрувил. Вот он - https://github.com/andrsharaev/xt_NAT/pull/2 Нужно выполнить изменения, которые в нем указаны и всё соберётся. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Huko Posted March 6, 2020 Да, а в PR то я и не заглянул :( Спасибо за помощь ! Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Tosha Posted March 6, 2020 <del> Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
ne-vlezay80 Posted March 8, 2020 Этот модуль не умеет IPv6. Не нужно. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
zhenya` Posted March 8, 2020 Зачем натить в6? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
ne-vlezay80 Posted March 8, 2020 1 час назад, zhenya` сказал: Зачем натить в6? Например, переключение между брокерами. К примеру, у netassist случится сбой, можно переключить на he. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
vurd Posted March 8, 2020 7 часов назад, ne-vlezay80 сказал: Этот модуль не умеет IPv6. Не нужно. Вы не понимаете даже, что он делает. Не нужен тут этот комментарий, т.к. ничего кроме глупости автора он не показывает. Ваши кейсы каких-то брокеров вообще к ipv6 имеют очень отдаленное отношение, как и ipv6 к проблематике решаемой данным модулем. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
ne-vlezay80 Posted March 8, 2020 34 минуты назад, vurd сказал: Вы не понимаете даже, что он делает. Не нужен тут этот комментарий, т.к. ничего кроме глупости автора он не показывает. Ваши кейсы каких-то брокеров вообще к ipv6 имеют очень отдаленное отношение, как и ipv6 к проблематике решаемой данным модулем. Он меняет адрес источника в исходящем от клиента пакете и во входящем адрес назначения. Что касается брокеров, то иногда это единственный способ получить ipv6. Особенно на VPS. Про их глюки, можешь тут тему просмотреть. Там у netassist накрылся один из роутеров, в результате чего корректно не работал ipv6. Пришлось мне тогда переключаться на hurricane electric. Конечно, у брокеров есть BGP, но чтобы его использовать, нужна своя AS и подсеть.Которую физикам получить достаточно проблематично. И могут возникнуть проблемы с чиновниками. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
vop Posted March 8, 2020 Ну вот, теперь придется выкинуть RFC6296:) Может все же не так все плохо? ip6tables -t mangle -I POSTROUTING -s fd00::/64 -o vboxnet0 -j SNPT --src-pfx fd00::/64 --dst-pfx 2001:e20:2000:40f::/64 ip6tables -t mangle -I PREROUTING -i wlan0 -d 2001:e20:2000:40f::/64 -j DNPT --src-pfx 2001:e20:2000:40f::/64 --dst-pfx fd00::/64 Ну и sysctl -w net.ipv6.conf.all.proxy_ndp=1 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
tnega Posted March 10, 2020 приветствую всех. не подскажите, как данный проект нам подзаточить под аутсорминг? например: есть абонент с серым адресом, на которого мы делаем snat с одного белого ip. мы так делаем потому что так нам удобнее. хотелось бы потестировать данное решение и посмотреть на производительность. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Iluffka Posted August 18, 2020 (edited) On 3/6/2020 at 11:35 AM, vurd said: Разумеется с изменениями. Вам помочь или вы просто интересуетесь у кого как дела? :) Можете подсказать как собрать? xt_NAT-master # make make -C /lib/modules/4.19.0-0.bpo.6-amd64/build/ M=/home/user/xt_NAT-master modules CONFIG_DEBUG_INFO=y make[1]: Entering directory '/usr/src/linux-headers-4.19.0-0.bpo.6-amd64' CC [M] /home/user/xt_NAT-master/xt_NAT.o /home/user/xt_NAT-master/xt_NAT.c: In function ‘nat_tg_init’: /home/user/xt_NAT-master/xt_NAT.c:1690:5: error: implicit declaration of function ‘setup_timer’ [-Werror=implicit-function-declaration] setup_timer( &sessions_cleanup_timer, sessions_cleanup_timer_callback, 0 ); ^~~~~~~~~~~ cc1: some warnings being treated as errors /usr/src/linux-headers-4.19.0-0.bpo.6-common/scripts/Makefile.build:314: recipe for target '/home/user/xt_NAT-master/xt_NAT.o' failed make[4]: *** [/home/user/xt_NAT-master/xt_NAT.o] Error 1 /usr/src/linux-headers-4.19.0-0.bpo.6-common/Makefile:1534: recipe for target '_module_/home/user/xt_NAT-master' failed make[3]: *** [_module_/home/user/xt_NAT-master] Error 2 Makefile:146: recipe for target 'sub-make' failed make[2]: *** [sub-make] Error 2 Makefile:8: recipe for target 'all' failed make[1]: *** [all] Error 2 make[1]: Leaving directory '/usr/src/linux-headers-4.19.0-0.bpo.6-amd64' Makefile:11: recipe for target 'xt_NAT.ko' failed make: *** [xt_NAT.ko] Error 2 Эти исправления добавил https://github.com/andrsharaev/xt_NAT/pull/2/commits/834e2441fca0d1cdcf15ad29ebde3fc9b44ca523 https://github.com/andrsharaev/xt_NAT/pull/2/commits/44ada338854b3ab558afb0934dd1c84eb227a220 Linux host 4.19.0-0.bpo.6-amd64 #1 SMP Debian 4.19.67-2+deb10u2~bpo9+1 (2019-11-12) x86_64 GNU/Linux И я же правильно понимаю, что этот модуль позволяет делать SNAT\DNAT без conntrack? У меня асимметричный роутинг и трафик может влетать через один сервер и на нём натится, а вылетать через другой и нужно чтобы он там обратно разначивался Edited August 18, 2020 by Iluffka Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Ivan_83 Posted August 19, 2020 9 часов назад, Iluffka сказал: И я же правильно понимаю, что этот модуль позволяет делать SNAT\DNAT без conntrack? Без таблицы стейтов делать можно, но продумайте как пакеты в обратном направлении должны идти. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
sdy_moscow Posted August 19, 2020 @Ivan_83 IP в IP т.е. 1 серый = 1 белый. С жесткой связкой. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...