Страница 1 из 1

FreeBSD 7 Kernel Nat + Squid

Добавлено: 2008-04-02 10:50:33
folax
Привет всем.Помогите пожалуста составить правила для IPFW с натом собраным в ядро.Имееться 2 сетевушки,1 локалка,2 инет,хотелось бы локалку,если это нттр запросы отправлять на сквид,+ позволить принимать и отправлять почту. Вроде перечитал статьи по сотавлению ну чувствую без помощи не обойтись.Всё уже установлено и работоспособно сквид и нат всторенныйц в ядро,остались правила для IPFW.Самое главное хотелось бы понять как в правилах управлять натом? Спасибо. Извиняюсь за вопрос если что не там :oops:

Re: FreeBSD 7 Kernel Nat + Squid

Добавлено: 2008-04-02 10:59:53
dikens3
Сейчас по встроенному NAT немного информации (да и людей) в интернете. Искать ответы нужно в Man'ах.

Re: FreeBSD 7 Kernel Nat + Squid

Добавлено: 2008-04-02 11:03:27
TeXNiC
На форуме пробегало несколько тем по Nat в ipfw, там были примеры правил.

Re: FreeBSD 7 Kernel Nat + Squid

Добавлено: 2008-04-02 11:08:32
folax
В том то и дело ща стоит шлюз с 7 фрёй.И вот с такими правилами:

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

#!/bin/sh
ipfw='/sbin/ipfw -q'
out_if='vr1'
out_ip='192.168.0.111'
local_if='vr0'
local_ip='192.168.1.111'
local_net='192.168.1.0/24'
${ipfw} flush
#Loopback
${ipfw} add 10 allow all from any to any via lo0
#Natd kernel
${ipfw} add 200 nat 1 tcp from ${local_net} to any 80,8080
${ipfw} add 200 nat 1 tcp from any 80,8080 to ${local_net}
${ipfw} add allow tcp from any to me 25,110
${ipfw} add allow tcp from me to any 25,110
${ipfw} add allow all from any to any
В принципе инет пашет и прокся на базе сквида 3 работает.Токо вот почта не принимаецца и не отправляецца. Хочеться полноценный конфиг написать.

Re: FreeBSD 7 Kernel Nat + Squid

Добавлено: 2008-04-02 17:56:52
abanamat
в представленном конфиге нет обраток - типа allow ip from any to ${localnet} out

Re: FreeBSD 7 Kernel Nat + Squid

Добавлено: 2008-04-03 15:20:46
_kirill_
abanamat писал(а):в представленном конфиге нет обраток - типа allow ip from any to ${localnet} out
${ipfw} add allow all from any to any
???

Re: FreeBSD 7 Kernel Nat + Squid

Добавлено: 2008-04-03 15:55:03
folax
Поделитесь если у кого есть рабочий конфиг под 7 фрю и натом встроенным в ядро.

Re: FreeBSD 7 Kernel Nat + Squid

Добавлено: 2008-05-26 15:24:59
nosferaty
а еще лучше подкиньте линк на адекватную доку (можно на английском)
в ман тока не посылайте, смотрел уже, чет не совсем понял, желательно не таким сухим текстом.

Re: FreeBSD 7 Kernel Nat + Squid

Добавлено: 2008-05-26 15:53:15
folax
Вот рабочий конфиг разобрацца я думаю можно и самому.Тоже кстати с форума.

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

#!/bin/sh
ipfw -f flush
oif="rl0"
iif="rl1"
oip="xxx.xxx.xxx.xxx"
iip="192.168.0.1"
dns1="yyy.yyy.yyy.yyy"
#Хождение через loopbask
ipfw add 10 allow all from any to any via lo0

ipfw add 20 fwd 127.0.0.1,3128 tcp from 192.168.0.0/24 to any dst-port 80 via $iif
#------------------------------------------
ipfw nat 1 config if $oif log redirect_port tcp 192.168.0.5:9999 9999
ipfw add 100 nat 1 tcp from any to $oip 9999 via $oif
ipfw add 100 allow tcp from any to 192.168.0.5 9999 via $iif
#------------------------------------------
ipfw nat 2 config if $oif log redirect_port tcp 192.168.0.5:9990 9990
ipfw add 100 nat 2 tcp from any to $oip 9990 via $oif
ipfw add 100 allow tcp from any to 192.168.0.5 9990 via $iif

