Перейти к содержимому
Калькуляторы
30 minutes ago, Ivan_83 said:

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

в целом, подумал, что можно натить внутрь и обратным правилом наружу, самое главное чтобы состояния не отслеживались, типа вот так

iptables -t nat -I POSTROUTING -s 10.32.173.16/32 -o eth0 -p tcp -m tcp --sport 22 -m comment --comment SNAT-PORT-ANSWER -j SNAT --to-source 14.1.1.1:22211
iptables -t nat -I PREROUTING -d 14.1.1.1/32 -i eth0 -p tcp -m tcp --dport 22211 -m comment --comment DNAT-PORT -j DNAT --to-destination 10.32.173.16:22

 

Может кто знает ещё решение подобное, помимо этого?

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


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

@Iluffka Насколько помнится штатные SNAT  и DNAT все равно требуют контрак. Даже если схема ип в ип.

Нужен дополнительный модуль в иптабл подгрузить, какой - не знаю.

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


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

да, они всё равно попадают в контрак, как убрать это поведение я как раз и ищу

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


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

@Iluffka Код такого НАТа реализован в последних версия ассел пптп для режима ип овер ип.

 

В догонку.

Посмотри -j masquerade

https://webhamster.ru/mytetrashare/index/mtb0/28

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


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

masquarade это  типа сурс ната, когда сервер перебивает src чтобы обратный трафик вернулся к нему... это не то.

мне нужно чтобы сервер тупо делал то что написано - видит трафик по заданным критериями - меняет dst adrr + port и\или src addr + port без отслеживания состояния, чтобы трафик мог выходить через другой сервер, а не там где зашёл

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


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

9 минут назад, Iluffka сказал:

masquarade это  типа сурс ната, когда сервер перебивает src чтобы обратный трафик вернулся к нему... это не то.

мне нужно чтобы сервер тупо делал то что написано - видит трафик по заданным критериями - меняет dst adrr + port и\или src addr + port без отслеживания состояния, чтобы трафик мог выходить через другой сервер, а не там где зашёл

Погуглите tc nat он именно это и делает. Только селектор наверное надо будет городить, да и вообще у tc синтаксис марсианский. 

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


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

1к1 нат получился через tc, но как выборку по портам сделать (перенаправление портов с, допустим, 22 на 232) не разберусь. Подозреваю что так нельзя

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


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

Помогите разобраться. 

Поднял тестовый сервер. Centos 7. ядро 4.4.232-1.el7.elrepo.x86_64

Модуль загружен.

Правила:

$IPTABLES -t raw -A PREROUTING -s 10.36.0.0/24 -j CT --notrack
$IPTABLES -t raw -A PREROUTING -d x.xxx.xxx.0/24 -j NAT --dnat


$IPTABLES -A FORWARD -d 10.36.0.0/24 -j ACCEPT
$IPTABLES -A FORWARD -s 10.36.0.0/24 -j NAT --snat

 

В принципе все работает. Но на ряде ресурсов (в частности mail.ru) наблюдается следующая картина: Открывается первая страница ресурса, но при переходе по ссылкам (на этом же домене, либо сабдоменах) страницы уже не открываются.

Где я мог накосячить? Или с какой стороны подойти к диагностике проблемы хотя бы.
 

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


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

4 часа назад, acutus сказал:

Где я мог накосячить?

Это нормально для настроек по умолчанию, разные хосты внутри одного доменного имени открываются с разных NAT IP. Добавь --persistent в правило NAT.

пардон

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


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

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

Это нормально для настроек по умолчанию, разные хосты внутри одного доменного имени открываются с разных NAT IP. Добавь --persistent в правило NAT.

не поможет. модуль не стандартный же, там по определению персистент.

 

 

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


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

Народ, кто пользует модуль, кто-нибудь пробовал грузить его с параметром nat_hash_size большим дефолтного? У меня крашится с таким вот логом:

