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

IPFW+ipfw_nat Не понимаю, что не так

Добавлено: 2010-12-29 22:00:34
VampireNF
Имеется две сетевухи re0 и em0. re0 локальная, имеет IP 169.254.173.254. em смотрит на провайдера и ей IP выдаётся через DHCP. Дело обычное, сделать роутер :) Но не тут то было. Весь веб-трафик ходит через squid, и _только_ этот трафик доходит до интернета. Всё остальное, даже обычные пинги никуда не уходят. Сломал голову в чём проблема. Нат использовал "ядерный" настраивал по статье на сайте Лиса. По выводу ipfw show пакеты ходят на нат, но куда они потом идут я не понимаю. Вообще ничего уже не понимаю. Буду рад за помощь :)

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

# uname -a
FreeBSD makhome.well-com.net 8.1-RELEASE FreeBSD 8.1-RELEASE #0: Sat Dec 25 18:21:03 UTC 2010     root@makhome.well-com.net:/usr/obj/usr/src/sys/MakHome_25122010  i386
Конфиги:

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

rc.conf
font8x14="cp866-8x14"
font8x16="cp866b-8x16"
font8x8="cp866-8x8"
gateway_enable="YES"
hostname="makhome.well-com.net"
ifconfig_em0="DHCP -rxcsum"
#ifconfig_em0="192.168.137.2 netmask 255.255.255.0 -rxcsum"
#defaultrouter="192.168.137.1"
ifconfig_re0="inet 169.254.173.254  netmask 255.255.255.0"
keymap="ru.koi8-r.win"
mousechar_start="3"
nfs_reserved_port_only="NO"
ntpdate_enable="YES"
ntpdate_flags="ru.pool.ntp.org"
rpc_statd_enable="YES"
scrnmap="koi8-r2cp866"
sshd_enable="YES"
linux_enable="YES"
usbd_enable="YES"
moused_enable="NO"
dbus_enable="YES"
hald_enable="YES"
firewall_enable="YES"
firewall_quiet="YES"<--># Set to YES to suppress rule display
firewall_nat_enable="YES"
dummynet_enable="YES"
firewall_script="/root/.firewall/fw_day.conf"
named_enable="YES"
named_flage="-u bind -g bind"
dhcpd_enable="YES"
dhcpd_conf="/usr/local/etc/dhcpd.conf"
dhcpd_ifaces="re0"
apache22_enable="YES"
vsftpd_enable="YES"
vsftpd_flags="/usr/local/etc/vsftpd.conf"
squid_enable="YES"
#NFS
rpcbind_enable="YES"
nfs_server_enable="YES"
nfs_server_flags="-u -t -n 20"
mountd_enable="YES"
mountd_flags="-r -n"

firewall
#!/bin/sh
FwCMD="/sbin/ipfw"           
LanOut="em0"                  
IpOut="me"
LanIn="re0"                   
NetIn="169.254.173.0/24"     
IpIn="169.254.173.254"
${FwCMD} -f flush
${FwCMD} -f pipe flush
${FwCMD} -f queue flush
${FwCMD} add 50 check-state
${FwCMD} add 100 pass all from any to any via lo0
${FwCMD} add 200 deny all from any to 127.0.0.0/8
${FwCMD} add 300 deny ip from 127.0.0.0/8 to any
${FwCMD} add allow ip from any to ${NetIn} in via ${LanIn}
${FwCMD} add allow ip from ${NetIn} to any out via ${LanIn}
${FwCMD} add fwd 127.0.0.1,3128 tcp from ${NetIn} to any 80,8080 via ${LanOut}
${FwCMD} nat 1 config log if ${LanOut} reset same_ports deny_in
${FwCMD} add nat 1 ip from any to any via ${LanOut}
${FwCMD} add allow ip from any to any

Конфиг ядра
#################################
#<----->My addons<-----><------>#
#################################

