Перейти к содержимому
Калькуляторы
2 часа назад, hiller сказал:

Вот решение проблемки со сборкой, которую я описывал чуть выше

там есть пулреквест с 2мя коммитами https://github.com/andrsharaev/xt_NAT/pull/2/commits

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


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

В 12.01.2021 в 22:57, pppoetest сказал:

Я немножко переписал, и стала совместима, но пришлось пожертвовать стоповым эвентом.

xt_NAT.c

Если вдруг кому нужно, вернул стоповый эвент и добавил для всяких сормов требуемые поля в экспорт

xt_NAT.c

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


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

А как эту штуку использовать в netns?

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


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

@pppoetest Надо будет попробовать. Так то без отправки на сорм пашет успешно, но наш сорм хочет нетфлоу 9 версии( 

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


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

Вот в9, тренируйся на кошках, сырое.

xt_NAT.h

xt_NAT.c

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


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

для ядер 5.10

 

xt_NAT.h

 

в git тоже не умею

 

Обновил xt_NAT.c с ktime_get_raw_ts64

xt_NAT.c

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

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


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

Проблема: тестовый сервер, один клиент, ноутбук. Перестает натить, на наружном интерфейсе выходят пакеты с внутренним IP, как будто таймер какой протухает и все перестает работать. Если обновить страничку, или перезапустить пинг, опять натит. Когда не натит, в cat /proc/net/NAT/users пусто.

Пример: на клиенте ping dns.server -t, на наружном интерфейсе сервера вижу запросы с внутреннего IP, передергиваю патч у клиента и пинг пошел, на наружном интерфейсе пакеты с nat пула.

 

 

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


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

Юзаешь модуль со своими правками? Если так, то присмотрись к xt_NAT.c, строки 132-133,138-139. Ты убрал getrawmonotonic но не добавил getrawmonotonic64. Возможно причина где-то тут?

 

Хмм, похоже оно давно было депрекейтед, а теперь вообще недоступно. Если не ошибаюсь, использовать ktime_get_raw_ts64

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


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

Да, который чуть выше выложил. этот NAS уже в проде на обычном iptables NAT. Скоро тестовый соберу, буду пробовать дальше. Скомпилировал нормально, обновил пост выше.

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

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


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

В 28.01.2022 в 09:46, hRUst сказал:

Скоро тестовый соберу, буду пробовать дальше. Скомпилировал нормально, обновил пост выше

Я запустил в прод на 5.10 с ktime_get_raw_ts64 полторы недели назад, пока жалоб нет.

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


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

@pppoetest добрый день! А не могли бы вы выложить версию ,которая собирается на 5.10 ? С патчами из гитхаба не хочет собираться (

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


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

У меня только с правками под нетфло в9

nat.zip

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


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

@pppoetest Спасибо! Он у вас в проде стоит? Попробовал сейчас через него посерфить - часть сайтов еле открывается, скорость до своего же спидтеста упала с 500 до 1мбит.

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


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

Стоит, уже больше года.

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


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

All у кого есть эти патчи в живом виде дайте пожалуйста..а то линки битые

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


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

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


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

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

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


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

Покажите что передаете модулую в опциях и что в дмесг после его загрузки

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


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

В 11.08.2023 в 20:10, pesvo сказал:

подскажите в чем может быть дело

Выгрузить модуль и загрузить заново со всеми параметрами.

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


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

The suggestion indicates that if certain modules are uninteresting, one can experiment by crafting a test rule using raw data and a specific packet selector to determine their presence. If the packets are captured, delving into iptables is advised; if not, exploring tcpdump and ingress filters might be more fruitful.

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


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

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

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


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

По коду модуля при загрузке его и включенном netflow вы должны видеть вот это

printk(KERN_INFO "xt_NAT NEL: add destination %s\n", print_sockaddr(&usock->addr));

В вашем логе dmesg я этого не вижу. По какой-то причине в модуль не переданы параметры. Сделайте явно

modprobe -r xt_NAT

modprobe xt_NAT блаблабла

И смотрим в дмесг снова.

 

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


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

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? Спасибо.

 

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


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

С гита 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, но вроде он передает нужные шаблоны

Идеи пока закончились куда копать..

 

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


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

В 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";
    }
  }
}

 

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


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

Join the conversation

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

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

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

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

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

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

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