[4072873.552030] Module xt_NAT loaded
[4072873.552033] xt_NAT DEBUG: IP Pool from 127.0.0.1 to 127.0.0.1
[4072873.552034] xt_NAT DEBUG: nat pool table mem: 4
[4072873.552035] xt_NAT DEBUG: NAT hash size: 524288
[4072873.552036] xt_NAT DEBUG: Users hash size: 16384
[4072873.552036] ------------[ cut here ]------------
[4072873.552040] WARNING: CPU: 0 PID: 5352 at mm/slab_common.c:657 kmalloc_slab+0x2e/0x86()
[4072873.552041] Modules linked in: xt_NAT(O+) xt_CHECKSUM iptable_mangle ipt_MASQUERADE nf_nat_masquerade_ipv4 iptable_nat nf_nat_ipv4 nf_nat nf_conntrack_ipv4 nf_defrag_ipv4 xt_conntrack nf_conntrack ipt_REJECT nf_reject_ipv4 xt_tcpudp tun ebtable_filter nbd ib_iser rdma_cm iw_cm ib_cm ib_sa ib_mad ib_core ib_addr iscsi_tcp libiscsi_tcp libiscsi scsi_transport_iscsi vmwgfx video usbhid ttm sr_mod snd_intel8x0 snd_ac97_codec snd_pcm snd_timer snd soundcore rng_core parport_pc parport ohci_pci ohci_hcd loop joydev iptable_filter ip_tables ip6table_filter ip6_tables i2c_piix4 hid_generic hid ext4 jbd2 mbcache ebtable_nat ebtables x_tables e1000 drm_kms_helper drm i2c_core dm_mod crc16 cdrom bridge battery ahci libahci ac97_bus ac 8021q garp stp llc sg ata_generic sd_mod usb_storage iTCO_wdt iTCO_vendor_support evdev kvm_intel kvm crc32c_intel ghash_clmulni_intel aesni_intel aes_x86_64 glue_helper lrw gf128mul ablk_helper cryptd microcode pcspkr psmouse ata_piix hpwdt serio_raw ipmi_si hpilo ipmi_msghandler uhci_hcd sb_edac acpi_power_meter edac_core lpc_ich wmi mfd_core thermal hpsa tg3 ehci_pci ehci_hcd ptp pps_core usbcore usb_common libphy ioatdma dca button processor thermal_sys
[4072873.552081] CPU: 0 PID: 5352 Comm: modprobe Tainted: G           O   3.18.19 #1
[4072873.552082] Hardware name: **************************************************
[4072873.552083]  0000000000000000 0000000000000009 ffffffff81400dd0 0000000000000000
[4072873.552084]  ffffffff8104af97 ffffffff81818250 ffffffff810f95b0 ffff88081ce0f240
[4072873.552086]  0000000000000000 0000000000800000 0000000000000000 00000000000080d0
[4072873.552087] Call Trace:
[4072873.552091]  [<ffffffff81400dd0>] ? dump_stack+0x41/0x51
[4072873.552094]  [<ffffffff8104af97>] ? warn_slowpath_common+0x78/0x90
[4072873.552095]  [<ffffffff810f95b0>] ? kmalloc_slab+0x2e/0x86
[4072873.552097]  [<ffffffff810f95b0>] ? kmalloc_slab+0x2e/0x86
[4072873.552100]  [<ffffffff8111eb66>] ? __kmalloc+0x23/0xf0
[4072873.552102]  [<ffffffffa05aa114>] ? nat_tg_init+0x114/0x1000 [xt_NAT]
[4072873.552104]  [<ffffffffa05aa114>] ? nat_tg_init+0x114/0x1000 [xt_NAT]
[4072873.552108]  [<ffffffffa05aa000>] ? 0xffffffffa05aa000
[4072873.552110]  [<ffffffffa05aa000>] ? 0xffffffffa05aa000
[4072873.552113]  [<ffffffff81002149>] ? do_one_initcall+0xe3/0x17e
[4072873.552115]  [<ffffffff810a0f4a>] ? load_module+0x1a69/0x1dbb
[4072873.552117]  [<ffffffff810a0f92>] ? load_module+0x1ab1/0x1dbb
[4072873.552118]  [<ffffffff8109e183>] ? show_initstate+0x43/0x43
[4072873.552122]  [<ffffffff81407078>] ? page_fault+0x28/0x30
[4072873.552123]  [<ffffffff810a132c>] ? SyS_init_module+0x90/0x9b
[4072873.552126]  [<ffffffff814051c9>] ? system_call_fastpath+0x12/0x17
[4072873.552134] ---[ end trace 74e5ed02d028161d ]---
[4072873.552168] xt_NAT DEBUG: users htable mem: 262144
[4072873.552168] xt_NAT DEBUG: nat pool table mem: 4
[4072873.552425] xt_NAT SESSIONS CLEAN ERROR: Found null ptr for ht_inner/ht_outer