#------------------------------------------
ipfw nat 3 config if $oif log redirect_port tcp 192.168.0.5:80 80
ipfw add 100 nat 3 tcp from any to $oip 80 via $oif
ipfw add 100 allow tcp from any to 192.168.0.5 80 via $iif

#------------------------------------------
ipfw nat 4 config if $oif log redirect_port tcp 192.168.0.6:7777 7777
ipfw add 200 nat 4 tcp from any to $oip 7777 via $oif
ipfw add 200 allow tcp from any to 192.168.0.6 7777 via $iif

#------------------------------------------
ipfw nat 5 config if $oif log redirect_port tcp 192.168.0.6:7770 7770
ipfw add 200 nat 5 tcp from any to $oip 7770 via $oif
ipfw add 200 allow tcp from any to 192.168.0.6 7770 via $iif

#------------------------------------------
ipfw nat 6 config if $oif log redirect_port tcp 192.168.0.6:7779 7779
ipfw add 200 nat 6 tcp from any to $oip 7779 via $oif
ipfw add 200 allow tcp from any to 192.168.0.6 7779 via $iif

#---------------NAT--------------------------------------
ipfw nat 10 config if $oif
ipfw add 300 nat 10 ip4 from any to any via $oif

#---------------Old config-------------------------------
#Запрет к 255.0.0.0 подсети
ipfw add 400 deny all from any to 127.0.0.0/8
ipfw add 400 deny all from 127.0.0.0/8 to any

#Запрет на наружнем интерфейсе внтреней сети
ipfw add 450 deny all from 192.168.0.0/24 to any via $oif

#Допуск определенных ping'ов
ipfw add 500 allow icmp from any to any in via $oif icmptypes 0,3,8,11
ipfw add 500 allow icmp from any to any out via $oif
ipfw add 500 allow icmp from any to any via $iif

#Запрет сетей
ipfw add 600 deny all from any to 0.0.0.0/8 via $oif
ipfw add 600 deny all from any to 169.254.0.0/16 via $oif
ipfw add 600 deny all from any to 224.0.0.0/4 via $oif
ipfw add 600 deny all from any to 240.0.0.0/4 via $oif

ipfw add 600 deny all from 0.0.0.0/8 to any via $oif
ipfw add 600 deny all from 169.254.0.0/16 to any via $oif
ipfw add 600 deny all from 224.0.0.0/4 to any via $oif
ipfw add 600 deny all from 240.0.0.0/4 to any via $oif

#Разрешения для локалки
ipfw add 700 allow tcp from 192.168.0.0/24 to any via $iif

#Разрешаю ssh 
ipfw add 800 allow tcp from any to any 22 via $iif 

#Разрошение на соединение, не прерывать соединение и получение фрагментир покетов
ipfw add 900 allow all from $oip to any out via $oif setup
ipfw add 910 allow tcp from any to any established
ipfw add 920 allow tcp from any to any frag

#Разрешение DNS
ipfw add 1000 allow udp from $dns1 53 to $oip in via $oif
ipfw add 1000 allow udp from $oip to $dns1 53 keep-state 

#Запрет  NETBIOS 
ipfw add 1100 deny udp from any to any 137,138 via $oif
ipfw add 1100 deny tcp from any to any 135,139 via $oif

#DHCP
#ipfw add 1200 allow udp from any to 192.168.0.1 67 via $iif keep-state

#ssh,smtp,pop,http
ipfw add 1300 allow tcp from any to $oip 22,25,110,80 via $oif setup

#Сброс опознавания
ipfw add 1400 reset tcp from any to $oip 113 via $oif
# FTP
ipfw add 1500 allow tcp from me 21,50000-50100 to any
ipfw add 1500 allow tcp from any to me 21,50000-50100

Re: FreeBSD 7 Kernel Nat + Squid

Добавлено: 2008-05-26 15:58:28
f_andrey
О как раз седня на глаза попалась любопытная статья :idea:

Re: FreeBSD 7 Kernel Nat + Squid

