URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 66831
[ Назад ]

Исходное сообщение
"Полтергейст с NAT`ом во FreeBSD"

Отправлено IPKILLER , 08-Июн-06 16:00 
Всем привет!
У меня творится какой-то полтергейст с NAT`ом. Уже вторую неделю парюсь и не пойму где грабли.
Есть сервер, на котором установлен UNIX FreeBSD 6.0. В этом сервере есть две сетевые карты. Одна смотрит в Инет. Её IP-адрес 192.168.49.26. Вторая смотрит в квартирную локалку. IP-адрес второй сетевухи 193.0.0.1. Компьютерам квартирной локалки назначены IP-адреса 193.0.0.2, 193.0.0.3 и 193.0.0.4.
Захотел я, чтобы все компы квартирной локалки выходили в Инет через NAT, запущенный на сервере. Всё настраивал по статье из Инета. Пересобрал ядро с соответствующими опциями, создал и отредактировал все нужные конфигурационные файлы, запустил NAT, FireWall. Сделал всё как описано в статье. ПОСЛЕ ЭТОГО ВСЁ ЗАРАБОТАЛО! НА ВСЕХ КОМПАХ КВАРТИРНОЙ СЕТИ РАБОТАЛ ИНЕТ ЧЕРЕЗ NAT.
Потом мне в руки попался FreeBSD 6.1. Решил установить на сервак его. Сохранил все нужные конфигурационные файлы, чтобы потом их заново не создавать в FreeBSD 6.1, а просто их скопировать куда нужно.
Установил FreeBSD 6.1. Пересобрал точно также (используя сохранённый файл настроек ядра из FreeBSD 6.0) ядро. В нужные места скопировал сохранённые конфиги. Всё сделал один в один также как и в FreeBSD 6.0 (сохранённые конфиги). Ничего больше не менял. ИНЕТ ПЕРЕСТАЛ ТРАНСЛИРОВАТЬСЯ НА КОМПЫ КВАРТИРНОЙ ЛОКАЛКИ! Что я только не делал. Ничего не помогло. НА СЕРВЕРЕ ИНЕТ ПАШЕТ.
Но самое интересное не в этом! Как я уже говорил, все конфиги у меня были сохранены еще из FreeBSD 6.0. Я начисто установил обратно FreeBSD 6.0, пересобрал ядро, использую сохранённый конфигурационный файл ядра, опять куда нужно скопировал все конфиги, но ИНЕТ ЧЕРЕЗ NAT ТАК И НЕ ЗАРАБОТАЛ!!! НА СЕРВЕРЕ ИНЕТ ПАШЕТ. Пингую с любого компа из квартирной сети, например, Яндекс или вообще шлюз провайдера (192.168.1.1) через который осуществляется доступ в Инет, не воркает!
Вот я и не пойму как это так: конфиги одни и теже, грубо говоря просто переустановил FreeBSD 6.0 (если не считать установку FreeBSD 6.1), до переустановки всё работало, а после переустановки с теме же самыми настройками уже не работает! Я уже не знаю, что и делать. Ниже привожу содержимое всех требуемых конфигурационных файлов:

Файл с настройками ядра, который нужен для компиляции ядра:

machine    i386
cpu        I686_CPU
ident        PROMOSERVER

# To statically compile in device wiring instead of /boot/device.hints
#hints        "GENERIC.hints"        # Default places to look for devices.

makeoptions    DEBUG=-g        # Build kernel with gdb(1) debug symbols

options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=10
options IPDIVERT
options IPFIREWALL_DEFAULT_TO_ACCEPT

#options     SCHED_ULE              # ULE scheduler
options     SCHED_4BSD              # 4BSD scheduler
options     PREEMPTION              # Enable kernel thread preemption
options     INET                  # InterNETworking
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     MSDOSFS            # MSDOS Filesystem
options     CD9660            # ISO 9660 Filesystem
options     PROCFS            # Process filesystem (requires PSEUDOFS)
options     PSEUDOFS              # Pseudo-filesystem framework
options     GEOM_GPT              # GUID Partition Tables.
options     COMPAT_43              # Compatible with BSD 4.3 [KEEP THIS!]
options     COMPAT_FREEBSD4        # Compatible with FreeBSD4
options     COMPAT_FREEBSD5        # Compatible with FreeBSD5
options     KTRACE            # ktrace(1) 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     KBD_INSTALL_CDEV                  # install a CDEV entry in /dev
options     AHC_REG_PRETTY_PRINT            # Print register bitfields in debug
                                  # output.  Adds ~128k to driver.
options     AHD_REG_PRETTY_PRINT    # Print register bitfields in debug
                          # output.  Adds ~215k to driver.
options     ADAPTIVE_GIANT        # Giant mutex is adaptive.

# Bus support.
device        isa
device        pci

# Floppy drives
device        fdc

# ATA and ATAPI devices
device        ata
device        atadisk        # ATA disk drives
device        atapicd        # ATAPI CDROM drives
options     ATA_STATIC_ID          # Static device numbering

# atkbdc0 controls both the keyboard and the PS/2 mouse
device        atkbdc    # AT keyboard controller
device        atkbd        # AT keyboard
device        psm        # PS/2 mouse
device        kbdmux

device        vga        # VGA video card driver

# syscons is the default console driver, resembling an SCO console
device        sc

# Enable this for the pcvt (VT220 compatible) console driver
#device        vt
#options     XSERVER        # support for X server on a vt console
#options     FAT_CURSOR    # start with block cursor

device        agp        # support several AGP chipsets

# Power management support (see NOTES for more options)
#device        apm
# Add suspend/resume support for the i8254.
device        pmtimer

# Serial (COM) ports
device        sio        # 8250, 16[45]50 based serial ports

# Parallel port
device        ppbus        # Parallel port bus (required)
device        ppi        # Parallel port interface device
#device        vpo        # Requires scbus and da

# If you've got a "dumb" serial or parallel PCI card that is
# supported by the puc(4) glue driver, uncomment the following
# line to enable it (connects to the sio and/or ppc drivers):
#device        puc

# PCI Ethernet NICs that use the common MII bus controller code.
# NOTE: Be sure to keep the 'device miibus' line in order to use these NICs!
device        miibus        # MII bus support
device        rl        # RealTek 8129/8139
device        vr        # VIA Rhine, Rhine II


# Pseudo devices.
device        loop        # Network loopback
device        random        # Entropy device
device        ether        # Ethernet support
device        tun        # Packet tunnel.
device        pty        # Pseudo-ttys (telnet etc)
device        gif        # IPv6 and IPv4 tunneling

device            bpf

Файл /etc/rc.firewall:
#!/bin/sh -

#Обьявляем переменную для облегчения написания правил. Ключик -q подавляет вывод сообщений ipfw на консоль
fwcmd="/sbin/ipfw -q"

# Данные по внешней сети
LanOut="rl0"
IPOut="192.168.49.26"
NetOut="24"
MaskOut="255.255.255.0"

# Данные по локальной сети
LanIn="vr0"
IPIn="193.0.0.1"
NetInIP="193.0.0.0"
NetInMask="24"
MaskIn="255.255.255.0"

# Привелигированные адрес (доступ избранным)
MyIP1="193.0.0.1"
MyIP2="193.0.0.2"
MyIP3="193.0.0.3"
MyIP4="193.0.0.4"

# Сбросить все правила которые устанавливались ранее
${fwcmd} -f flush

# Пропускать все пакеты сгенерированные сервером (кажется что lo0 настолько понятно, что не знаешь как еще обьяснить :))
# Без этого вообще ничего работать не будет :)
${fwcmd} add pass all from any to any via lo0

# Отправляем пакеты из внутренней сети наружу и с наружи для внутренней сети на обработку NAT
${fwcmd} add divert natd ip from ${NetInIP}/${NetInMask} to any out via ${LanOut}
${fwcmd} add divert natd ip from any to ${IPOut} in via ${LanOut}

# Это и следующее правила значительно облегчают жизнь файрволу :)
# Пропускаем все соединения с установленным битом RST или ACK
# По другому - пропускаем установленные соединения соединение
${fwcmd} add pass tcp from any to any established
# Разрешаем все пакеты выходящие из внешнего интерфейса с внешнего IP
${fwcmd} add pass ip from ${IPOut} to any out xmit ${LanOut}

# Избранным беспрепятственный доступ (все открывать неразумно)
${fwcmd} add pass tcp from ${MyIP1} to any 20,21,22,23,80,443,4000
${fwcmd} add pass tcp from any 20,21,22,23,80,443,4000 to ${MyIP1}
${fwcmd} add pass tcp from ${MyIP2} to any 20,21,22,23,80,443,4000
${fwcmd} add pass tcp from any 20,21,22,23,80,443,4000 to ${MyIP2}
${fwcmd} add pass tcp from ${MyIP3} to any 20,21,22,23,80,443,4000
${fwcmd} add pass tcp from any 20,21,22,23,80,443,4000 to ${MyIP3}
${fwcmd} add pass tcp from ${MyIP4} to any 20,21,22,23,80,443,4000
${fwcmd} add pass tcp from any 20,21,22,23,80,443,4000 to ${MyIP4}

# Разрешаем почту, DNS
${fwcmd} add pass tcp from any to any 25,110 via ${LanOut}
${fwcmd} add pass tcp from any 25,110 to any via ${LanOut}
${fwcmd} add pass udp from any to any 53 via ${LanOut}
${fwcmd} add pass udp from any 53 to any via ${LanOut}

${fwcmd} add pass all from any to any via ${LanIn}

#ICMP
${fwcmd} add allow icmp from any to ${IPOut} in  via ${LanOut} icmptype 0,3,4,11,12
${fwcmd} add allow icmp from any to ${NetInIP}/${NetInMask} in  via ${LanOut} icmptype 0,3,4,11,12
${fwcmd} add allow icmp from ${IPOut} to any out via ${LanOut} icmptype 3,8,12
${fwcmd} add allow icmp from ${IPOut} to any out via ${LanOut} frag

${fwcmd} add deny log all from any to any via ${LanOut}

${fwcmd} add deny log ip from any to any


Файл /etc/natd.conf:

same_ports yes
use_sockets yes
unregistered_only yes


Файл /etc/rc.conf:

# -- sysinstall generated deltas -- # Tue Jun  6 02:33:57 2006
# Created: Tue Jun  6 02:33:57 2006
# Enable network daemons for user convenience.
# Please make all changes to this file, not to /etc/defaults/rc.conf.
# This file now contains just the overrides from /etc/defaults/rc.conf.
gateway_enable="YES"
hostname="dial-up.promoserver.net"
ifconfig_rl0="inet 192.168.49.26  netmask 255.255.255.0"
ifconfig_vr0="inet 193.0.0.1  netmask 255.255.255.0"
keymap="ru.koi8-r"
router="/sbin/routed"
router_enable="YES"
router_flags="-q"
static_routes="S Df"
route_S="-net 192.168.0.0 -iface rl0"
route_Df="-host default 192.168.1.1"
natd_program="/sbin/natd"
natd_enable="YES"
natd_interface="rl0"
natd_flags="-f /etc/natd.conf"
sshd_enable="YES"
firewall_enable="YES"
firewall_script="/etc/rc.firewall"

Заранее спасибо!


Содержание

Сообщения в этом обсуждении
"Полтергейст с NAT`ом во FreeBSD"
Отправлено факамаза , 09-Июн-06 09:31 
покажи:
1) ifconfig
2) ipfw show
3) sockstat

