Перейти к содержимому
Калькуляторы
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-трафик блокируется, при вызове будет тишина. 

 

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


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

8 часов назад, LostSoul сказал:

жуткие вещи вы рассказываете.  что мешает проанализировать имеющиеся L3/L4 заголовки в рамках первого(первых) фрагментов , что необходимы для принятия решения о судьбе пакета, согласно настроенным и правилам и дальнейшей немедленной обработке и пересылке первого ( первых ) фрагментов? 

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

ну т.е. выполнять частично работу по дефрагментации (в части поиска сессий фраментов) самостоятельно в нате.

 

фрагментированного трафика действительно немного, и когда дефрагментацию может делать  какой-то модуль выше, то проще так и поступить, чтобы не усложнять nat алгоритмы. во всяком случае в NPF такая же схема.

 

 

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


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

А можно чуть подробнее о случаях (игры/torrent), 
когда возникают проблемы у обычного linux
nat (Address and Port-Dependent Mapping), и которые решаются
схемой Endpoint-Independent Mapping (Assymetric (Full Cone) NAT )?

 

А много проблем возникает из-за отсутствия hairpinning?

 

Плохо работают это как?

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

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


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

20 часов назад, SABRE сказал:

ipset -N -! ct_fallback hash:ip

А зачем тут "!"?

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


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

Не сваливаться в ошибку, если список уже существует?

Не работали с ипсетом до сих пор? Там постоянно это пишешь)

 

-!, -exist
Ignore errors when exactly the same set is to be created or already added entry is added or missing entry is deleted

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


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

Хмм, у меня скрипты создают/удаляют сеты, не проверял, но это камень в мой огород. Спасибо.

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


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

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 это создает меньше проблем для клиентов.

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


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

У кого нибудь получилось собрать модуль под Debian 10 ?

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


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

1 минуту назад, Huko сказал:

У кого нибудь получилось собрать модуль под Debian 10 ?

У меня.

 

Скрытый текст

root@nat-1:~# cat /etc/debian_version
10.3
root@nat-1:~# lsmod | grep nat
xt_nat                 16384  2

 

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


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

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 ума хватило, но дальше уже не осилил.

 

У вас все по дефолту собралось, т.е. без изменений модуля ?

 

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


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

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 ума хватило, но дальше уже не осилил.

 

У вас все по дефолту собралось, т.е. без изменений модуля ?

 

Разумеется с изменениями. Вам помочь или вы просто интересуетесь у кого как дела? :)

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


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

Просто думал, может я что не так делаю :)

Если не трудно - поделитесь вашими наработками, т.к. личных скиллов знания gcc не хватает.

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


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

8 минут назад, Huko сказал:

Просто думал, может я что не так делаю :)

Если не трудно - поделитесь вашими наработками, т.к. личных скиллов знания gcc не хватает.

Автору прислали пул реквест, но он его не заапрувил. Вот он - https://github.com/andrsharaev/xt_NAT/pull/2

Нужно выполнить изменения, которые в нем указаны и всё соберётся.

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


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

Да, а в PR то я и не заглянул :(

Спасибо за помощь !

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


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

Этот модуль не умеет IPv6. Не нужно.

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


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

1 час назад, zhenya` сказал:

Зачем натить в6?

Например, переключение между брокерами. К примеру, у netassist случится сбой, можно переключить на he.

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


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

7 часов назад, ne-vlezay80 сказал:

Этот модуль не умеет IPv6. Не нужно.

Вы не понимаете даже, что он делает. Не нужен тут этот комментарий, т.к. ничего кроме глупости автора он не показывает.

Ваши кейсы каких-то брокеров вообще к ipv6 имеют очень отдаленное отношение, как и ipv6 к проблематике решаемой данным модулем.

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


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

34 минуты назад, vurd сказал:

Вы не понимаете даже, что он делает. Не нужен тут этот комментарий, т.к. ничего кроме глупости автора он не показывает.

Ваши кейсы каких-то брокеров вообще к ipv6 имеют очень отдаленное отношение, как и ipv6 к проблематике решаемой данным модулем.

Он меняет адрес источника в исходящем от клиента пакете и во входящем адрес назначения.
Что касается брокеров, то иногда это единственный способ получить ipv6. Особенно на VPS.
Про их глюки, можешь тут тему просмотреть. Там у netassist накрылся один из роутеров, в результате чего корректно не работал ipv6. Пришлось мне тогда переключаться на hurricane electric.
Конечно, у брокеров есть BGP, но чтобы его использовать, нужна своя AS и подсеть.Которую физикам получить достаточно проблематично. И могут возникнуть проблемы с чиновниками.

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


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

Ну вот, теперь придется выкинуть 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

 

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


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

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

 

например: есть абонент с серым адресом, на которого мы делаем snat с одного белого ip. мы так делаем потому что так нам удобнее.

 

хотелось бы потестировать данное решение и посмотреть на производительность.

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


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

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? У меня асимметричный роутинг и трафик может влетать через один сервер и на нём натится, а вылетать через другой и нужно чтобы он там обратно разначивался

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

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


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

9 часов назад, Iluffka сказал:

И я же правильно понимаю, что этот модуль позволяет делать SNAT\DNAT без conntrack?

Без таблицы стейтов делать можно, но продумайте как пакеты в обратном направлении должны идти.

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


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

@Ivan_83 IP в IP т.е. 1 серый = 1 белый. С жесткой связкой.

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


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

Join the conversation

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

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

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

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

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

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

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