Добавлено: 2008-05-26 17:10:41
dikens3
f_andrey писал(а):О как раз седня на глаза попалась любопытная статья :idea:
Читал уже.

Re: FreeBSD 7 Kernel Nat + Squid

Добавлено: 2008-05-27 23:34:22
Volkoff
А чем статьи с сайта не устраивают? Разжевано все дальше некуда, особенно если комменты читать.
Делал на 7.0 по этим статьям: http://www.lissyara.su/?id=1127 потом http://www.lissyara.su/?id=1375 с учетом http://www.lissyara.su/?id=1536 завелось с полпинка, правда долго мучился с публикацией RDP на другой машине, средствами ядерного ната так и не получилось, поставил из портов socket.

Re: FreeBSD 7 Kernel Nat + Squid

Добавлено: 2008-06-07 7:39:15
XoXoL
Что-то не очень хочет у меня подобная схема работать:
ipfw nat 1 config if $oif log redirect_port tcp 192.168.0.5:9999 9999
ipfw add 100 nat 1 tcp from any to $oip 9999 via $oif
ipfw add 100 allow tcp from any to 192.168.0.5 9999 via $iif
Судя по tcpdump при попытке по аналогии сделать веб-сервак, доступный снаружи, в ответных пакетах не подменяется внутренний серый IP адрес на публичный. Что делаю не так? Может кто-нибудь подробнее рассказать про этот синтаксис конфига ната? Своих мозгов не хватает...
З.Ы. а кто подскажет, как сбрасывать конфиги nat'a? Делаю ipfw -f flush, потом ipfw nat show - так как новые, так и старые конфиги... Помогает только reboot.

Re: FreeBSD 7 Kernel Nat + Squid

Добавлено: 2008-06-07 7:49:00
XoXoL
XoXoL писал(а):Что-то не очень хочет у меня подобная схема работать:
ipfw nat 1 config if $oif log redirect_port tcp 192.168.0.5:9999 9999
ipfw add 100 nat 1 tcp from any to $oip 9999 via $oif
ipfw add 100 allow tcp from any to 192.168.0.5 9999 via $iif
А вот если добавить что-то типа
ipfw add nat 1 tcp from 192.168.0.5 9999 to any ${outports} #то работает :)

Re: FreeBSD 7 Kernel Nat + Squid

Добавлено: 2008-11-14 17:46:01
Meloun
XoXoL писал(а):Что-то не очень хочет у меня подобная схема работать:
Может кто-нибудь подробнее рассказать про этот синтаксис конфига ната? Своих мозгов не хватает...
З.Ы. а кто подскажет, как сбрасывать конфиги nat'a? Делаю ipfw -f flush, потом ipfw nat show - так как новые, так и старые конфиги... Помогает только reboot.
1. Синтаксис конфига встроенного NAT-а весьма подробно расписан тут: man ipfw в секции "NAT"
от себя добавлю. если планируете делать проброс портов для разных сервисов более чем на один адрес, то пишите примерно так:

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

${fwcmd} nat 101 config ip 62.148.xxx.xxx reset same_ports \
		redirect_port tcp 172.30.0.1:1723 1723 \
		redirect_proto gre 172.30.0.1 \
		redirect_port udp 172.30.0.2:53 53 \
		redirect_port tcp 172.30.0.2:53 53

2. Сбросить настройки NAT можно следующим образом (нигде манов не нашел, вычислил методом научного тыка): ipfw nat 101 delete - сбрасывает NAT с номером 101, если поднято несколько натов, то такую конструкцию выполнять для каждого со своим номером. Ниже пример конфига

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

${fwcmd} nat 101 delete
sleep 1
${fwcmd} nat 101 config ip 62.148.xxx.xxx reset same_ports \
		redirect_port tcp 172.30.0.2:1723 1723 \
		redirect_proto gre 172.30.0.2 \
		redirect_port udp 172.30.0.2:53 53 \
		redirect_port tcp 172.30.0.2:53 53 \
ВНИМАНИЕ!!! sleep 1 нужен для задержки после сброса NAT, на практике при эксплуатации без этой задержки очень часто машина глухо висла при передергивании скрипта. (FreeBSD 7.0-RELEASE-p4 i386)