"Полтергейст с NAT`ом во FreeBSD"
Отправлено YuryD , 09-Июн-06 10:52 
>покажи:
>1) ifconfig
>2) ipfw show
>3) sockstat

Как оно у вас работает с сеткой 193.0.0.0  - это не приватные сети, ключ -u у natd их не трогает. Или переезжайте в 192.168.0.0 172.16.0.0 10.0.0.0 или убирайте -u


"Полтергейст с NAT`ом во FreeBSD"
Отправлено Rivalryzerg , 09-Июн-06 10:57 
Проверь также стартует ли НАТ при заргузке? У меня при апдейте с релиза 6.0 до stable - перестал при запуске НАТ стартовать. Пришлось запускать вручную через /usr/local/etc/rc.d

"Полтергейст с NAT`ом во FreeBSD"
Отправлено YuryD , 09-Июн-06 11:09 

Не мучайтесь ерундой с сеткой 193.0.0.0, кроме охреневшего провайдера явятся к вам славные владельцы этой сетки и оборвут очумелые ручки.

inetnum:        193.0.0.0 - 193.0.7.255
netname:        RIPE-NCC
descr:          RIPE Network Coordination Centre
descr:          Amsterdam, Netherlands
remarks:        Used for RIPE NCC infrastructure


"Полтергейст с NAT`ом во FreeBSD"
Отправлено alexkid , 09-Июн-06 11:45 
> Не мучайтесь ерундой с сеткой 193.0.0.0, кроме охреневшего провайдера явятся к
>вам славные владельцы этой сетки и оборвут очумелые ручки.

