Всем привет!
У меня творится какой-то полтергейст с 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"
Заранее спасибо!