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