Не вводите в заблуждение, никто ничего не отровет. 193 сетка сидит за натом, ее адреса наружи нигде не будут светиться (при правильно настроенном NAT). Единственным минусом будет то, что реальные адреса 193 сетки будут недоступны из домашней сети.

Из вариантов: проверить слушает ли natd на порту 8668, и посмотреть не попадают ли ничего лишнего в /var/log/security. Можно еще включить log на правила с натом и посмотреть проходят ли пакеты в обе стороны.


"Полтергейст с NAT`ом во FreeBSD"
Отправлено YuryD , 09-Июн-06 12:02 
>Не вводите в заблуждение, никто ничего не отровет. 193 сетка сидит за
>натом, ее адреса наружи нигде не будут светиться (при правильно настроенном
>NAT). Единственным минусом будет то, что реальные адреса 193 сетки будут
>недоступны из домашней сети.

  RFC и первые главы книг по TCP/IP для кого пишут ? Если каждый будет рулить адресным пространством IPv4  никому мало не покажется.... А сетка то как раз RIPE :-)

В данном случае, накеты с сети 193 не натились и запросы улетали к провайдеру, а ответы в сетку ripe. Еслу у провайдера динамическая маршрутизация, то чего там наколбасило - х.з.


"Полтергейст с NAT`ом во FreeBSD"
Отправлено Аноним , 10-Июн-06 12:46 
> В данном случае, накеты с сети 193 не натились и запросы
>улетали к провайдеру, а ответы в сетку ripe. Еслу у провайдера
>динамическая маршрутизация, то чего там наколбасило - х.з.