options><------>IPFIREWALL<---->#enable IPFW
options><------>IPFIREWALL_VERBOSE<---->#enable verbose IPWF
options><------>IPFIREWALL_VERBOSE_LIMIT=1000
options><------>IPFIREWALL_NAT<>#enable "kernel nat"
options><------>LIBALIAS
options><------>IPFIREWALL_FORWARD<---->#enable forwarding
options><------>ROUTETABLES=2
options><------>DUMMYNET<------>#enable shaper
options><------>IPDIVERT<------>#enable divert pockets, ex. to natd

Re: IPFW+ipfw_nat Не понимаю, что не так

Добавлено: 2010-12-29 23:05:55
terminus

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

ifconfig em0 -rxcsum -txcsum

Re: IPFW+ipfw_nat Не понимаю, что не так

Добавлено: 2010-12-30 1:13:15
VampireNF
terminus писал(а):

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

ifconfig em0 -rxcsum -txcsum
Не помогло. К тому же, на сколько я понял, "ifconfig em0 -rxcsum" отключает за одно и txcsum. Потому что в выводе ifconfig`а проподают и RX и ТХ.

Re: IPFW+ipfw_nat Не понимаю, что не так

Добавлено: 2010-12-30 1:22:25
VampireNF
Только что попробовал обычный natd со следующей конфигурацией

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

natd.sh
#!/bin/sh
/sbin/natd -f /usr/local/etc/natd.conf -n em0 -dynamic -p 8668

natd.conf
same_ports yes
use_sockets yes

Результат тот же. Работает только то, что ходит через squid. Всё остальное не работает. Странно, весь день убил :st:

Re: IPFW+ipfw_nat Не понимаю, что не так

Добавлено: 2010-12-30 3:26:57
VampireNF
Вот новая моя попытка, включил в rc.conf межсетевой экран типа "open", указав, что НАТ(ядерный) тоже включить и указал ему интерфейс. Результат - всё то же самое. С сервера всё хорошо ходит, на из-за отсутствия squid`a в данном конфиге, теперь вообще ничего не заработало. Вернулся к конфигу указанному в первом посте. Вот, к стати, что Винда говорит:

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

>ping ya.ru

Обмен пакетами с ya.ru [93.158.134.3] с 32 байтами данных:
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.

Статистика Ping для 93.158.134.3:
    Пакетов: отправлено = 4, получено = 0, потеряно = 4
    (100% потерь)

>ping 169.254.173.254
Обмен пакетами с 169.254.173.254 по с 32 байтами данных:
Ответ от 169.254.173.254: число байт=32 время<1мс TTL=128
Ответ от 169.254.173.254: число байт=32 время<1мс TTL=128
Ответ от 169.254.173.254: число байт=32 время<1мс TTL=128
Ответ от 169.254.173.254: число байт=32 время<1мс TTL=128

Статистика Ping для 169.254.173.254:
    Пакетов: отправлено = 4, получено = 4, потеряно = 0
    (0% потерь)
Приблизительное время приема-передачи в мс:
    Минимальное = 0мсек, Максимальное = 0 мсек, Среднее = 0 мсек

>ping ya.ru

Обмен пакетами с ya.ru [213.180.204.3] с 32 байтами данных:
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.
Превышен интервал ожидания для запроса.

Статистика Ping для 213.180.204.3:
    Пакетов: отправлено = 4, получено = 0, потеряно = 4
    (100% потерь)

Всё забываю сказать, что уан_пасс выставлен в ноль.

Re: IPFW+ipfw_nat Не понимаю, что не так

Добавлено: 2010-12-31 0:09:42
VampireNF
Ну чувствуется под Новый Год тут мало кто будет, однако я всё таки продолжу, мало ли найдётся Спаситель :)
Добавил в правило ната журналирование и сделал пинг, вот что выплыло в журнале:

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

