pppoetest Posted May 10, 2021 Posted May 10, 2021 2 часа назад, hiller сказал: Вот решение проблемки со сборкой, которую я описывал чуть выше там есть пулреквест с 2мя коммитами https://github.com/andrsharaev/xt_NAT/pull/2/commits Вставить ник Quote
pppoetest Posted June 8, 2021 Posted June 8, 2021 В 12.01.2021 в 22:57, pppoetest сказал: Я немножко переписал, и стала совместима, но пришлось пожертвовать стоповым эвентом. xt_NAT.c Если вдруг кому нужно, вернул стоповый эвент и добавил для всяких сормов требуемые поля в экспорт xt_NAT.c Вставить ник Quote
ne-vlezay80 Posted June 8, 2021 Posted June 8, 2021 А как эту штуку использовать в netns? Вставить ник Quote
ShumBor Posted June 9, 2021 Posted June 9, 2021 @pppoetest Надо будет попробовать. Так то без отправки на сорм пашет успешно, но наш сорм хочет нетфлоу 9 версии( Вставить ник Quote
pppoetest Posted June 9, 2021 Posted June 9, 2021 Вот в9, тренируйся на кошках, сырое. xt_NAT.h xt_NAT.c Вставить ник Quote
hRUst Posted November 18, 2021 Posted November 18, 2021 (edited) для ядер 5.10 xt_NAT.h в git тоже не умею Обновил xt_NAT.c с ktime_get_raw_ts64 xt_NAT.c Edited January 28, 2022 by hRUst Вставить ник Quote
hRUst Posted January 12, 2022 Posted January 12, 2022 Проблема: тестовый сервер, один клиент, ноутбук. Перестает натить, на наружном интерфейсе выходят пакеты с внутренним IP, как будто таймер какой протухает и все перестает работать. Если обновить страничку, или перезапустить пинг, опять натит. Когда не натит, в cat /proc/net/NAT/users пусто. Пример: на клиенте ping dns.server -t, на наружном интерфейсе сервера вижу запросы с внутреннего IP, передергиваю патч у клиента и пинг пошел, на наружном интерфейсе пакеты с nat пула. Вставить ник Quote
pppoetest Posted January 13, 2022 Posted January 13, 2022 Юзаешь модуль со своими правками? Если так, то присмотрись к xt_NAT.c, строки 132-133,138-139. Ты убрал getrawmonotonic но не добавил getrawmonotonic64. Возможно причина где-то тут? Хмм, похоже оно давно было депрекейтед, а теперь вообще недоступно. Если не ошибаюсь, использовать ktime_get_raw_ts64 Вставить ник Quote
hRUst Posted January 28, 2022 Posted January 28, 2022 (edited) Да, который чуть выше выложил. этот NAS уже в проде на обычном iptables NAT. Скоро тестовый соберу, буду пробовать дальше. Скомпилировал нормально, обновил пост выше. Edited January 28, 2022 by hRUst Вставить ник Quote
pppoetest Posted January 28, 2022 Posted January 28, 2022 В 28.01.2022 в 09:46, hRUst сказал: Скоро тестовый соберу, буду пробовать дальше. Скомпилировал нормально, обновил пост выше Я запустил в прод на 5.10 с ktime_get_raw_ts64 полторы недели назад, пока жалоб нет. Вставить ник Quote
ingvarrwvw Posted June 4, 2023 Posted June 4, 2023 @pppoetest добрый день! А не могли бы вы выложить версию ,которая собирается на 5.10 ? С патчами из гитхаба не хочет собираться ( Вставить ник Quote
pppoetest Posted June 5, 2023 Posted June 5, 2023 У меня только с правками под нетфло в9 nat.zip Вставить ник Quote
ingvarrwvw Posted June 5, 2023 Posted June 5, 2023 @pppoetest Спасибо! Он у вас в проде стоит? Попробовал сейчас через него посерфить - часть сайтов еле открывается, скорость до своего же спидтеста упала с 500 до 1мбит. Вставить ник Quote
stalker86 Posted August 2, 2023 Posted August 2, 2023 All у кого есть эти патчи в живом виде дайте пожалуйста..а то линки битые Вставить ник Quote
pppoetest Posted August 4, 2023 Posted August 4, 2023 https://github.com/gonarh/xt_NAT_with_netflow_v9 Вставить ник Quote
pesvo Posted August 11, 2023 Posted August 11, 2023 @pppoetest Приветствую, собрал xt_NAT с ссылки гита которую Вы кинули с поддержкой netflow 9 на debian 11.7.0 ядро 5.10.0-22-amd64. Вроде натит нормально клиентов, в proc/net/nat есть данные статистика, сессии, юзеры, но когда хочу отправить потоки netflow на коллектор за счет netflow 9 вводя команду которая указана на гите "пул адресов нат , адрес коллектора и порт 2055" , но на коллектор ничего не прилетает , там запущен nfcapd с прослушиванием 2055 порта и по tcpdump тоже нет пакетов каких либо на этот порт от сервера где запущен xt_nat. Как понимаю у вас xt_nat долго стоит в проде и все прекрасно работает с netflow9 , подскажите в чем может быть дело, может надо какие то доп модули подзагрузить чтобы netflow 9 заработал на xt_nat? Вставить ник Quote
vurd Posted August 12, 2023 Posted August 12, 2023 Покажите что передаете модулую в опциях и что в дмесг после его загрузки Вставить ник Quote
pppoetest Posted August 13, 2023 Posted August 13, 2023 В 11.08.2023 в 20:10, pesvo сказал: подскажите в чем может быть дело Выгрузить модуль и загрузить заново со всеми параметрами. Вставить ник Quote
pesvo Posted August 14, 2023 Posted August 14, 2023 В 12.08.2023 в 13:41, vurd сказал: Покажите что передаете модулую в опциях и что в дмесг после его загрузки modprobe xt_NAT nat_pool=xx.xx.xx.xx-xx.xx.xx.xx modprobe xt_NAT nat_pool=xx.xx.xx.xx-xx.xx.xx.xx nf_dest=127.0.0.1:2055 dmesg | grep xt_NAT [ 50.684198] xt_NAT: loading out-of-tree module taints kernel. [ 50.684310] xt_NAT: module verification failed: signature and/or required key missing - tainting kernel [ 50.685711] Module xt_NAT loaded [ 50.685718] xt_NAT DEBUG: IP Pool from xx.xx.xx.xx to xx.xx.xx.xx [ 50.685721] xt_NAT DEBUG: nat pool table mem: 4 [ 50.685723] xt_NAT DEBUG: NAT hash size: 262144 [ 50.685726] xt_NAT DEBUG: Users hash size: 65536 [ 50.687613] xt_NAT DEBUG: sessions htable inner mem: 4194304 [ 50.689106] xt_NAT DEBUG: sessions htable outer mem: 4194304 [ 50.689191] xt_NAT DEBUG: users htable mem: 1048576 [ 50.689192] xt_NAT DEBUG: nat pool table mem: 4 cat /proc/net/NAT/users 192.168.0.10 -> xx.xx.xx.xx (tcp: 21, udp: 51, other: 0) Total users: 1 cat /proc/net/NAT/statistics Active NAT sessions: 73 Tried NAT sessions: 384 Created NAT sessions: 384 DNAT dropped pkts: 337 Fragmented pkts: 0 Related ICMP pkts: 0 Active Users: 1 Модуль выгружал - загружал с опциями этими, сам сервер перезагружал. для теста отправлял и на Lo адрес тоже ничего не прилетает на nfcapd и в tcpdump ничего нет и на удаленный хост если указать в nf_dest соответственно тоже ничего не прилетает, порты тоже менял вместо дефолта 2055. Может я где-то мог допустить ошибку при настройке/установке модуля(модуль тоже переустанавливал), так как пока пробую переехать с freebsd ipfw nat на debian и провожу тесты, а с debian, к сожалению, пока особо не работал, но вроде все делал по инструкции с гита. Может в iptables надо что-то добавить для передачи по порту 2055? Вставить ник Quote
vurd Posted August 14, 2023 Posted August 14, 2023 По коду модуля при загрузке его и включенном netflow вы должны видеть вот это printk(KERN_INFO "xt_NAT NEL: add destination %s\n", print_sockaddr(&usock->addr)); В вашем логе dmesg я этого не вижу. По какой-то причине в модуль не переданы параметры. Сделайте явно modprobe -r xt_NAT modprobe xt_NAT блаблабла И смотрим в дмесг снова. Вставить ник Quote
pesvo Posted August 14, 2023 Posted August 14, 2023 53 минуты назад, vurd сказал: По коду модуля при загрузке его и включенном netflow вы должны видеть вот это printk(KERN_INFO "xt_NAT NEL: add destination %s\n", print_sockaddr(&usock->addr)); В вашем логе dmesg я этого не вижу. По какой-то причине в модуль не переданы параметры. Сделайте явно modprobe -r xt_NAT modprobe xt_NAT блаблабла И смотрим в дмесг снова. Нашёл свой косяк... Я думал, что надо вместе modprobe xt_NAT nat_pool=<Start IP>-<End IP> и затем modprobe xt_NAT nat_pool=<Start IP>-<End IP> nf_dest=127.0.0.1:2055 но по факту надо было просто прописать одной командой xt_NAT nat_pool=<Start IP>-<End IP> nf_dest=127.0.0.1:2055 и все. Но смущает один момент, я начал получать потоки в nfcapd на удаленном сервере nfcapd -E -T all -p 2055 -l /nfcap-test при чтение через nfdump nfdump -R nfcapd.202308141352 вижу странный вывод, что во-первых, время не корректное, хотя на обоих сервера время правильное и вкл. ntp, и что в столбце X-Dst IP Addr:Port 0.0.0.0:0 Версия nfdump nfdump -V nfdump: Version: NSEL-NEL1.6.18 nfdump -R nfcapd.202308141352 Date first seen Event XEvent Proto Src IP Addr:Port Dst IP Addr:Port X-Src IP Addr:Port X-Dst IP Addr:Port In Byte Out Byte 1970-01-01 03:00:00.000 DELETE Ignore TCP 192.168.55.55:5309 -> 64.233.165.138:443 xx.xx.xx.xx:5309 -> 0.0.0.0:0 0 0 1970-01-01 03:00:00.000 DELETE Ignore TCP 192.168.55.55:5307 -> 142.250.150.198:443 xx.xx.xx.xx:5307 -> 0.0.0.0:0 0 0 1970-01-01 03:00:00.000 CREATE Ignore UDP 192.168.55.55:54248 -> 64.233.165.104:443 xx.xx.xx.xx:54248 -> 0.0.0.0:0 0 0 1970-01-01 03:00:00.000 CREATE Ignore UDP 192.168.55.55:59572 -> 108.177.14.198:443 xx.xx.xx.xx:59572 -> 0.0.0.0:0 0 0 В сам nfcapd прилетает Flow Record: Flags = 0x46 EVENT, Unsampled label = <none> export sysid = 1 size = 96 first = 0 [1970-01-01 03:00:00] last = 0 [1970-01-01 03:00:00] msec_first = 0 msec_last = 0 src addr = 192.168.55.55 dst addr = 108.177.14.198 src port = 59572 dst port = 443 fwd status = 0 tcp flags = 0x00 ........ proto = 17 UDP (src)tos = 0 (in)packets = 0 (in)bytes = 0 ip router = xx.xx.xx.xx engine type = 0 engine ID = 0 received at = 1692010373229 [2023-08-14 13:52:53.229] src xlt port = 59572 dst xlt port = 0 src xlt ip = xx.xx.xx.xx dst xlt ip = 0.0.0.0 nat event = 1: ADD ingress VRF = 0 egress VRF = 0 Покопался на форме в разделе ipt_netflow у людей это было на старой версии nfdump, но тут у меня новая версия nfdump. Подскажите у тех кто использует этот модуль при отправке netflow 9 дата и время корректное и есть ли адреса в столбце X-Src IP Addr:Port? Спасибо. Вставить ник Quote
pesvo Posted August 14, 2023 Posted August 14, 2023 С гита nfdump поставил версию последнюю nfdump-1.7.2 вместо 1.6.18 nfdump -V nfdump: Version: 1.7.2-696f563 Options: NSEL-NEL Date: 2023-08-12 13:54:54 +0200 запустил и все равно одно и тоже 1970-01-01 03:00:00.000 время и 0 на X-Src IP Addr:Port в nfcapd показывает nfcapd -E -p 2055 -w /tmp/nfcap-test/ Verbose log level: 3 Add flow source: ident: none, IP: any IP, flowdir: /tmp/nfcap-test Bound to IPv4 host/IP: any, Port: 2055 Init v1 Init v5/v7: Default sampling: 1 Init v9: Max number of v9 tags enabled: 105, default sampling: 1 Init IPFIX: Max number of ipfix tags enabled: 91, default sampling: 1 Startup nfcapd. Process_v9: New v9 exporter: SysID: 1, Domain: 0, IP: xx.xx.xx.xx Flow Record: Flags = 0x01 EVENT, Unsampled Elements = 6: 1 2 12 20 22 25 size = 124 engine type = 0 engine ID = 0 export sysid = 1 first = 0 [<unknown>.000] last = 0 [<unknown>.000] received at = 1692020263687 [2023-08-14 16:37:43.687] proto = 1 ICMP tcp flags = 0x00 ........ ICMP = 3.238 type.code in packets = 0 in bytes = 0 src addr = 192.168.55.10 dst addr = 151.101.2.167 ip exporter = xx.xx.xx.xx снова поля first/last пустые , поэтому передает значения 1970-01-01 03:00:00.000 как в версии nfdump 1.6.18, но сути это не меняет. Снял дамп через tcpdump и посмотрел в wireshark что прилетает от nat сервера на этот порт 2055 по netflow v9 User Datagram Protocol, Src Port: 59337, Dst Port: 2055 Source Port: 59337 Destination Port: 2055 Length: 92 Checksum: 0x7b88 [unverified] [Checksum Status: Unverified] [Stream index: 0] [Timestamps] UDP payload (84 bytes) Cisco NetFlow/IPFIX Version: 9 Count: 2 SysUptime: 8155.520000000 seconds Timestamp: Aug 14, 2023 16:28:36.000000000 RTZ 2 (зима) CurrentSecs: 1692019716 FlowSequence: 54 SourceId: 0 FlowSet 1 [id=0] (Data Template): 300 FlowSet Id: Data Template (V9) (0) FlowSet Length: 40 Template (Id = 300, Count = 8) Template Id: 300 Field Count: 8 Field (1/8): PROTOCOL Field (2/8): L4_SRC_PORT Field (3/8): IP_SRC_ADDR Field (4/8): L4_DST_PORT Field (5/8): IP_DST_ADDR Field (6/8): postNATSourceIPv4Address Field (7/8): postNAPTSourceTransportPort Field (8/8): natEvent FlowSet 2 [id=300] (1 flows) FlowSet Id: (Data) (300) FlowSet Length: 24 [Template Frame: 1] Flow 1 Protocol: ICMP (1) SrcPort: 1001 SrcAddr: 192.168.55.10 DstPort: 1001 DstAddr: 151.101.2.167 Post NAT Source IPv4 Address: xx.xx.xx.xx Post NAPT Source Transport Port: 2025 Nat Event: NAT translation delete (Historic) (2) Немного не пойму вывод в pcap в wireshark, но вроде он передает нужные шаблоны Идеи пока закончились куда копать.. Вставить ник Quote
pppoetest Posted August 14, 2023 Posted August 14, 2023 В 14.08.2023 в 19:46, pesvo сказал: Идеи пока закончились куда копать.. Простейший коллектор, которым я проверял нетфло #!/usr/bin/perl -w use strict; use IO::Socket; #NetFlow port my $port = 2055; #Consts use constant _MAXREAD => 8192; my %v9 = ( #Offset Size _PROTO => [0, 1], _SRC_PORT => [1, 2], _SRC_IP => [2, 4], _DST_PORT => [3, 2], _DST_IP => [4, 4], _NAT_IP => [5, 4], _NAT_PORT => [6, 2], _NAT_EVENT => [7, 1] ); # main datagram receive loop my $_FLOWRECV9_LEN = 0; my ($datagram, $version, $count, $i, $data, $sys_uptime, $unix_secs); my (@flow, @rawdata); my $socket_opened; foreach (keys(%v9)) { $_FLOWRECV9_LEN += ${$v9{$_}}[1]; } while(1){ $socket_opened = 1; my $sock = IO::Socket::INET->new(LocalPort => $port, Proto => 'udp') or $socket_opened = 0; if ($socket_opened == 0) { select(undef, undef, undef, 5); next; } while ($sock->recv($datagram, _MAXREAD)) { ($version, $count, $sys_uptime, $unix_secs) = unpack("nnNN", $datagram); next if ($version ne 9); $count--; substr $datagram, 0, 64, ''; for ($i = 0; $i < $count; $i++) { @flow = unpack("cnNnNNnc", substr($datagram, $i * $_FLOWRECV9_LEN, $_FLOWRECV9_LEN)); my $src_addr = join '.', unpack 'C4', pack 'N', $flow[${$v9{_SRC_IP}}[0]]; my $dst_addr = join '.', unpack 'C4', pack 'N', $flow[${$v9{_DST_IP}}[0]]; my $nat_addr = join '.', unpack 'C4', pack 'N', $flow[${$v9{_NAT_IP}}[0]]; print "ts: $unix_secs, proto: $flow[${$v9{_PROTO}}[0]], src $src_addr:$flow[${$v9{_SRC_PORT}}[0]], "; print "dst: $dst_addr:$flow[${$v9{_DST_PORT}}[0]], nat: $nat_addr:$flow[${$v9{_NAT_PORT}}[0]], event: $flow[${$v9{_NAT_EVENT}}[0]]\n"; } } } Вставить ник Quote
pesvo Posted August 14, 2023 Posted August 14, 2023 39 минут назад, pppoetest сказал: Простейший сенсор, которым я проверял нетфло #!/usr/bin/perl -w use strict; use IO::Socket; #NetFlow port my $port = 2055; #Consts use constant _MAXREAD => 8192; my %v9 = ( #Offset Size _PROTO => [0, 1], _SRC_PORT => [1, 2], _SRC_IP => [2, 4], _DST_PORT => [3, 2], _DST_IP => [4, 4], _NAT_IP => [5, 4], _NAT_PORT => [6, 2], _NAT_EVENT => [7, 1] ); # main datagram receive loop my $_FLOWRECV9_LEN = 0; my ($datagram, $version, $count, $i, $data, $sys_uptime, $unix_secs); my (@flow, @rawdata); my $socket_opened; foreach (keys(%v9)) { $_FLOWRECV9_LEN += ${$v9{$_}}[1]; } while(1){ $socket_opened = 1; my $sock = IO::Socket::INET->new(LocalPort => $port, Proto => 'udp') or $socket_opened = 0; if ($socket_opened == 0) { select(undef, undef, undef, 5); next; } while ($sock->recv($datagram, _MAXREAD)) { ($version, $count, $sys_uptime, $unix_secs) = unpack("nnNN", $datagram); next if ($version ne 9); $count--; substr $datagram, 0, 64, ''; for ($i = 0; $i < $count; $i++) { @flow = unpack("cnNnNNnc", substr($datagram, $i * $_FLOWRECV9_LEN, $_FLOWRECV9_LEN)); my $src_addr = join '.', unpack 'C4', pack 'N', $flow[${$v9{_SRC_IP}}[0]]; my $dst_addr = join '.', unpack 'C4', pack 'N', $flow[${$v9{_DST_IP}}[0]]; my $nat_addr = join '.', unpack 'C4', pack 'N', $flow[${$v9{_NAT_IP}}[0]]; print "ts: $unix_secs, proto: $flow[${$v9{_PROTO}}[0]], src $src_addr:$flow[${$v9{_SRC_PORT}}[0]], "; print "dst: $dst_addr:$flow[${$v9{_DST_PORT}}[0]], nat: $nat_addr:$flow[${$v9{_NAT_PORT}}[0]], event: $flow[${$v9{_NAT_EVENT}}[0]]\n"; } } } Благодарю за скрипт для проверки. Вот что имею в выводе ./sensornf9.pl ts: 1692031769, proto: 1, src 192.168.55.10:4078, dst: 77.88.55.60:4078, nat: xx.xx.xx.xx:4078, event: 1 ts: 1692031799, proto: 1, src 192.168.55.10:4096, dst: 5.255.255.70:4096, nat: xx.xx.xx.xx:4096, event: 1 ts: 1692031815, proto: 6, src 192.168.55.10:39362, dst: 185.125.190.49:80, nat: xx.xx.xx.xx:39362, event: 1 ts: 1692031820, proto: 6, src 192.168.55.10:39362, dst: 185.125.190.49:80, nat: xx.xx.xx.xx:39362, event: 2 ts: 1692031822, proto: 1, src 192.168.55.10:4220, dst: 5.255.255.70:4220, nat: xx.xx.xx.xx:4220, event: 1 ts: 1692031824, proto: 1, src 192.168.55.10:4078, dst: 77.88.55.60:4078, nat: xx.xx.xx.xx:4078, event: 2 ts: 1692031826, proto: 1, src 192.168.55.10:4222, dst: 5.255.255.70:4222, nat: xx.xx.xx.xx:4222, event: 1 ts: 1692031830, proto: 1, src 192.168.55.10:4096, dst: 5.255.255.70:4096, nat: xx.xx.xx.xx:4096, event: 2 ts: 1692031849, proto: 1, src 192.168.55.10:4220, dst: 5.255.255.70:4220, nat: xx.xx.xx.xx:4220, event: 2 ts: 1692031984, proto: 1, src 192.168.55.10:4222, dst: 5.255.255.70:4222, nat: xx.xx.xx.xx:4222, event: 2 ts: 1692032109, proto: 1, src 192.168.55.10:5120, dst: 5.255.255.70:5120, nat: xx.xx.xx.xx:5120, event: 1 ts: 1692032115, proto: 6, src 192.168.55.10:41078, dst: 185.125.190.48:80, nat: xx.xx.xx.xx:41078, event: 1 ts: 1692032118, proto: 6, src 192.168.55.10:41078, dst: 185.125.190.48:80, nat: xx.xx.xx.xx:41078, event: 2 Это говорит о том, что все передается ок? Вроде ts совпадают по времени. Если да, то как тогда на коллекторе nfcapd и в выводе nfdump получать до конца нужные поля(X-Src IP Addr:Port) и правильный формат времени? Мне интересно кто то использует ли этот модуль xt_Nat также для передачи netflow 9 на сорм? Изначально идея перехода с freebsd ipfw nat + shaper на debian нужна для отправки netflow 9 с NEL на СОРМ, потому что в freebsd нет сенсоров с отправкой NEL, так как этот модуль практически исполняет функцию cgnat, то хотелось бы его использовать нежели обычную связку iptables+ipt_netflow. Вставить ник 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.