Ничего там не наколбасило. Даже если шлюз провайдера NAT'ом пропустил пакет с таким адресом  источника, то ответ назад все равно не вернулся. И никакой вселенской катастрофы не произошло.


"Полтергейст с NAT`ом во FreeBSD"
Отправлено universite , 10-Июн-06 16:53 
>> В данном случае, накеты с сети 193 не натились и запросы
>>улетали к провайдеру, а ответы в сетку ripe. Еслу у провайдера
>>динамическая маршрутизация, то чего там наколбасило - х.з.
>
>Ничего там не наколбасило. Даже если шлюз провайдера NAT'ом пропустил пакет с
>таким адресом  источника, то ответ назад все равно не вернулся.
>И никакой вселенской катастрофы не произошло.

Вот таким как Вы могут припоять соответствующие статьи УК - за деструктивные действия.


"Полтергейст с NAT`ом во FreeBSD"
Отправлено suslic , 10-Июн-06 18:15 
/proc/sys/net/ipv4/ip_forwarding  =  1 ???

"Полтергейст с NAT`ом во FreeBSD"
Отправлено nightowl , 10-Июн-06 23:15 
>/proc/sys/net/ipv4/ip_forwarding  =  1 ???


Это ФРЯ ! %-)


"Полтергейст с NAT`ом во FreeBSD"
Отправлено Аноним , 11-Июн-06 20:18 
>Вот таким как Вы могут припоять соответствующие статьи УК - за деструктивные
>действия.
А таким болтунам как вы отказать в доверии.

"Полтергейст с NAT`ом во FreeBSD"
Отправлено IPKILLER , 10-Июн-06 18:59 
Всем огромное спасибо за помошь!!! Всё заработало! Я просто в файле /etc/natd.conf опцию unregistered_only с yes поменял на no. Т.е. теперь unregistered_only no.
Еще раз всем спасибо!