Опытным путём было выяснено что краш происходит в момент выделения памяти в строчке

ht_inner = kzalloc(sz, GFP_KERNEL);  

sz = 8388608

функции nat_htable_create. Не подскажете куда копать?

free
             total       used       free     shared    buffers     cached
Mem:      32978200     364980   32613220          0      18876     186768
-/+ buffers/cache:     159336   32818864
Swap:            0          0          0

uname -a
Linux hp2 3.18.19 #1 SMP Tue Aug 11 14:13:12 ALMT 2015 x86_64 GNU/Linux

 

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


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

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

@pppoetest Вернулся ptr=0? Вставьте проверку.

Там эта проверка есть, только в дальнейшем нет нигде анализа возвращаемого значения функции:

    sz = sizeof(struct xt_nat_htable) * nat_hash_size;
    ht_inner = kzalloc(sz, GFP_KERNEL);
    if (ht_inner == NULL)
        return -ENOMEM;

Ковырнул include/linux/slab.h, таки да, больше 4Мб низя

printk(KERN_INFO "max %d\n", KMALLOC_MAX_SIZE);
max 4194304

 

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


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

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

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


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

Я не погромист, раз никто не сталкивался и у всех всё работает, значит хватает дефолтного значения. Оставлю так, тестирую дальше.

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


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

del

 

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

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


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

В 19.08.2020 в 13:01, sdy_moscow сказал:

@Iluffka Насколько помнится штатные SNAT  и DNAT все равно требуют контрак. Даже если схема ип в ип.

Нужен дополнительный модуль в иптабл подгрузить, какой - не знаю.

Древний RAWSNAT + напильник

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


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

Кто-то юзает экспорт статистики NAT events? Совместима ли она с ipt_netflow?

Сейчас есть несколько тазиков с НАТ и все они шлют события НАТ на один коллектор, хотел попробовать данный модуль и боюсь не будет ли каши.

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


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

4 часа назад, Sacrament сказал:

Кто-то юзает экспорт статистики NAT events? Совместима ли она с ipt_netflow?

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

xt_NAT.c

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


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

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

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

xt_NAT.c

У вас там правки под kernel 5.x добавлены? Вообще неплохо бы это PR кинуть в гитхаб к проекту, мало ли кому пригодится.

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


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

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

У вас там правки под kernel 5.x добавлены? Вообще неплохо бы это PR кинуть в гитхаб к проекту, мало ли кому пригодится.

Нет, я не погромист, да и в гитхаб не умею. Если хочешь сделай дифф и сам кинь пр. Хотя, кмк, безсмысленно, ибо автор сказал:

В 14.07.2019 в 15:37, uzd сказал:

2. Дальнейшая поддержка не планируется

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


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

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

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

xt_NAT.c

Благодарю

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


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

Чем закончилась история с тестированием xt_NAT?

У кого-нибудь в продакшине стоит?

 

Пытался сейчас собраться под Debian 4.19.0-16-amd64, не горит желанием собираться:

 

make
make -C /lib/modules/4.19.0-16-amd64/build/ M=/root/install/xt_NAT modules CONFIG_DEBUG_INFO=y
make[1]: Entering directory '/usr/src/linux-headers-4.19.0-16-amd64'
  CC [M]  /root/install/xt_NAT/xt_NAT.o
/root/install/xt_NAT/xt_NAT.c: In function stat_seq_show’:
/root/install/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
/root/install/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
/root/install/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
/root/install/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
/root/install/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
/root/install/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
/root/install/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
/root/install/xt_NAT/xt_NAT.c: In function nat_tg_init’:
/root/install/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-16-common/scripts/Makefile.build:315: /root/install/xt_NAT/xt_NAT.o] Error 1
make[3]: *** [/usr/src/linux-headers-4.19.0-16-common/Makefile:1562: _module_/root/install/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-16-amd64'
make: *** [Makefile:11: xt_NAT.ko] Error 2

Кто-нибудь решал эту проблемку?

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


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

2 часа назад, hiller сказал:

Чем закончилась история с тестированием xt_NAT?

У кого-нибудь в продакшине стоит?

Стоит. Натит.

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


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

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

https://github.com/DmitriyEshenko/vyos-cgnat/commit/b50e09b3141be657d5bb03891e3e530d8c3416c9

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


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

Join the conversation

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

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

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

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

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

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

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