Dec 30 21:05:51 makhome kernel: ipfw: 650 Nat ICMP:8.0 169.254.173.1 93.158.134.3 out via em0
Dec 30 21:05:51 makhome kernel: ipfw: 650 Nat ICMP:0.0 93.158.134.3 10.10.120.157 in via em0
Не знаю, но по моему пакт с пингом дошёл до Яндекса и вернулось эхо, однако это эхо не доходит обратно до компьютера с которого был инициирован пинг. И выводит ли лог ната демаскировку?

Re: IPFW+ipfw_nat Не понимаю, что не так

Добавлено: 2010-12-31 0:19:42
VampireNF
Не большое дополнение, ввёл ещё журналирование на правило allow any to any после ната, по логам, на сколько я понимаю, пакт теряется после того как попал в нат для демаскировки.

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

Dec 30 21:15:25 makhome kernel: ipfw: 750 Accept ICMP:8.0 169.254.173.1 93.158.134.3 in via re0
Dec 30 21:15:25 makhome kernel: ipfw: 650 Nat ICMP:8.0 169.254.173.1 93.158.134.3 out via em0
Dec 30 21:15:25 makhome kernel: ipfw: 750 Accept ICMP:8.0 10.10.120.157 93.158.134.3 out via em0
Dec 30 21:15:25 makhome kernel: ipfw: 650 Nat ICMP:0.0 93.158.134.3 10.10.120.157 in via em0
Dec 30 21:15:25 makhome kernel: ipfw: 750 Accept ICMP:0.0 93.158.134.3 169.254.173.1 in via em0

Re: IPFW+ipfw_nat Не понимаю, что не так

Добавлено: 2010-12-31 2:50:42
VampireNF
Проверил ещё и tcpdump`ом:

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

makhome# tcpdump -n -i em0 icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on em0, link-type EN10MB (Ethernet), capture size 96 bytes
23:48:50.137187 IP 10.10.120.157 > 87.250.251.3: ICMP echo request, id 256, seq 54, length 40
23:48:50.146756 IP 87.250.251.3 > 10.10.120.157: ICMP echo reply, id 256, seq 54, length 40
23:48:54.653890 IP 10.10.120.157 > 87.250.251.3: ICMP echo request, id 256, seq 55, length 40
23:48:54.663759 IP 87.250.251.3 > 10.10.120.157: ICMP echo reply, id 256, seq 55, length 40
23:48:59.654949 IP 10.10.120.157 > 87.250.251.3: ICMP echo request, id 256, seq 56, length 40
23:48:59.664669 IP 87.250.251.3 > 10.10.120.157: ICMP echo reply, id 256, seq 56, length 40
23:49:04.656032 IP 10.10.120.157 > 87.250.251.3: ICMP echo request, id 256, seq 57, length 40
23:49:04.665595 IP 87.250.251.3 > 10.10.120.157: ICMP echo reply, id 256, seq 57, length 40

makhome# tcpdump -n -i re0 icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on re0, link-type EN10MB (Ethernet), capture size 96 bytes
23:50:42.176851 IP 169.254.173.1 > 87.250.251.3: ICMP echo request, id 256, seq 63, length 40
23:50:43.409579 IP 169.254.173.1 > 87.250.251.3: ICMP echo request, id 256, seq 64, length 40


Re: IPFW+ipfw_nat Не понимаю, что не так

Добавлено: 2010-12-31 3:33:56
VampireNF
:st:

Re: IPFW+ipfw_nat Не понимаю, что не так

Добавлено: 2010-12-31 4:05:14
FreeBSP
про сквид расскажи

Re: IPFW+ipfw_nat Не понимаю, что не так

Добавлено: 2010-12-31 14:32:26
VampireNF
А что про него рассказывать? :) Он запущен прозрачным. На него перегоняется только WEB трафик идущий через 80 или 8080 порты. Если убрать правило перенаправления в межсетевом экране и убить сквид, то результат будет уже понятным. Ничего не работает. Ничего. На сколько я понял из всех этих tcpdump`ов и просмотра журналов МЭ, то пакет после демаскировки проходит по разрешающему правилу и уходит из МЭ. Дальше, как я понимаю, ОС должна этот пакет с em0 перенаправить на re0, но где-то тут пакет теряется. :st:

