Iluffka Posted August 19, 2020 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 Может кто знает ещё решение подобное, помимо этого? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
sdy_moscow Posted August 19, 2020 @Iluffka Насколько помнится штатные SNAT и DNAT все равно требуют контрак. Даже если схема ип в ип. Нужен дополнительный модуль в иптабл подгрузить, какой - не знаю. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Iluffka Posted August 19, 2020 да, они всё равно попадают в контрак, как убрать это поведение я как раз и ищу Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
sdy_moscow Posted August 19, 2020 @Iluffka Код такого НАТа реализован в последних версия ассел пптп для режима ип овер ип. В догонку. Посмотри -j masquerade https://webhamster.ru/mytetrashare/index/mtb0/28 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Iluffka Posted August 19, 2020 masquarade это типа сурс ната, когда сервер перебивает src чтобы обратный трафик вернулся к нему... это не то. мне нужно чтобы сервер тупо делал то что написано - видит трафик по заданным критериями - меняет dst adrr + port и\или src addr + port без отслеживания состояния, чтобы трафик мог выходить через другой сервер, а не там где зашёл Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Mystray Posted August 19, 2020 9 минут назад, Iluffka сказал: masquarade это типа сурс ната, когда сервер перебивает src чтобы обратный трафик вернулся к нему... это не то. мне нужно чтобы сервер тупо делал то что написано - видит трафик по заданным критериями - меняет dst adrr + port и\или src addr + port без отслеживания состояния, чтобы трафик мог выходить через другой сервер, а не там где зашёл Погуглите tc nat он именно это и делает. Только селектор наверное надо будет городить, да и вообще у tc синтаксис марсианский. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Iluffka Posted August 20, 2020 1к1 нат получился через tc, но как выборку по портам сделать (перенаправление портов с, допустим, 22 на 232) не разберусь. Подозреваю что так нельзя Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
acutus Posted August 23, 2020 Помогите разобраться. Поднял тестовый сервер. 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) наблюдается следующая картина: Открывается первая страница ресурса, но при переходе по ссылкам (на этом же домене, либо сабдоменах) страницы уже не открываются. Где я мог накосячить? Или с какой стороны подойти к диагностике проблемы хотя бы. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
kayot Posted August 23, 2020 4 часа назад, acutus сказал: Где я мог накосячить? Это нормально для настроек по умолчанию, разные хосты внутри одного доменного имени открываются с разных NAT IP. Добавь --persistent в правило NAT. пардон Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
vurd Posted August 23, 2020 15 минут назад, kayot сказал: Это нормально для настроек по умолчанию, разные хосты внутри одного доменного имени открываются с разных NAT IP. Добавь --persistent в правило NAT. не поможет. модуль не стандартный же, там по определению персистент. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
pppoetest Posted October 14, 2020 Народ, кто пользует модуль, кто-нибудь пробовал грузить его с параметром 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 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
sdy_moscow Posted October 14, 2020 @pppoetest Вернулся ptr=0? Вставьте проверку. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
pppoetest Posted October 14, 2020 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 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
NiTr0 Posted October 14, 2020 мож того... vmalloc заюзать? вроде как физически непрерывный кусок памяти же не нужен. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
pppoetest Posted October 15, 2020 Я не погромист, раз никто не сталкивался и у всех всё работает, значит хватает дефолтного значения. Оставлю так, тестирую дальше. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
acutus Posted October 28, 2020 (edited) del Edited October 28, 2020 by acutus Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Igor Diakonov Posted November 13, 2020 В 19.08.2020 в 13:01, sdy_moscow сказал: @Iluffka Насколько помнится штатные SNAT и DNAT все равно требуют контрак. Даже если схема ип в ип. Нужен дополнительный модуль в иптабл подгрузить, какой - не знаю. Древний RAWSNAT + напильник Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Sacrament Posted January 12, 2021 Кто-то юзает экспорт статистики NAT events? Совместима ли она с ipt_netflow? Сейчас есть несколько тазиков с НАТ и все они шлют события НАТ на один коллектор, хотел попробовать данный модуль и боюсь не будет ли каши. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
pppoetest Posted January 12, 2021 4 часа назад, Sacrament сказал: Кто-то юзает экспорт статистики NAT events? Совместима ли она с ipt_netflow? Я немножко переписал, и стала совместима, но пришлось пожертвовать стоповым эвентом. xt_NAT.c Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
vurd Posted January 12, 2021 1 час назад, pppoetest сказал: Я немножко переписал, и стала совместима, но пришлось пожертвовать стоповым эвентом. xt_NAT.c У вас там правки под kernel 5.x добавлены? Вообще неплохо бы это PR кинуть в гитхаб к проекту, мало ли кому пригодится. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
pppoetest Posted January 13, 2021 9 часов назад, vurd сказал: У вас там правки под kernel 5.x добавлены? Вообще неплохо бы это PR кинуть в гитхаб к проекту, мало ли кому пригодится. Нет, я не погромист, да и в гитхаб не умею. Если хочешь сделай дифф и сам кинь пр. Хотя, кмк, безсмысленно, ибо автор сказал: В 14.07.2019 в 15:37, uzd сказал: 2. Дальнейшая поддержка не планируется Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Sacrament Posted January 13, 2021 18 часов назад, pppoetest сказал: Я немножко переписал, и стала совместима, но пришлось пожертвовать стоповым эвентом. xt_NAT.c Благодарю Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
hiller Posted May 9, 2021 Чем закончилась история с тестированием 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 Кто-нибудь решал эту проблемку? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
pppoetest Posted May 9, 2021 2 часа назад, hiller сказал: Чем закончилась история с тестированием xt_NAT? У кого-нибудь в продакшине стоит? Стоит. Натит. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
hiller Posted May 10, 2021 Вот решение проблемки со сборкой, которую я описывал чуть выше: https://github.com/DmitriyEshenko/vyos-cgnat/commit/b50e09b3141be657d5bb03891e3e530d8c3416c9 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...