День добрый.Поставил FreeBSD 10 (amd64). С ядром GENERIC все было нормально.
С собственным ядром не стартует ipnat:# /etc/rc.d/ipnat restart
70:ioctl(SIOCGNATS) object size mismatch for copying out ipfobj
Installing NAT rules.
70:ioctl(SIOCGNATS) object size mismatch for copying out ipfobjПонятно, что исключил что-то нужное ipnat-у в ядре.
Но как найти, какие опции нужны ipnat-у?СПАСИБО!
P.S.: Догадываюсь, что с матчастью у меня не супер, но ответа пока найти не могу. Листинг своего ядра:
cpu HAMMER
ident archive070414
options SCHED_ULE # ULE scheduler
options PREEMPTION # Enable kernel thread preemption
options INET # InterNETworking
options TCP_OFFLOAD # TCP offload
options SCTP # Stream Control Transmission Protocol
options FFS # Berkeley Fast Filesystem
options SOFTUPDATES # Enable FFS soft updates support
options UFS_ACL # Support for access control lists
options UFS_DIRHASH # Improve performance on big directories
options UFS_GJOURNAL # Enable gjournal-based UFS journaling
options QUOTA # Enable disk quotas for UFS
options PROCFS # Process filesystem (requires PSEUDOFS)
options PSEUDOFS # Pseudo-filesystem framework
options GEOM_PART_GPT # GUID Partition Tables.
options GEOM_RAID # Soft RAID functionality.
options GEOM_LABEL # Provides labelization
options COMPAT_FREEBSD32 # Compatible with i386 binaries
options COMPAT_FREEBSD4 # Compatible with FreeBSD4
options COMPAT_FREEBSD5 # Compatible with FreeBSD5
options COMPAT_FREEBSD6 # Compatible with FreeBSD6
options COMPAT_FREEBSD7 # Compatible with FreeBSD7
options KTRACE # ktrace(1) support!!!
options STACK # stack(9) support
options SYSVSHM # SYSV-style shared memory
options SYSVMSG # SYSV-style message queues
options SYSVSEM # SYSV-style semaphores
options _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time extensions
options PRINTF_BUFR_SIZE=128 # Prevent printf output being interspersed.
options HWPMC_HOOKS # Necessary kernel hooks for hwpmc(4)
options AUDIT # Security event auditing
options CAPABILITY_MODE # Capsicum capability mode
options CAPABILITIES # Capsicum capabilities
options PROCDESC # Support for process descriptors
options MAC # TrustedBSD MAC Framework
options KDTRACE_FRAME # Ensure frames are compiled in!!!
options DDB_CTF # Kernel ELF linker loads CTF data
options INCLUDE_CONFIG_FILE # Include this file in kernel
options KDB # Enable kernel debugger support.!!!
options KDB_TRACE # Print a stack trace for a panic.!!!
options SMP # Symmetric MultiProcessor Kernel
device cpufreq
device acpi
device pci
device ahci # AHCI-compatible SATA controllers
device ata # Legacy ATA/SATA controllers
options ATA_STATIC_ID # Static device numbering
device mvs # Marvell 88SX50XX/88SX60XX/88SX70XX/SoC SATA!!!
device siis # SiliconImage SiI3124/SiI3132/SiI3531 SATA!!!
device scbus # SCSI bus (required for ATA/SCSI)
device da # Direct Access (disks)
device atkbdc # AT keyboard controller
device atkbd # AT keyboard
device psm # PS/2 mouse
device kbdmux # keyboard multiplexer
device vga # VGA video card driver
device sc
options SC_PIXEL_MODE # add support for the raster text mode
device puc # Multi I/O cards and multi-channel UARTs!!!
device de # DEC/Intel DC21x4x (``Tulip'')
device em # Intel PRO/1000 Gigabit Ethernet Family
device le # AMD Am7900 LANCE and Am79C9xx PCnet
device vx # 3Com 3c590, 3c595 (``Vortex'')
device miibus # MII bus support
device bge # Broadcom BCM570xx Gigabit Ethernet
device fxp # Intel EtherExpress PRO/100B (82557, 82558)
device re # RealTek 8139C+/8169/8169S/8110S
device rl # RealTek 8129/8139
device ste # Sundance ST201 (D-Link DFE-550TX)
device stge # Sundance/Tamarack TC9021 gigabit Ethernet
device vr # VIA Rhine, Rhine II
device loop # Network loopback
device random # Entropy device
device padlock_rng # VIA Padlock RNG
device rdrand_rng # Intel Bull Mountain RNG
device ether # Ethernet support
device vlan # 802.1Q VLAN support
device tun # Packet tunnel.
device md # Memory "disks"
device gif # IPv6 and IPv4 tunneling
device faith # IPv6-to-IPv4 relaying (translation)
device firmware # firmware assist module
device bpf # Berkeley packet filter
options USB_DEBUG # enable debug msgs
device uhci # UHCI PCI->USB interface
device ohci # OHCI PCI->USB interface
device ehci # EHCI PCI->USB interface (USB 2.0)
device xhci # XHCI PCI->USB interface (USB 3.0)
device usb # USB Bus (required)
device ukbd # Keyboard
device umass # Disks/Mass storage - Requires scbus and da
device virtio # Generic VirtIO bus (required)
device virtio_pci # VirtIO PCI device
device vtnet # VirtIO Ethernet device
device virtio_blk # VirtIO Block device
device virtio_scsi # VirtIO SCSI device
device virtio_balloon # VirtIO Memory Balloon device
device hyperv # HyperV drivers
options XENHVM # Xen HVM kernel infrastructure
device xenpci # Xen HVM Hypervisor services driver
device vmx # VMware VMXNET3 Ethernet
maxusers 512
device tap
options GEOM_MIRROR
options HZ=1000
options MROUTING # маршрутизатор многоадресного трафика
options IPSTEALTH # do not add TTL-count
options ROUTETABLES=4 # таблиц маршрутизации "setfib -3 ping target.example.com"
options DEVICE_POLLING # сетевые не через прерывание, а на уровне ОСи
options IPFIREWALL # встраиваем поддержку файрволла в ядро
options IPFIREWALL_VERBOSE # вывод информации об отброшенных пакетах
options IPFIREWALL_VERBOSE_LIMIT=100 # ограничение, чтоб весь /var
options IPDIVERT # поддержка IP-маскарадинга
options DUMMYNET # поддержка DUMMYNET (искуственное
options LIBALIASа вообще я не понимаю что за любовь тут у народа к юзерспейсному нату (ipnat/natd)? тьфу какая гадость..
IPFW KERNEL NAT же!options IPFIREWALL_NAT
> а вообще я не понимаю что за любовь тут у народа к
> юзерспейсному нату (ipnat/natd)? тьфу какая гадость..natd - согласен. А ipnat вполне себе ядрёный нат.
>> а вообще я не понимаю что за любовь тут у народа к
>> юзерспейсному нату (ipnat/natd)? тьфу какая гадость..
> А ipnat вполне себе ядрёный нат.Поддерживаю.
Да и используется в небольшой сети, нареканий не было.
И еще. Для ipnat есть вполне годное решение по автоматическому пробросу портов(miniupnpd кажется). Для ipfw аналогичное не подскажете?
> options LIBALIAS
> а вообще я не понимаю что за любовь тут у народа к
> юзерспейсному нату (ipnat/natd)? тьфу какая гадость..
> IPFW KERNEL NAT же!
> options IPFIREWALL_NATСпасибо, но не помогло. ((
Пересобрал ядро с :# IPnat
options LIBALIAS
options IPFIREWALL_NATНо:
> /sbin/ipnat70:ioctl(SIOCGNATS) object size mismatch for copying out ipfobj
Может что-то прояснит:
# uname -a
FreeBSD host.my 10.0-RELEASE FreeBSD 10.0-RELEASE #8: Fri May 16 09:38:46 EEST 2014 root@host.my:/usr/obj/usr/src/sys/archive_070414 amd64P.S.: Пересобирал ядро много раз на многих версия, всегда работало. Вплоть до версии 9.0 (правда она была i386). А вот в 10-ке amd64 такая ошибка.
> Спасибо, но не помогло. ((Попробуйте добавить:
options IPFILTER
options IPFILTER_LOG
>> Спасибо, но не помогло. ((
> Попробуйте добавить:
> options IPFILTER
> options IPFILTER_LOGПробовал даже так:
options IPFILTER
options IPFILTER_LOG
device pf # PF packet filter
device pflog # PF log interfaceПросто не писал об этом. Не помогает.
Еще в 10-ке исключили:
options IPFIREWALL_FORWARD
Говорят, что это уже "в коробке". Может нет? Но с этой опцией ядро собираться не хочет, кричит:
unknown option "IPFIREWALL_FORWARD"Еще, кстати, вот что выдает # make LINT
cat ../../conf/NOTES NOTES | sed -E -n -f ../../conf/makeLINT.sed > LINT
echo "include LINT" > LINT-VIMAGE
echo "ident LINT-VIMAGE" >> LINT-VIMAGE
echo "options VIMAGE" >> LINT-VIMAGE
echo "include LINT" > LINT-NOINET
echo "ident LINT-NOINET" >> LINT-NOINET
echo 'makeoptions MKMODULESENV+="WITHOUT_INET_SUPPORT="' >> LINT-NOINET
echo "nooptions INET" >> LINT-NOINET
echo "nodevice gre" >> LINT-NOINET
echo "include LINT" > LINT-NOINET6
echo "ident LINT-NOINET6" >> LINT-NOINET6
echo 'makeoptions MKMODULESENV+="WITHOUT_INET6_SUPPORT="' >> LINT-NOINET6
echo "nooptions INET6" >> LINT-NOINET6
echo "include LINT" > LINT-NOIP
echo "ident LINT-NOIP" >> LINT-NOIP
echo 'makeoptions MKMODULESENV+="WITHOUT_INET_SUPPORT="' >> LINT-NOIP
echo 'makeoptions MKMODULESENV+="WITHOUT_INET6_SUPPORT="' >> LINT-NOIP
echo "nooptions INET" >> LINT-NOIP
echo "nooptions INET6" >> LINT-NOIP
echo "nodevice age" >> LINT-NOIP
echo "nodevice alc" >> LINT-NOIP
echo "nodevice ale" >> LINT-NOIP
echo "nodevice bxe" >> LINT-NOIP
echo "nodevice em" >> LINT-NOIP
echo "nodevice fxp" >> LINT-NOIP
echo "nodevice igb" >> LINT-NOIP
echo "nodevice jme" >> LINT-NOIP
echo "nodevice msk" >> LINT-NOIP
echo "nodevice mxge" >> LINT-NOIP
echo "nodevice sge" >> LINT-NOIP
echo "nodevice sk" >> LINT-NOIP
echo "nodevice txp" >> LINT-NOIP
echo "nodevice vxge" >> LINT-NOIPЭто же оно на мое текущее новое ядро? А как это "nooptions INET" ??? INET6 - действительно выключал, но никак ни INET ! Или я что-то не правильно понимаю?
>[оверквотинг удален]
>
>
> # PF log interface
> Просто не писал об этом. Не помогает.
> Еще в 10-ке исключили:
> options IPFIREWALL_FORWARD
> Говорят, что это уже "в коробке". Может нет? Но
> с этой опцией ядро собираться не хочет, кричит:
> unknown option "IPFIREWALL_FORWARD"
> Еще, кстати, вот что выдает # make LINTНеужели никто не сталкивался с такой проблемой, кроме меня?
>[оверквотинг удален]
>>
>> # PF log interface
>> Просто не писал об этом. Не помогает.
>> Еще в 10-ке исключили:
>> options IPFIREWALL_FORWARD
>> Говорят, что это уже "в коробке". Может нет? Но
>> с этой опцией ядро собираться не хочет, кричит:
>> unknown option "IPFIREWALL_FORWARD"
>> Еще, кстати, вот что выдает # make LINT
> Неужели никто не сталкивался с такой проблемой, кроме меня?А вот это уже интересно! Беру ядро GENERIC, комментирую всего 3 строчки:
#makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols
#makeoptions WITH_CTF=1 # Run ctfconvert(1) for DTrace support
#options INET6 # IPv6 communications protocolsСобираю, получаю 70 Мб, вместо 415 Мб, которые были по умолчанию в системе. И ту же ошибку с ipnat:
# /etc/rc.d/ipnat restart
70:ioctl(SIOCGNATS) object size mismatch for copying out ipfobj
Installing NAT rules.
70:ioctl(SIOCGNATS) object size mismatch for copying out ipfobjПошел еще дальше. Ничего не менял в ядре /usr/src/sys/amd64/conf/GENERIC (я же тот файл беру???) , пересобрал, получил 636 Мб, вместо 415 МБ и ошибки нет. Завтра выясню, какой-же параметр отвечает за ipnat, похоже, что INET6, но почему ???
>[оверквотинг удален]
> Собираю, получаю 70 Мб, вместо 415 Мб, которые были
> по умолчанию в системе. И ту же ошибку с ipnat:
> # /etc/rc.d/ipnat restart
> 70:ioctl(SIOCGNATS) object size mismatch for copying out ipfobj
> Installing NAT rules.
> 70:ioctl(SIOCGNATS) object size mismatch for copying out ipfobj
> Пошел еще дальше. Ничего не менял в ядре /usr/src/sys/amd64/conf/GENERIC
> (я же тот файл беру???) , пересобрал, получил 636 Мб, вместо
> 415 МБ и ошибки нет. Завтра выясню, какой-же параметр отвечает за
> ipnat, похоже, что INET6, но почему ???Было в списке рассылки, что у ipfilter нет мейнтейнера, и что наблюдались проблемы со сборкой СиЛангом.
Так что переходите на pf, там схож синтаксис.
>[оверквотинг удален]
>> # /etc/rc.d/ipnat restart
>> 70:ioctl(SIOCGNATS) object size mismatch for copying out ipfobj
>> Installing NAT rules.
>> 70:ioctl(SIOCGNATS) object size mismatch for copying out ipfobj
>> Пошел еще дальше. Ничего не менял в ядре /usr/src/sys/amd64/conf/GENERIC
>> (я же тот файл беру???) , пересобрал, получил 636 Мб, вместо
>> 415 МБ и ошибки нет. Завтра выясню, какой-же параметр отвечает за
>> ipnat, похоже, что INET6, но почему ???
> Было в списке рассылки, что у ipfilter нет мейнтейнера, и
> что наблюдались проблемы со сборкой СиЛангом.Да, методом исключения удалось выяснить, что ipnat не работает из-за выключенной опции INET6, но почему ???
> Так что переходите на pf, там схож синтаксис.
Как вариант. Можно то куда угодно перейти, хоть на ipfw nat, но хочется разобраться. К тому же мне нравится ipnat - все просто и отлично работало.
> Поставил FreeBSD 10 (amd64). С ядром GENERIC все было нормально.
> С собственным ядром не стартует ipnat:
> # /etc/rc.d/ipnat restart
> 70:ioctl(SIOCGNATS) object size mismatch for copying out ipfobj
> Installing NAT rules.
> 70:ioctl(SIOCGNATS) object size mismatch for copying out ipfobj
> Понятно, что исключил что-то нужное ipnat-у в ядре.
> Но как найти, какие опции нужны ipnat-у?
> ... ipnat не работает из-за выключенной опции INET6, но почему ???Столкнулся с тем же эффектом.
В свой конфиг вернул INET6 ничего остального не меняя. Пересобрал ядро. ipnat заработал.> Как вариант. Можно то куда угодно перейти, хоть на ipfw nat, но хочется разобраться. К тому же мне нравится ipnat - все просто и отлично работало.
Разница в 35 файлах. Буду искать дальше.
Надо багрепорт.
Кто умеет правильно багрепорты -- как правильно? Если можно -- пошагово.
> Надо багрепорт.
> Кто умеет правильно багрепорты -- как правильно? Если можно -- пошагово.Заходите на страницу http://www.freebsd.org/send-pr.html
Заполняете все поля и отправляете.
Заполнять надо по-английски.
В synopsis можно написать: [ipf] ipnat doesn't work without INET6 kernel option
Выбираете категрию kern.
В full description напишите что собираете ядро с такими-то опциями в надежде получить то-то, а получаете то-то. Какие сообщения об ошибках видите при выполнении команд и т.п.
Собственно, вот ветка по багу:
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=190964
Собственно, в предыдущем посте ссылка на процесс поиска решения и реально проверенные и рабочие патчи.
> Собственно, в предыдущем посте ссылка на процесс поиска решения и реально проверенные
> и рабочие патчи.Огромное спасибо за отклики и за то, что разобрались в теме.
Еще одна просьба. Не могли бы Вы, хотя бы в кратце рассказать, как приминить патч, что пересобрать и т.д.? Для тех, кто не очень дружит с английским. Страшно эксперементировать на рабочем сервере. ((Добавляю:
Или все проще простого? Нужно скачать файл ip_compat.h по ссылке http://svnweb.freebsd.org/base?view=revision&revision=268532, заменить его и пересобрать ядро?Но по какому пути заменять? У меня их 4 :
/usr/include/netinet/ip_compat.h
/usr/src/contrib/ipfilter/ipsd/Celler/ip_compat.h
/usr/src/contrib/ipfilter/ipsend/.OLD/ip_compat.h
/usr/src/sys/contrib/ipfilter/netinet/ip_compat.hСудя по всему, по последнему? В опциях ядра ничего менять не нужно?
Какой-то "добрый" человек вернул выброшеные в FreeBSD10 строки для INET6 в
src/sys/contrib/ipfilter/netinet/ip_compat.hВ десятке было:
36 #if defined(__FreeBSD_version) && (__FreeBSD_version >= 400000) && \
37 !defined(_KERNEL) && !defined(USE_INET6) && !defined(NOINET6)
38 # define USE_INET6
39 #endifУбрали.
В 11 появилось:
115 # if defined(_KERNEL)
116 # include "opt_bpf.h"
117 # include "opt_inet6.h"
118 # if defined(INET6) && !defined(USE_INET6)
119 # define USE_INET6
120 # endif
121 # else
122 # if !defined(USE_INET6) && !defined(NOINET6)
123 # define USE_INET6
124 # endif
125 # endifВ конфиге ядра есть опция (и её можно убирать)
options INET6
В конфиге ядра есть опция (и её можно убирать)
device bpfПолучается, пофиг на опции в конфиге, и так сойдёт?
Забыл написать.
Решение (не портя "логику" вернувшего):В файле src/sys/contrib/ipfilter/netinet/ip_compat.h
115 # if defined(_KERNEL)
116 # include "opt_bpf.h"
117 # if defined(INET6)
118 # include "opt_inet6.h"
119 # if !defined(USE_INET6)
120 # define USE_INET6
121 # endif
122 # else
123 # undef USE_INET6
124 # define NOINET6
125 # endif
126 # else
127 # if !defined(USE_INET6) && !defined(NOINET6)
128 # include "opt_inet6.h"
129 # define USE_INET6
130 # endif
131 # endifКостыль, но работает (всё управляется двумя опциями: USE_INET6 и NOINET6).
Т.к. в остальных четырёх файлах (из описания бага) исправления остались.P.S. BPF не трогал, только IPv6
Какая-то выморочная логика: в файле opt_inet6.h только одна строка.#define INET6
Возникает вопрос. А нахрена тогда вообще этот кусок кода в ip_compat.h ???