Нужна помощь по kernel NAT!

Проблемы установки, настройки и работы Правильной Операционной Системы

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
km
рядовой
Сообщения: 16
Зарегистрирован: 2009-07-16 11:57:57

Нужна помощь по kernel NAT!

Непрочитанное сообщение km » 2009-07-16 13:13:19

Здравствуйте!

С FreeBSD работать начал совсем недавно. Хочу сказать, спасибо lissyara за сайт и форум. Отдельное спасибо пользователям за статьи и опыт, которыми они делятся.

Задача такая: пробросить порт на локальную машину.

Подробнее:
Установлена FreeBSD 7.2. Имеем два интерфейса xl0(внешний интерфейс с ip:192.168.0.2) и sk0(внутренний интерфейс c ip:192.168.10.1). xl0 - подключен к роутеру(аппаратное устройство с ip:192.168.0.1). На роутере(192.168.0.1) проброс порта 6969 идет на 192.168.0.2(xl0).

Ядро собрано со следующими опциями:

Код: Выделить всё

options         IPFIREWALL
options         IPFIREWALL_VERBOSE
options         IPFIREWALL_VERBOSE_LIMIT=100
options         IPFIREWALL_FORWARD
options         IPFIREWALL_DEFAULT_TO_ACCEPT
options         IPFIREWALL_NAT
options         LIBALIAS
rc.conf(только то, что касается сети и firewall):

Код: Выделить всё

defaultrouter="192.168.0.1"
gateway_enable="YES"
ifconfig_sk0="inet 192.168.10.1 netmask 255.255.255.0"
ifconfig_xl0="inet 192.168.0.2 netmask 255.255.255.0"
firewall_enable="YES"
firewall_nat_enable="YES"
firewall_nat_interface="xl0"
firewall_script="/etc/firewall.sh"
sysctl(только то, что касается firewall):

Код: Выделить всё

net.inet.ip.fw.dyn_keepalive: 1
net.inet.ip.fw.dyn_short_lifetime: 5
net.inet.ip.fw.dyn_udp_lifetime: 10
net.inet.ip.fw.dyn_rst_lifetime: 1
net.inet.ip.fw.dyn_fin_lifetime: 1
net.inet.ip.fw.dyn_syn_lifetime: 20
net.inet.ip.fw.dyn_ack_lifetime: 300
net.inet.ip.fw.static_count: 25
net.inet.ip.fw.dyn_max: 4096
net.inet.ip.fw.dyn_count: 152
net.inet.ip.fw.curr_dyn_buckets: 256
net.inet.ip.fw.dyn_buckets: 256
net.inet.ip.fw.tables_max: 128
net.inet.ip.fw.default_rule: 65535
net.inet.ip.fw.verbose_limit: 100
net.inet.ip.fw.verbose: 1
net.inet.ip.fw.one_pass: 0
net.inet.ip.fw.autoinc_step: 100
net.inet.ip.fw.enable: 1
firewall.sh:

Код: Выделить всё

#!/bin/sh
iip="192.168.10.1"
oip="192.168.0.2"
oif="xl0"
iif="sk0"

ipfw -f flush
ipfw add 1 check-state

ipfw add 10 allow all from any to any via lo0

ipfw add 20 fwd ${iip},8080 tcp from ${iip}/24 to any 80 recv ${iif}

ipfw nat 1 config ip ${oip} redirect_port tcp 192.168.10.11:6969 6969
ipfw add 30 nat 1 tcp from 192.168.10.11 6969 to any via ${oif}
ipfw nat 2 config ip ${oip} redirect_port udp 192.168.10.11:6969 6969
ipfw add 40 nat 2 udp from 192.168.10.11 6969 to any via ${oif}

ipfw add 50 deny icmp from any to any in icmptype 5,9,13,14,15,16,17
ipfw add 60 reject ip from ${iip}/24 to any in via ${oif}
ipfw add 70 allow tcp from me to any keep-state via ${oif}
ipfw add 80 allow icmp from any to any
ipfw add 90 allow udp from me to any domain keep-state
ipfw add 100 allow udp from any to me domain
ipfw add 110 allow ip from me to any

ipfw nat 3 config if ${oif} deny_in same_ports unreg_only
ipfw add 120 nat 3 ip from any to any out via ${oif}
ipfw add 130 nat 3 ip from any to ${oip} in via ${oif}

ipfw add 140 allow tcp from any to any 25,110 out via ${oif}
ipfw add 150 allow tcp from any 25,110 to any in via ${oif}

ipfw add 160 allow tcp from any to any 5190 out via ${oif}
ipfw add 170 allow tcp from any 5190 to any in via ${oif}

ipfw add 180 allow ip from any to any via ${iif}

ipfw add 190 deny all from any to any
Никак не хочет работать правило 30(nat 1), 40(nat 2). Интернет есть, почта и icq тоже работают(через NAT, правило nat 3).

Раньше стоял natd, всё работало. Охота с kernel NAT поработать.

Заранее, огромное спасибо!

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

Re: Нужна помощь по kernel NAT!

Непрочитанное сообщение terminus » 2009-07-16 14:19:07

Код: Выделить всё

ipfw nat 1 config ip ${oip} redirect_port tcp 192.168.10.11:6969 6969

ipfw add 30 nat 1 tcp from 192.168.10.11 6969 to any via ${oif}
ipfw add 31 nat 1 tcp from any to ${oip} 6969 via ${oif}

ipfw nat 2 config ip ${oip} redirect_port udp 192.168.10.11:6969 6969

ipfw add 40 nat 2 udp from 192.168.10.11 6969 to any via ${oif}
ipfw add 41 nat 2 udp from any to ${oip} 6969 via ${oif}
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: Нужна помощь по kernel NAT!

Непрочитанное сообщение hizel » 2009-07-16 15:17:13

Код: Выделить всё

firewall_nat_enable="YES"
firewall_nat_interface="xl0"
зачем это в rc.conf ?
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

km
рядовой
Сообщения: 16
Зарегистрирован: 2009-07-16 11:57:57

Re: Нужна помощь по kernel NAT!

Непрочитанное сообщение km » 2009-07-17 3:52:34

terminus:
Сделал

Код: Выделить всё

ipfw nat 1 config ip ${oip} redirect_port tcp 192.168.10.11:6969 6969

ipfw add 30 nat 1 tcp from 192.168.10.11 6969 to any via ${oif}
ipfw add 31 nat 1 tcp from any to ${oip} 6969 via ${oif}

ipfw nat 2 config ip ${oip} redirect_port udp 192.168.10.11:6969 6969

ipfw add 40 nat 2 udp from 192.168.10.11 6969 to any via ${oif}
ipfw add 41 nat 2 udp from any to ${oip} 6969 via ${oif}
Не помогло.

Может

Код: Выделить всё

net.inet.ip.fw.one_pass=1
сделать?

hizel:

Код: Выделить всё

firewall_nat_enable="YES"
firewall_nat_interface="xl0"
зачем это в rc.conf ?
Честно сказать не могу..., наверное где-то видел.
Убрал(было лишнее). Ничего не изменилось. Спасибо.

km
рядовой
Сообщения: 16
Зарегистрирован: 2009-07-16 11:57:57

Re: Нужна помощь по kernel NAT!

Непрочитанное сообщение km » 2009-07-17 4:14:14

terminus:
Извени, ты был прав.
Только я сделал так:

Код: Выделить всё

ipfw nat 1 config ip ${oip} redirect_port tcp 192.168.10.11:6969 6969

ipfw add 30 nat 1 tcp from 192.168.10.11 6969 to any out via ${oif}
ipfw add 31 allow tcp from any 6969 to any out via ${oif}
ipfw add 32 nat 1 tcp from any to ${oip} 6969 in via ${oif}
ipfw add 33 allow tcp from any to any 6969 in via ${oif}

ipfw nat 2 config ip ${oip} redirect_port udp 192.168.10.11:6969 6969

ipfw add 40 nat 2 udp from 192.168.10.11 6969 to any out via ${oif}
ipfw add 41 allow udp from any 6969 to any out via ${oif}
ipfw add 42 nat 2 udp from any to ${oip} 6969 in via ${oif}
ipfw add 43 allow udp from any to any 6969 in via ${oif}
Всё работает(проброс порта идёт). Может есть ошибки?
Опцию net.inet.ip.fw.one_pass я не трогал(net.inet.ip.fw.one_pass=0).

terminus и hizel спасибо, выручили!

Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

Re: Нужна помощь по kernel NAT!

Непрочитанное сообщение terminus » 2009-07-17 9:21:57

мой пример должен был работать при one_pass=1
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.

km
рядовой
Сообщения: 16
Зарегистрирован: 2009-07-16 11:57:57

Re: Нужна помощь по kernel NAT!

Непрочитанное сообщение km » 2009-07-20 4:40:14

terminus писал(а):мой пример должен был работать при one_pass=1
И тут ты совершенно прав. Проверил, работает. Спасибо большое!

km
рядовой
Сообщения: 16
Зарегистрирован: 2009-07-16 11:57:57

Re: Нужна помощь по kernel NAT!

Непрочитанное сообщение km » 2009-07-21 5:35:11

Тогда получается, что правила:

Код: Выделить всё

ipfw nat 3 config if ${oif} deny_in same_ports unreg_only
ipfw add 120 nat 3 ip from any to any out via ${oif}
ipfw add 130 nat 3 ip from any to ${oip} in via ${oif}

ipfw add 140 allow tcp from any to any 25,110 out via ${oif}
ipfw add 150 allow tcp from any 25,110 to any in via ${oif}

ipfw add 160 allow tcp from any to any 5190 out via ${oif}
ipfw add 170 allow tcp from any 5190 to any in via ${oif}
Не имеют смысла, т.к. пакет уже не проходит дальше по правилам(net.inet.ip.fw.one_pass=1).
Их нужно заменить на:

Код: Выделить всё

ipfw nat 3 config if ${oif} deny_in same_ports unreg_only
ipfw add 120 nat 3 tcp from any to any 25,110 out via ${oif}
ipfw add 130 nat 3 tcp from any 25,110 to ${oip} in via ${oif}

ipfw nat 4 config if ${oif} deny_in same_ports unreg_only
ipfw add 140 nat 4 tcp from any to any 5190 out via ${oif}
ipfw add 150 nat 4 tcp from any 5190 to ${oip} in via ${oif}
Правильно ли я рассуждаю?

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: Нужна помощь по kernel NAT!

Непрочитанное сообщение hizel » 2009-07-21 6:48:50

да, но можно еще поставить one_pass в 0 если припрет :]
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

km
рядовой
Сообщения: 16
Зарегистрирован: 2009-07-16 11:57:57

Re: Нужна помощь по kernel NAT!

Непрочитанное сообщение km » 2009-07-21 12:31:17

Спасибо hizel !

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: Нужна помощь по kernel NAT!

Непрочитанное сообщение hizel » 2009-07-21 12:41:05

или ipfw disable one_pass что аналогично пинку sysctl
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.