Re: IPFW+ipfw_nat Не понимаю, что не так

Добавлено: 2011-01-01 12:54:09
Kos
покажите наконец-то вывод:

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

#ipfw show

Re: IPFW+ipfw_nat Не понимаю, что не так

Добавлено: 2011-01-03 0:20:04
VampireNF
Извините, как-то не подумал, что стоит выложить это. К этому времени конфиг не много изменился. Вот он:

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

firewall
#!/bin/sh
FwCMD="/sbin/ipfw"           
LanOut="em0"                  
IpOut="me"
LanIn="re0"                   
NetIn="169.254.173.0/24"     
IpIn="169.254.173.254"
${FwCMD} -f flush
${FwCMD} -f pipe flush
${FwCMD} -f queue flush
${FwCMD} add 50 check-state
${FwCMD} add 100 pass all from any to any via lo0
${FwCMD} add 200 deny all from any to 127.0.0.0/8
${FwCMD} add 300 deny ip from 127.0.0.0/8 to any
${FwCMD} add allow ip from any to ${IpIn} 22 in via ${LanIn}
${FwCMD} add allow log ip from any to any via ${LanIn}
${FwCMD} add fwd 127.0.0.1,3128 log tcp from ${NetIn} to any 80,8080 via ${LanOut}
${FwCMD} nat 1 config log if ${LanOut} reset same_ports deny_in
${FwCMD} add nat 1 log ip4 from ${NetIn} to any via ${LanOut} out
${FwCMD} add nat 1 log ip4 from any to me via ${LanOut} in
${FwCMD} add allow ip from any to any
Ну и вывод "ipfw show":

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

# ipfw show
00050       0          0 check-state
00100    1945     254525 allow ip from any to any via lo0
00200       0          0 deny ip from any to 127.0.0.0/8
00300       0          0 deny ip from 127.0.0.0/8 to any
00400   15757     851487 allow ip from any to 169.254.173.254 dst-port 22 in via re0
00500 1467334 1159330505 allow log logamount 1000 ip from any to any via re0
00600  489716   96552242 fwd 127.0.0.1,3128 log logamount 1000 tcp from 169.254.173.0/24 to any dst-port 80,8080 via em0
00700   12910     652931 nat 1 log logamount 1000 ip4 from 169.254.173.0/24 to any via em0 out
00800  797677 1000082703 nat 1 log logamount 1000 ip4 from any to me via em0 in
00900 2269425 1182756821 allow log logamount 1000 ip from any to any
65535       0          0 deny ip from any to any


Re: IPFW+ipfw_nat Не понимаю, что не так

Добавлено: 2011-01-03 0:51:04
VampireNF
И ещё в догонку:

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

#netstat -nr
Routing tables

Internet:
Destination        Gateway            Flags    Refs      Use  Netif Expire
default            10.10.112.1        UGS        33  1138715    em0
10.10.112.0/20     link#1             U           0      533    em0
10.10.120.157      link#1             UHS         0        0    lo0
127.0.0.1          link#6             UH          0      984    lo0
169.254.173.0/24   link#3             U           3   937320    re0
169.254.173.254    link#3             UHS         0        1    lo0

Re: IPFW+ipfw_nat Не понимаю, что не так

Добавлено: 2011-01-03 22:56:52
armadex
лучше юзай ng_nat если что стучи в аську, а вообще фаер у тебя закрытый так что смотри в log что и где не проходит

Re: IPFW+ipfw_nat Не понимаю, что не так

