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

Исходное сообщение
"FreeBSD не работает NAT"

Отправлено noris , 18-Янв-15 13:15 
Добрый день коллеги Решил настроить на шлюзе с 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 fireall

ee 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

Помогите разобраться в чем проблема где я допустил ошибку


Содержание

Сообщения в этом обсуждении
"FreeBSD не работает NAT"
Отправлено PavelR , 18-Янв-15 14:05 
>[оверквотинг удален]
> работает 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 так и не появилось.

В целом, на мой взгляд, изначальная проблема есть и  в некоторой неприспособленности статьи для "совсем начинающих" - не указано, как запускать файрволл, что заставляет проявлять творческий подход..


"FreeBSD не работает NAT"
Отправлено noris , 18-Янв-15 15:20 
Исправил но 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


"FreeBSD не работает NAT"
Отправлено gfd , 18-Янв-15 16:25 
Начните с простого.
А именно нат в 2 команды, первой инстанс ната сконфигурировать на адресе или интерфейсе, другой - запустить нужный трафик в этот инстанс. а потом усложнять, по мере надобности.
Кстати, а gateway_enable="YES" есть (оно же net.inet.ip.forwarding=1)

"FreeBSD не работает NAT"
Отправлено noris , 18-Янв-15 16:40 
gateway_enable="YES"

в /etc/rc.conf есть

А именно нат в 2 команды, первой инстанс ната сконфигурировать на адресе или интерфейсе, другой - запустить нужный трафик в этот инстанс. а потом усложнять, по мере надобности.

Мене не понятно какие именно правила на добавить  чтобы заработал NAT


"FreeBSD не работает NAT"
Отправлено Сергей , 18-Янв-15 16:56 
> firewall_type=«/etc/firewall»

firewall_script="/etc/firewall", а у вас ищем метку /etc/firewall в файле /etc/rc.firewall


"FreeBSD не работает NAT"
Отправлено noris , 18-Янв-15 17:12 
изменил в /etc/rc.conf

firewall_script="/etc/firewall"

NAT всеравно не работает


"FreeBSD не работает NAT"
Отправлено gfd , 18-Янв-15 18:03 
> 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

вот так работает?


"FreeBSD не работает NAT"
Отправлено noris , 18-Янв-15 18:25 
убрал все из скрипта
/etc/firewall

добавил в скрипт

ipfw -f flush
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


"FreeBSD не работает NAT"
Отправлено gfd , 18-Янв-15 19:30 
>[оверквотинг удален]
> 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


"FreeBSD не работает NAT"
Отправлено noris , 18-Янв-15 19:54 
исправил

ipfw -f flush
ipfw nat 1 config if em0 log same_ports
ipfw add nat 1 ip from any to any via em0

но так тоже ничего не работает шлюз не пингуется


"FreeBSD не работает NAT"
Отправлено PavelR , 18-Янв-15 20:18 
> исправил
> ipfw -f flush
> ipfw nat 1 config if em0 log same_ports
> ipfw add nat 1 ip from any to any via em0
> но так тоже ничего не работает шлюз не пингуется

Откройте для себя tcpdump.


"FreeBSD не работает NAT"
Отправлено gfd , 18-Янв-15 20:18 
> исправил
> 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


"FreeBSD не работает NAT"
Отправлено noris , 18-Янв-15 20:25 
net.inet.ip.forwarding: 1


#ipfw show
00100 nat 1 ip from any to any via em0
65535 deny ip from any to any


"FreeBSD не работает NAT"
Отправлено gfd , 18-Янв-15 20:34 
> 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 на интерфейсах, и смотреть заголовки.


"FreeBSD не работает NAT"
Отправлено Сергей , 18-Янв-15 21:50 
> 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


"FreeBSD не работает NAT"
Отправлено Сергей , 18-Янв-15 21:53 
И вообще, зачем свое ядро собирать, заюзать generic, вам ведь в правилах forward то не нужен, а остальное подгрузить модулями

"FreeBSD не работает NAT"
Отправлено gfd , 19-Янв-15 11:22 
>  И вообще, зачем свое ядро собирать, заюзать generic, вам ведь в
> правилах forward то не нужен, а остальное подгрузить модулями

BTW с 9.3 fwd в ядре уже