Re: FreeBSD 7 Kernel Nat + Squid

Добавлено: 2008-11-17 13:50:51
Meloun
sleep 1
как выяснилось при более детальном исследовании, со sleep 1 все равно виснет, реже но виснет, увеличение задержки sleep не помогает, все хорошо работает при небольших значениях счетчиков правил в ipfw (т.е. когда трафика отнатилось совсем немного), если трафик прет через сервер, при попытке передернуть скрипт с правилами машина намертво виснет.

В общем странная ситуация получается, такое впечатление, что ядерный NAT еще сыроват.
Кто что думает по этому поводу?

Re: FreeBSD 7 Kernel Nat + Squid

Добавлено: 2008-11-17 14:00:45
manefesto
написать PR?

Re: FreeBSD 7 Kernel Nat + Squid

Добавлено: 2009-02-08 13:57:12
mnz_home
Meloun писал(а):ВНИМАНИЕ!!! sleep 1 нужен для задержки после сброса NAT, на практике при эксплуатации без этой задержки очень часто машина глухо висла при передергивании скрипта. (FreeBSD 7.0-RELEASE-p4 i386)
А если так передергивать?

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

/etc/rc.d/ipfw restart

Re: FreeBSD 7 Kernel Nat + Squid

Добавлено: 2009-05-16 11:51:39
Гость
mnz_home писал(а):
Meloun писал(а):ВНИМАНИЕ!!! sleep 1 нужен для задержки после сброса NAT, на практике при эксплуатации без этой задержки очень часто машина глухо висла при передергивании скрипта. (FreeBSD 7.0-RELEASE-p4 i386)
А если так передергивать?

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

/etc/rc.d/ipfw restart
А если удаленно, то так:

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

/etc/rc.d/ipfw forcerestart

тогда сесия не отвалится :smile: (если конечно конфиг етого не предусматривает)

Re: FreeBSD 7 Kernel Nat + Squid

Добавлено: 2009-08-04 18:55:10
Dolphin_BSD
День добрый.

Скажите а в 7.2-STABLE FreeBSD что-то изменилось что касается НАТ

на 20 серверах jn 5.4 до 7.0 Релизов, работает проброс портов таким образом :

NAT

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

interface rl0
use_sockets yes
dynamic yes
same_ports yes
redirect_port tcp 192.168.168.100:3389 3389

IPFW

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

$cmd 1014 divert natd tcp from 192.168.168.100 to any src-port 3389 out via $eif
$cmd 1015 allow tcp from any to 192.168.168.100 dst-port 3389 in via $eif
$cmd 1016 allow tcp from me to any src-port 3389 out via $eif
Поставил выше упомянутую ФРИ и ломаю голову второй день !
Подскажите как теперь править НАТ, бо как говорили тут выше, "своей башки, уже не хватает"

Спасибо.

Re: FreeBSD 7 Kernel Nat + Squid

Добавлено: 2009-10-19 13:28:22
jetiten

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

ipfw nat 1 config if $oif log redirect_port tcp 192.168.0.5:9999 9999
ipfw add 100 nat 1 tcp from any to $oip 9999 via $oif
ipfw add 100 allow tcp from any to 192.168.0.5 9999 via $iif
На примере вышеописанного попытался сделать аналогичный редирект но с разными портами. не получается( с инета 9999 прокинуть на локальную машинку 192.168.0.5:9998 и обратно. Исходный вариант работает, предложенный мной нет.

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

ipfw nat 1 config if $oif log redirect_port tcp 192.168.0.5:9998 9999
ipfw add 100 nat 1 tcp from any to $oip 9999 via $oif
ipfw add 100 allow tcp from any to 192.168.0.5 9998 via $iif
Подскажите в чем может быть проблема?

Re: FreeBSD 7 Kernel Nat + Squid

Добавлено: 2009-10-20 6:12:03
MASiK
Нууу как бы нату бы и входить и выходить, я бы сделал так

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

ipfw nat 1 config if $oif same_ports redirect_port tcp 192.168.0.5:9998 9999
ipfw add 1 nat 1 ip from 192.168.0.0/24 to any out via $oif
ipfw add 2 nat 1 ip from any to $oip in via $oif