Добавлено: 2011-01-03 23:26:39
VampireNF
Как закрытый? По мне так открытей не куда :) Всё куда хочешь и от куда хочешь ходит :) Проблема как раз в том, что судя по логам и tcpdump`у НАТ отрабатывает на отлично, пакет натиться и уходит в Интернет. И приходя из Интернета он тоже натиться, и выходит из МЭ по разрешающему правилу (разрешить всё и всем), и, как я понимаю всю эту систему, он попадает в ОС, в которой перед пактом ставиться вопрос "Ты ко мне или нет?", пакет должен ответить "нет" и ОС должна его промаршрутизировать на второй интерфейс, где этот злощастный пакет снова попадает в МЭ. Но этого всего по каким-то не ведомым мне причинам не происходит. Я себе уже мозг вскипятил просто ищя эту причину. Не знаю чем мне поможет нетграфоский нат, я пробовал старый добрый натд, но и он не заработал. Та же проблема если стартануть штатный скрипт в режиме "ОПЕН" с включённым натом. Я уже просто не знаю куда копать, а гуру молчат :)

Re: IPFW+ipfw_nat Не понимаю, что не так

Добавлено: 2011-01-04 2:56:19
hranitel_y2k
Начните с простого, вместо
${FwCMD} add nat 1 log ip4 from ${NetIn} to any via ${LanOut} out
${FwCMD} add nat 1 log ip4 from any to me via ${LanOut} in
Вот это

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

${FwCMD} add nat 1 ip from any to any via ${LanOut}
А потом уже будете усложнять...

Re: IPFW+ipfw_nat Не понимаю, что не так

Добавлено: 2011-01-04 3:56:20
VampireNF
hranitel_y2k писал(а):Начните с простого, вместо
${FwCMD} add nat 1 log ip4 from ${NetIn} to any via ${LanOut} out
${FwCMD} add nat 1 log ip4 from any to me via ${LanOut} in
Вот это

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

${FwCMD} add nat 1 ip from any to any via ${LanOut}
А потом уже будете усложнять...
В данный момент так и стоит. Да собственно говоря так и было с самого начала. Толку-то :pardon:

Re: IPFW+ipfw_nat Не понимаю, что не так

Добавлено: 2011-01-04 13:26:58
hranitel_y2k
Честно говоря, меня немного смущает ваш диапазон для внутреннего интерфейса. Покопался в гугле и вот что нашел:
http://www.opennet.ru/openforum/vsluhfo ... 85080.html

Может проблема в этом? Не пробовали внутренний диапазон на что-то более стандартное менять? Для теста используйте хотя бы сеть класса С.

Re: IPFW+ipfw_nat Не понимаю, что не так

Добавлено: 2011-01-04 14:37:53
VampireNF
hranitel_y2k писал(а):Честно говоря, меня немного смущает ваш диапазон для внутреннего интерфейса. Покопался в гугле и вот что нашел:
http://www.opennet.ru/openforum/vsluhfo ... 85080.html

Может проблема в этом? Не пробовали внутренний диапазон на что-то более стандартное менять? Для теста используйте хотя бы сеть класса С.
Честно говоря я уже и сам почти созрел до такого умозаключения. Но есть реально рабочая машина с 6-ой FreeBSD которую 169.254.173.0/24 никоим образом не напрягает :) Но Вам собственно большое спасибо за, наконец-то, дельный совет :) По той ссылке которую Вы дали там человек сырец переделал, ну мне до фанатизма данная подсеть не нужна, так что попробую поменять.

Re: IPFW+ipfw_nat Не понимаю, что не так

Добавлено: 2011-01-04 14:45:22
hranitel_y2k
Всегда пожалуйста:)
Как раз в той ссылке написано,что на 6.0 сие великолепно работает,а вот уже на 7.1 и выше нет. Для совместимости с RFC переписали видимо.

Re: IPFW+ipfw_nat Не понимаю, что не так

Добавлено: 2011-01-04 15:18:45
VampireNF
Только что переделал все конфиги под сеть 192.168.173.0/24. После ребута всё заработало. Ещё раз спасибо. Вот что значит не знание RFC :oops: