Добрый день коллеги Решил настроить на шлюзе с FreeBSD NAT интересует именно ядерный NAT но нат работать не хочет ТЕСТОВАЯ СИСТЕМА
LAN 192.168.5.0 em1
WAN 192.168.35.0 em0
Настраивал http://www.lissyara.su/articles/freebsd/tuning/ipfw_nat/ Пример1Не работает NAT
Не работает перенаправление портовОС FreeBSD 8.4 x64 Ядро пересобрано с опциями
/usr/src/sys/amd64/conf/ROUTER
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=50
options IPFIREWALL_NAT
options LIBALIAS
options IPFIREWALL_FORWARD
options IPDIVERT
options ROUTETABLES=2
options DUMMYNET
options HZ=«1000»Добавил в /etc/sysctl.conf
ee /etc/sysctl.conf
net.inet.ip.fw.one_pass=1
Добавил в /etc/rc.conf
#ee /etc/rc.conf
defaultrouter=«192.168.35.1»
hostname=«NAT»
ifconfig_em0=«inet 192.168.35.20 netmask 255.255.255.0»
ifconfig_em1=«inet 192.168.5.5 netmask 255.255.255.0»
gateway_enable=«YES»
keymap=«ru.koi8-r»
sshd_enable=«YES»
firewall_enable=«YES»
firewall_nat_enable=«YES»
firewall_type=«/etc/firewall»создал файл /etc/firewall
сделал chmod +x fireallee firewall
#!/bin/sh
# правила разрешающие трафик через локальный интерфейс lo0
# будут добавляться автоматически сами при старте фаервола
# 100 allow ip from any to any via lo0
# 200 deny ip from any to 127.0.0.0/8
# 300 deny ip from 127.0.0.0/8 to any# разрешаем все через интерфейс локальной сети
ipfw add 1040 allow ip from any to any via em1
# боимся непонятного
ipfw add 1050 deny ip from any to 192.168.0.0/16 in recv em0
ipfw add 1060 deny ip from 192.168.0.0/16 to any in recv em0
ipfw add 1070 deny ip from any to 172.16.0.0/12 in recv em0
ipfw add 1080 deny ip from 172.16.0.0/12 to any in recv em0
ipfw add 1090 deny ip from any to 10.0.0.0/8 in recv em0
ipfw add 10100 deny ip from 10.0.0.0/8 to any in recv em0
ipfw add 10110 deny ip from any to 169.254.0.0/16 in recv em0
ipfw add 10120 deny ip from 169.254.0.0/16 to any in recv em0# настройка ната
# опции переноса строк «\» надо убрать все должно быть в одну строчку
# опции redirect_port приведены для примера - как делать «проброс портов»
nat 1 config log if em0 reset same_ports deny_in
redirect_port tcp 192.168.5.2:3389 3389
redirect_port udp 192.168.5.3:4444 4444
redirect_port tcp 192.168.5.4:25 25# заварачиваем все что проходит через внешний интерфейс в нат
ipfw add 10130 nat 1 ip from any to any via em0 #
боимся непонятного
ipfw add 65534 deny all from any to anyкогда я пытаюсь запустить скрипт не все правила отрабатывают и соответственно не работает NAT не работает проброс портов
root@NAT:/etc # ./firewall
add: not found 01050 deny ip from any to 192.168.0.0/16 in recv em0
01060 deny ip from 192.168.0.0/16 to any in recv em0
01070 deny ip from any to 172.16.0.0/12 in recv em0
01080 deny ip from 172.16.0.0/12 to any in recv em0
01090 deny ip from any to 10.0.0.0/8 in recv em0
10100 deny ip from 10.0.0.0/8 to any in recv em0
10110 deny ip from any to 169.254.0.0/16 in recv em0
10120 deny ip from 169.254.0.0/16 to any in recv em0
nat: not found
redirect_port: not found
redirect_port: not found
redirect_port: not found
10130 nat 1 ip from any to any via em0 65534 deny ip from any to anyПомогите разобраться в чем проблема где я допустил ошибку
>[оверквотинг удален]
> работает NAT не работает проброс портов
> root@NAT:/etc # ./firewall
> add: not found 01050 deny ip from any to 192.168.0.0/16 in recv
> nat: not found
> redirect_port: not found
> redirect_port: not found
> redirect_port: not found
> 10130 nat 1 ip from any to any via em0 65534 deny
> ip from any to any
> Помогите разобраться в чем проблема где я допустил ошибку1) Вы делаете не по статье. Вы взяли и сделали из /etc/firewall скрипт. Приведенное вами содержимое файла не совпадает с тем, что приведено в статье. При этом вы не знаете, что с этим делать дальше. Вы либо по статье делайте, либо уж говорите о том, чего поняли и что начали делать самостоятельно.
В статье
firewall_enable="YES"
firewall_type="/etc/firewall"прописаны в rc.conf не просто так.
2) Догадавшись, что как скрипт /etc/firewall не работает и что для того, чтобы он работал "как хотите вы, но не как задумал автор статьи", надо в начало строк добавить "ipfw", вы не довели это до конца.3) Вы бы комментарии в примерах читали повнимательнее, а?
Там русским по белому написано про "одну строчку" и "опции переноса строк".
Было:
# опции переноса строк «\» надо убрать все должно быть в одну строчку
# опции redirect_port приведены для примера - как делать «проброс портов»
nat 1 config log if em0 reset same_ports deny_in \
redirect_port tcp 192.168.5.2:3389 3389 \
redirect_port udp 192.168.5.3:4444 4444 \
redirect_port tcp 192.168.5.4:25 25Стало:
nat 1 config log if em0 reset same_ports deny_in
redirect_port tcp 192.168.5.2:3389 3389
redirect_port udp 192.168.5.3:4444 4444
redirect_port tcp 192.168.5.4:25 25Опции переноса строк убраны, а "в одну строчку" - не появилось.
Теперь это 4 (четыре) независимых команды, т.к. /etc/firewall это теперь скрипт, а ipfw перед nat так и не появилось.В целом, на мой взгляд, изначальная проблема есть и в некоторой неприспособленности статьи для "совсем начинающих" - не указано, как запускать файрволл, что заставляет проявлять творческий подход..
Исправил но NAT не работает
# правила разрешающие трафик через локальный интерфейс lo0
# будут добавляться автоматически сами при старте фаервола
# 100 allow ip from any to any via lo0
# 200 deny ip from any to 127.0.0.0/8
# 300 deny ip from 127.0.0.0/8 to any
# разрешаем все через интерфейс локальной сети
ipfw add 1040 allow ip from any to any via em1# боимся непонятного
ipfw add 1050 deny ip from any to 192.168.0.0/16 in recv em0
ipfw add 1060 deny ip from 192.168.0.0/16 to any in recv em0
ipfw add 1070 deny ip from any to 172.16.0.0/12 in recv em0
ipfw add 1080 deny ip from 172.16.0.0/12 to any in recv em0
ipfw add 1090 deny ip from any to 10.0.0.0/8 in recv em0
ipfw add 10100 deny ip from 10.0.0.0/8 to any in recv em0
ipfw add 10110 deny ip from any to 169.254.0.0/16 in recv em0
ipfw add 10120 deny ip from 169.254.0.0/16 to any in recv em0# настройка ната
# опции переноса строк «\» надо убрать все должно быть в одну строчку
# опции redirect_port приведены для примера - как делать «проброс портов»
ipfw nat 1 config log if em0 reset same_ports deny_in redirect_port tcp 192.168.5.2:3389 3389
ipfw nat 1 config log if em0 reset same_ports deny_in redirect_port udp 192.168.5.3:4444 4444
ipfw nat 1 config log if em0 reset same_ports deny_in redirect_port tcp 192.168.5.4:25 25# заварачиваем все что проходит через внешний интерфейс в нат
ipfw add 10130 nat 1 ip from any to any via em0
# боимся непонятного
ipfw add 65534 deny all from any to any
Начните с простого.
А именно нат в 2 команды, первой инстанс ната сконфигурировать на адресе или интерфейсе, другой - запустить нужный трафик в этот инстанс. а потом усложнять, по мере надобности.
Кстати, а gateway_enable="YES" есть (оно же net.inet.ip.forwarding=1)
gateway_enable="YES"в /etc/rc.conf есть
А именно нат в 2 команды, первой инстанс ната сконфигурировать на адресе или интерфейсе, другой - запустить нужный трафик в этот инстанс. а потом усложнять, по мере надобности.
Мене не понятно какие именно правила на добавить чтобы заработал NAT
> firewall_type=«/etc/firewall»firewall_script="/etc/firewall", а у вас ищем метку /etc/firewall в файле /etc/rc.firewall
изменил в /etc/rc.conf
firewall_script="/etc/firewall"NAT всеравно не работает
> gateway_enable="YES"
> в /etc/rc.conf есть
> А именно нат в 2 команды, первой инстанс ната сконфигурировать на адресе
> или интерфейсе, другой - запустить нужный трафик в этот инстанс. а
> потом усложнять, по мере надобности.
> Мене не понятно какие именно правила на добавить чтобы заработал NATубрать всё лишнее.
ipfw -f flush
ipfw nat 1 config if em0 log same_ports
ipfw nat 1 ip from any to any via em0вот так работает?
убрал все из скрипта
/etc/firewallдобавил в скрипт
ipfw -f flush
ipfw nat 1 config if em0 log same_ports
ipfw nat 1 ip from any to any via em0запустил скрипт
#./firewallFlushed all rules.
ipfw nat 1 config if em0 log same ports
ipfw: bad command 'ip'NAT не работает сервак 5.5 не пингуется
#ipfw show65535 1269 116087 deny ip from any to any
>[оверквотинг удален]
> ipfw nat 1 config if em0 log same_ports
> ipfw nat 1 ip from any to any via em0
> запустил скрипт
> #./firewall
> Flushed all rules.
> ipfw nat 1 config if em0 log same ports
> ipfw: bad command 'ip'
> NAT не работает сервак 5.5 не пингуется
> #ipfw show
> 65535 1269 116087 deny ip from any to anyа документацию почитать лень? закралась у меня досадная ошибка, которая и привела к
"ipfw: bad command 'ip' "правильно скрипт читать как
ipfw -f flush
ipfw nat 1 config if em0 log same_ports
ipfw add nat 1 ip from any to any via em0
исправилipfw -f flush
ipfw nat 1 config if em0 log same_ports
ipfw add nat 1 ip from any to any via em0но так тоже ничего не работает шлюз не пингуется
> исправил
> ipfw -f flush
> ipfw nat 1 config if em0 log same_ports
> ipfw add nat 1 ip from any to any via em0
> но так тоже ничего не работает шлюз не пингуетсяОткройте для себя tcpdump.
> исправил
> ipfw -f flush
> ipfw nat 1 config if em0 log same_ports
> ipfw add nat 1 ip from any to any via em0
> но так тоже ничего не работает шлюз не пингуетсячто говорит
sysctl net.inet.ip.forwarding
и
ipfw show
net.inet.ip.forwarding: 1
#ipfw show
00100 nat 1 ip from any to any via em0
65535 deny ip from any to any
> net.inet.ip.forwarding: 1
> #ipfw show
> 00100 nat 1 ip from any to any via em0
> 65535 deny ip from any to anyвот тут прямо так без счетчиков? tcpdump на интерфейсах, и смотреть заголовки.
> net.inet.ip.forwarding: 1
> #ipfw show
> 00100 nat 1 ip from any to any via em0
> 65535 deny ip from any to anyНачните сначала
firewall_enable=«YES»
firewall_nat_enable=«YES»
firewall_nat_interface="em0"
firewall_type=«Open»и добавить в /etc/sysctl.conf
net.inet.ip.fw.one_pass=0.После чего попингуйте из локалки ваши интерфейсы и дайте ваши ipfw -a list
И вообще, зачем свое ядро собирать, заюзать generic, вам ведь в правилах forward то не нужен, а остальное подгрузить модулями
> И вообще, зачем свое ядро собирать, заюзать generic, вам ведь в
> правилах forward то не нужен, а остальное подгрузить модулямиBTW с 9.3 fwd в ядре уже