Привет!
Есть следующая проблемка - ядерный нат не пробрасывает порт. Всё по этому мануалу:
http://www.lissyara.su/articles/freebsd/tuning/ipfw_nat/
Вот конфиги:1. Ядро:
#my options
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=10
options IPFIREWALL_FORWARD
options IPFIREWALL_NAT
options DUMMYNET
options LIBALIAS
options IPSEC
device crypto
options IPSEC_DEBUG
options IPSEC_FILTERTUNNEL
#######
2. rc.conf:
hostname="testfree"
gateway_enable="YES"
#outside net
ifconfig_em0="inet 192.168.0.249 netmask 255.255.255.0 -rxcsum -txcsum -tso"
#inside net
ifconfig_em1="inet 192.168.10.249 netmask 255.255.255.0 -rxcsum -txcsum -tso"defaultrouter="192.168.0.209"
firewall_enable="YES"
firewall_script="/etc/test.fw"
firewall_nat_enable="YES"
dummynet_enable="YES"3. /etc/test.fw :
#!/bin/sh
ipfw -f flush
cmd="/sbin/ipfw add"
out_if="192.168.0.249"
in_if="192.168.10.249"$cmd allow all from any to any via em1
$cmd allow all from me to 192.168.0.153 via em0
$cmd allow all from 192.168.0.153 to me
ipfw nat 1 config log if em0 reset same_ports deny_in redirect_port tcp 192.168.10.154:3389 3389
$cmd deny all from any to any4./etc/sysctl.conf:
net.inet.ip.fw.one_pass=1Конфигурация тестовая. 9-я фря. Для проверки пробрасываем порт rdp на машину 192.168.10.154. C указанным конфигом - не работает :( Если ставлю например rinetd - чудесно пробрасывает...
Вопрос из разряда ЧЯДНТ. Ткните плз, где ошибка? Уже мозг плывёт.
>[оверквотинг удален]
> $cmd allow all from 192.168.0.153 to me
> ipfw nat 1 config log if em0 reset same_ports deny_in redirect_port tcp
> 192.168.10.154:3389 3389
> $cmd deny all from any to any
> 4./etc/sysctl.conf:
> net.inet.ip.fw.one_pass=1
> Конфигурация тестовая. 9-я фря. Для проверки пробрасываем порт rdp на машину 192.168.10.154.
> C указанным конфигом - не работает :( Если ставлю например rinetd
> - чудесно пробрасывает...
> Вопрос из разряда ЧЯДНТ. Ткните плз, где ошибка? Уже мозг плывёт.С какого ip подключаетесь к 192.168.0.249:3389?
> С какого ip подключаетесь к 192.168.0.249:3389?Со 192.168.0.153. Разрешающее правило есть.
>[оверквотинг удален]
> $cmd allow all from 192.168.0.153 to me
> ipfw nat 1 config log if em0 reset same_ports deny_in redirect_port tcp
> 192.168.10.154:3389 3389
> $cmd deny all from any to any
> 4./etc/sysctl.conf:
> net.inet.ip.fw.one_pass=1
> Конфигурация тестовая. 9-я фря. Для проверки пробрасываем порт rdp на машину 192.168.10.154.
> C указанным конфигом - не работает :( Если ставлю например rinetd
> - чудесно пробрасывает...
> Вопрос из разряда ЧЯДНТ. Ткните плз, где ошибка? Уже мозг плывёт.вобщем помимо конфига ната его еще нужно добавить в ipfw, ipfw add nat 1 ip from any to any via em0
> вобщем помимо конфига ната его еще нужно добавить в ipfw, ipfw add
> nat 1 ip from any to any via em0Добавлял. Эффект нулевой.
testfree# ipfw list
00100 allow ip from any to any via em1
00200 allow ip from me to 192.168.0.153 via em0
00300 allow ip from 192.168.0.153 to me
00400 allow ip from 192.168.10.154 to me
00500 allow ip from me to 192.168.10.154
00600 nat 1 ip from any to any via em0
00700 deny ip from any to anytestfree# ipfw nat show
nat 1: icmp=1, udp=28, tcp=8, sctp=0, pptp=0, proto=0, frag_id=0 frag_ptr=0 / tot=37
>[оверквотинг удален]
> testfree# ipfw list
> 00100 allow ip from any to any via em1
> 00200 allow ip from me to 192.168.0.153 via em0
> 00300 allow ip from 192.168.0.153 to me
> 00400 allow ip from 192.168.10.154 to me
> 00500 allow ip from me to 192.168.10.154
> 00600 nat 1 ip from any to any via em0
> 00700 deny ip from any to any
> testfree# ipfw nat show
> nat 1: icmp=1, udp=28, tcp=8, sctp=0, pptp=0, proto=0, frag_id=0 frag_ptr=0 / tot=37если вобщем то проще будет сделать
ipfw nat 1 config ip 192.168.10.249 redirect_port tcp 192.168.10.154:3389 192.168.0.249:3389
ipfw add nat 1 ip from any to any
ipfw add deny ip from any to any
оно заработает и отсюда дальше набрасывать правила, от простого к сложному, если нужно только, чтоб 192.168.0.153 ходил на 192.168.10.154 rdp, то правила примут видipfw nat 1 config ip 192.168.10.249 redirect_port tcp 192.168.10.154:3389 192.168.0.249:3389
ipfw add nat 1 tcp from 192.168.0.153 to 192.168.0.249 in recv em0
ipfw add nat 1 tcp from 192.168.10.154 to 192.168.0.153 out xmit em0
ipfw add nat 1 tcp from 192.168.10.154 to 192.168.10.249 in recv em1
ipfw add nat 1 tcp from 192.168.0.153 to 192.168.10.154 out xmit em1
ipfw add deny ip from any to any
> если вобщем то проще будет сделать
> ipfw nat 1 config ip 192.168.10.249 redirect_port tcp 192.168.10.154:3389 192.168.0.249:3389C таким правилом нат вообще вырубается, машину 192.168.10.154 никуда не пускает.
> ipfw add nat 1 ip from any to anyтут бы добавить via em0 - без этого не работает
> ipfw add deny ip from any to any
> оно заработает и отсюда дальше набрасывать правила, от простого к сложному, если
> нужно только, чтоб 192.168.0.153 ходил на 192.168.10.154 rdp, то правила примут
> вид
> ipfw nat 1 config ip 192.168.10.249 redirect_port tcp 192.168.10.154:3389 192.168.0.249:3389Не работает при таком раскладе ни нат ни проброс...
>[оверквотинг удален]
> testfree# ipfw list
> 00100 allow ip from any to any via em1
> 00200 allow ip from me to 192.168.0.153 via em0
> 00300 allow ip from 192.168.0.153 to me
> 00400 allow ip from 192.168.10.154 to me
> 00500 allow ip from me to 192.168.10.154
> 00600 nat 1 ip from any to any via em0
> 00700 deny ip from any to any
> testfree# ipfw nat show
> nat 1: icmp=1, udp=28, tcp=8, sctp=0, pptp=0, proto=0, frag_id=0 frag_ptr=0 / tot=37Выдержка из man ipfw:
allow | accept | pass | permit
Allow packets that match rule. The search terminates.Вас ничего не смущает ?
>[оверквотинг удален]
> dummynet_enable="YES"
> 3. /etc/test.fw :
> #!/bin/sh
> ipfw -f flush
> cmd="/sbin/ipfw add"
> out_if="192.168.0.249"
> in_if="192.168.10.249"
> $cmd allow all from any to any via em1
> $cmd allow all from me to 192.168.0.153 via em0
> $cmd allow all from 192.168.0.153 to meСрабатывает это правило и дальше до ната не доходит. Неужели в выводе команды ipfw -d show не видно по кол-ву байт? Сначала направляете трафик в нат, а потом разрешающие.
Обратите внимание на deny_in, которые добавляет нюансы в прохождение правил с НАТом.
> ipfw nat 1 config log if em0 reset same_ports deny_in redirect_port tcp
> 192.168.10.154:3389 3389
> $cmd deny all from any to any
> 4./etc/sysctl.conf:
> net.inet.ip.fw.one_pass=1
> Конфигурация тестовая. 9-я фря. Для проверки пробрасываем порт rdp на машину 192.168.10.154.
> C указанным конфигом - не работает :( Если ставлю например rinetd
> - чудесно пробрасывает...
> Вопрос из разряда ЧЯДНТ. Ткните плз, где ошибка? Уже мозг плывёт.
Спасибо огромное!
На тестовой конфигурации всё заработало.. Но..
Делаю похожие правила на резервном шлюзе, привожу фаерволл до следующего вида:#!/bin/sh
ipfw -f flush
cmd="/sbin/ipfw add"
host="82.207.116.20"
pif="tun0"#Allow localnet
$cmd allow all from any to any via nfe0ipfw nat 1 config log if tun0 reset same_ports deny_in redirect_port tcp 192.168.0.49:3389 3389
ipfw add nat 1 ip from any to any via tun0
$cmd allow ip from any to any
И проброс по-прежнему не работает.. Собственно, из-за этого и была сделана тестовая конфигурация.
Может проблема в том что соединение установлено по pppoe? Но внешний интерфейс указан правильно - tun0.Вот rc.conf:
gateway_enable="YES"
ifconfig_nfe0="inet 192.168.0.209 netmask 255.255.255.0 -rxcsum -txcsum -tso" #inside net
firewall_enable="YES"
firewall_script="/etc/f_test.fw"
firewall_nat_enable="YES"
dummynet_enable="YES"ppp_enable="YES"
ppp_mode="ddial"
#ppp_nat="YES"
ppp_profile="ukrtel"
Вот вывод ipfw show:
gate2 ipfw -d show
00100 74131 61592365 allow ip from any to any via nfe0
00200 77427 56664711 nat 1 ip from any to any via tun0
00300 220 26928 allow ip from any to any
65535 32 6132 deny ip from any to any
gate# ipfw nat 1 show
nat 1: icmp=9, udp=86, tcp=362, sctp=0, pptp=0, proto=0, frag_id=0 frag_ptr=0 / tot=457
>[оверквотинг удален]
>
> gate2 ipfw -d show
> 00100 74131 61592365 allow ip from any to any via nfe0
> 00200 77427 56664711 nat 1 ip from any to any via tun0
> 00300 220 26928 allow ip from any
> to any
> 65535 32 6132 deny ip
> from any to any
> gate# ipfw nat 1 show
> nat 1: icmp=9, udp=86, tcp=362, sctp=0, pptp=0, proto=0, frag_id=0 frag_ptr=0 / tot=457$cmd allow all from any to any via nfe0 уберите
Пакеты из локальной сети попадают на allow и не попадают на nat
allow должны быть ПОСЛЕ NAT
http://nuclight.livejournal.com/124348.html