nat: пинги ходят, а транспорт -нет.

syn аватар

уже голову сломал почему может не работать прстой нат
nat on $ext_if from 192.168.1.0/24 to any -> $ext_if
или
nat on $ext_if from 192.168.1.0/24 to any -> $ext_addr
пинги изнутри ходят наружу, а вот tcp сессия создается, а данные не идут и что самое странное ничего не режектится ... tcpdump -n -e -ttt -i pflog0

при этом проверяю так...
pfctl -f /etc/pf.conf
pfctl -F rules
т.е. удаляя все правила, только с натом, ходят пинги, а трансферов по транспортам просто нет.

NetBSD ars 4.0.1_PATCH NetBSD 4.0.1_PATCH (GENERIC) #5: Wed Feb 4 23:00:19 MSK 2009 root@ars:/usr/obj/sys/arch/i386/compile/GENERIC i386

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".
spinore аватар

sysctl -w

sysctl -w net.inet.ip.forwarding=1, да?

У меня NAT работает так:
nat on ppp0 inet proto tcp from nat_users to any -> MY_IP
где nat_users - таблица в угловых скобках.

Для начала выключите всю фильтрацию и сделайте pass on $if inet from any to any (и так для всех интерфейсов), включив NAT. Когда NAT заработает - включайте фильтрацию. Для диагностики можно поставить из портов pftop и смотреть монитор как pftop -s 1 -v rules. C одной консоли запускаете pftop, а с другой выполняете команду на соединение, переключаетесь обратно и смотрите - на каикх правилах засели пакеты (где счётчик увеличился). Мне это помогало, удобнее чем с tcpdump сидеть, вставляя опции log.

Если у вас 2 интерфейса, и вы хотите выпускать по нату внутренних пользователей во вне, то nat нужно делать на _внутреннем_ интерфейсе, а не на внешнем, т.е. что-то типа
nat on $int_if from 192.168.1.0/24 to any -> $ext_if
Могу ошибаться.

syn аватар

>sysctl -w

>sysctl -w net.inet.ip.forwarding=1, да?
да
>nat on $int_if from 192.168.1.0/24 to any -> $ext_if
а так у меня вообще все сломалось, пришлось снаружи заходить.
вообще у меня когда-то вот атк работало, еще со старого конфига, а потом почему-то перестало, давно правда, толко ща наболело уже.
nat on $ext_if from to any -> $ext_if
>pftop -s 1 -v rules
это то же самое что и pfctl -vvvs nat
@0 nat on pppoe0 inet from 192.168.1.0/24 to any -> external
[ Evaluations: 310 Packets: 17 Bytes: 3478 States: 9 ]
правила я и так все удалял, сделав pfctl -F rules, остается только статистика, соединениея и нат таблица, собственно rdr правила у меня работают, а вот что-бы просто ходить из локалки через один ип не выходит.

spinore аватар

Я обычно указываю протоколы

Я обычно указываю протоколы для ната, не знаю насколько это важно. Может быть, вам стоит попробовать.
Вот мой конфиг, всё работает, интерфейс один (одна сетевая):

# cat /etc/pf.conf
rif  = "re0"
lo0  = "lo0"
ppp  = "ppp0"
lh  = "localhost"
rme = "MY_REAL_IP"
rgw = "IP_OF_MY_PPP_SERVER"
pme = "MY_IP_ON_PPP"
table <net_local> persist file "/etc/tables/net_local.net"
table <ssh_local> persist file "/etc/tables/ssh_local.net"
table <nat_users> persist file "/etc/tables/nat_users.net"
table <ssh_inet>  persist file "/etc/tables/ssh_inet.net"
scrub all no-df random-id min-ttl 128
nat on $ppp inet proto {tcp,udp,icmp} from <nat_users> to any -> $pme
block all
block in quick from any os NMAP
antispoof log quick for {$rif,$ppp}
pass in      on $rif inet proto {tcp,udp,icmp} from <nat_users>  to ! $rme
pass in  log on $rif inet proto tcp            from <ssh_local>  to   $rme port ssh
pass out     on $rif inet proto {tcp,udp,icmp} from $rme         to   <net_local>
pass out     on $rif inet proto gre            from $rme         to   $rgw
pass out     on $ppp inet proto {tcp,udp,icmp} from $pme         to   any
pass in  log on $ppp inet proto tcp            from <ssh_inet>   to   $pme port ssh
pass         on $lo0 inet proto {tcp,udp,icmp} from $lh          to   $lh
block inet6

Если соединение не через ppp то всё существенно упрощается. Попробуйте указать proto {tcp,udp,icmp} в правиле NAT.
Если не работает, ставите два правила, которые ловят пакеты до ната и после, и смотрите, что туда попадает. Также, не забудьте филтьтрацию правильной сделать, т.к. по умолчанию всё запрещено и надо разрешить правилами.

Karpenko аватар

Я думаю, история проще. Всё

Я думаю, история проще. Всё работает когда правильно настроено.
Скорее всего нужно проверить маски подсетей.
Почитайте, уверен должно помочь:
http://wiki.netbsd.se/How_to_gather_network_information_on_NetBSD

syn аватар

неа, там все верно иначе

неа, там все верно иначе ничего бы вообще не работало исессия не устанавливалась! а у меня из локалки до яндекса если убрать все правила ходит сигнал.

$telnet  yangex.ru 80
hTrying 77.221.130.10...
Connected to yangex.ru.
Escape character is '^]'.
<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx/0.4.13</center>
</body>
</html>
Connection closed by foreign host.

пока было лениво капаться чего там и где не то, наверно все обновлять буду тогда уже и буду править, а ща пока лениво, с ядром игрался)

Karpenko аватар

А эхо пакетов пингом идёт с

А эхо пакетов пингом идёт с запрашиваемого хоста?

In the ipf.conf you should have:
pass in from any to any
pass out from any to any

You must post into rc.local file following lines:
sysctl -w net.inet.ip.forwarding=1
ipnat -f /etc/ipnat.conf

powertux аватар

Не удалось осилить мне NetBSD

Не удалось осилить мне NetBSD в плане настройки сети. Ядро пересобрал с поддержкой PF, пытаюсь применить конфиг моего PF из OpenBSD, изменяя только наименование сетевых, всеравно не получается получить доступ к интернету через NetBSD :( Именно пинги ходят, а трафик нет.

опция форвардинга стоит, зашита в ядро.
net.inet.ip.forwarding=1

вот мои конфиги для PF:

WAN=rtk0 # beeline lan
LAN=gem0 # my lan
INET=ppp0 # beeline internet over pptp

DC="30001" 
TOR="30002" 

LANIP1="192.168.1.2" 

set skip on lo0 
set skip on $LAN 

nat pass on $WAN inet from any -> $WAN   # ($WAN) пробовал тоже
nat pass on $INET inet from any -> $INET # ($INET) пробовал тоже

rdr pass on $WAN proto { tcp, udp } from any to any port { $DC, $TOR } -> { $LANIP1 } 
rdr pass on $INET proto { tcp, udp } from any to any port { $DC, $TOR} -> { $LANIP1 } 

pass out quick on $WAN inet all keep state 
pass out quick on $INET inet all keep state

В OpenBSD работало все идеально с этим конфигом, за исключением работы самой pptp :(
В NetBSD идеально работает pptp но не понятно мне почему не пускает в интернет машины из моей сети !?

Если у кого есть желание, напишите пожалуйста в соответствии с моим конфигом конфиг для NetBSD а то уже две недели не могу вылезти в интернет из дома.
Двойной нат нужен для того, что-бы пользователь локалки мог быть в интернете и p2p локальной сети провайдера (в идеале не только p2p)...

spinore аватар

Сложно что-то конкретное

Сложно что-то конкретное сказать. Я делал nat on + pass in отедльно через фильтрацию. Мой конфиг некогда обсуждался здесь: http://www.obsd.ru/8/?q=node/160 и проблема была в том, что

Цитата:
Комментарий ENcrypted, Опубликован 08/13/2008 19:39:02

пля! надо и было начинать с того что это NetBSD!

pass proto 47 all keep state.


Короче, в NetBSD нужно gre разрешать принудительно, а в obsd разрешение видимо как-то иначе делается.
C nat'ом лучше разбираться постепенно. Для начала поставьте умолчание: nat on $if inet proto {...} from any to any -> $ip где $if - интерфейс, имеющий доступ в инет (ppp) и ip - имеющий доступ в инет (ip висящий на ppp-интерфейсе). И сделайте pass in и pass out для всего (кажется, директива pass on $if all). Только когда нат с выключенной фильтрацией заработает - включайте фильтрацию.

Karpenko аватар

В NetBSD всё нормально

В NetBSD всё нормально работает. Дело в понимании.
Правильно было сказано, вначале нужно всё включить и проверить - без фильтрации.
Потом повключать все защиты.
Чего тут думать?

Сеть внутрення есть? Пинги где? Хосты видны?
Наружная сеть как? Пинг? Хосты?
NAT включил - проверил.
add default route - ок?
Дальше зафильтровал и всё. 5 минут делов.

Ну не беря во внимание необходимость проверки нормального физического соединения к сети. Там бывает TX работает а RX нет и обратно.

Блин. Как дети малые...

powertux аватар

В том-то и дело что не

В том-то и дело что не малые.
Провайдер: билайн.
Сначала использовал ipf+ipnat
cat /etc/ipnat.conf

map ppp0 192.168.1.0/24 -> MY_INET_IP/32 proxy port ftp ftp/tcp 
map ppp0 192.168.1.0/24 -> MY_INET_IP/32 portmap tcp/udp 10000:60000 
map ppp0 192.168.1.0/24 -> MY_INET_IP/32

cat /etc/ipf.conf

# rules specific to the loopback interface 
pass out quick on lo0 
pass in quick on lo0 

# rules specific to the rtk0 interface 
pass out quick on rtk0 
pass in quick on rtk0 

# rules specific to the gem0 interface 
pass out quick on gem0
pass in quick on gem0
 
# rules specific to the gem0 interface 
pass out quick on ppp0
pass in quick on ppp0

Не помогло!

Потом решил поставить свой конфиг от OpenBSD (который работал как нужно, но на опенке тупит пптп).
cat /etc/pf.conf

WAN=rtk0 # Билайновский ЛАН
LAN=gem0 # Мой ЛАН
INET=ppp0 # Билайновский интернет через ППТП соединение "pppd call beeline"

DC="30001" # Порт для DC++
TOR="30002" # Порт для Torrent

LANIP1="192.168.1.2" # Комп с ВЕНДОЙ в моей сети

set skip on lo0 # Пропускать обработку loopback интерфеса
set skip on $LAN # Пропускать обработку gem0 интерфеса

nat pass on $WAN inet from any -> $WAN # Натить пакеты идущие в локалку билайна (10.х.х.х)
nat pass on $INET inet from any -> $INET # Натить пакеты идущие в интернет билайна

rdr pass on $WAN proto { tcp, udp } from any to any port { $DC, $TOR } -> { $LANIP1 } #Редиректить порты для DC++ и Торрент из локальной сети билайна

rdr pass on $INET proto { tcp, udp } from any to any port { $DC, $TOR} -> { $LANIP1 } 
#Редиректить порты для DC++ и Торрент из интернет сети билайна

pass out quick on $WAN inet all keep state # пропускать трафик в локалку билайна
pass out quick on $INET inet all keep state # пропускать трафик в интернет

Где вы тут увидели блокирование ?

По поводу сети:
Хост Винда видит: локалку мою, локалку прова, шлюз, инет(пинги, трасерт, ICQ)
хост MacOSX видит: локалку мою, локалку прова, шлюз, инет(пинги, трасерт, ICQ)
Шлюз НетБСД видит: хост на винде, локалку прова, инет (целиком)

Роуты:
по умолчанию ИП локалки провайдера, после соединения меняется на ип пптп сессии (адрес статика)

Грешу на ГРЕ, и на кривые дрова для моей встроенной сетевушки gem0 и на ничистую силу!!! )

R.I.P NetBSD 5.0.1/macppc/mykernel(wo/ipv6, wo/font, wo/many drivers for network adapters, wo/scsi pci adapter drivers, w/pf, w/GATEWAY)

Воткнул сетевую РТЛ8169, похоже была битая, пару раз машина жестко ребутнулась и убил NetBSD (симптомы: rc.conf not configured, ошибки файловой системы и тому подобное).
Пока вернусь к ОпенБСД, инет нужен очень. Будет время, поставлю снова :) Очень понравилась работа нетки, но ужастно раздражает ее работа с сеткой на основе ППТП, единственное что из сетевых вещей понравилось, так это стабильная работа pptpclient :)

spinore аватар

Цитата:локалку мою, локалку

Цитата:
локалку мою, локалку прова, шлюз, инет(пинги, трасерт, ICQ)

Значит icq работает? А что тогда не работает? Btw, лучше мануально указывать протоколы в правилах proto {tcp.udp,icmp}, как мне кажется.
Когда что-то не работает, запускаете что-то типа pftop -s 1 и смотрите какие пакеты режутся, в какие правила попадают + tcpdump. Как работает set skip и насколько pf адекватно портирован на NetBSD - не ручаюсь.

powertux аватар

pftop для powerpc в pkgsrc

pftop для powerpc в pkgsrc нету!!!
Не работает только фтп и веб ) Именно странно что ICQ работает :)
Сегодня уже поставил OpenBSD и буду ждать 6-ой ветки NetBSD )

powertux аватар

Но если смотреть tcpdump -i

Но если смотреть tcpdump -i ppp0 -vvv host google.com то пакеты ходят и ничего не режится, и на самом роутере все работает, если честно то я вообще не понял логики работы сетевой подсистемы в НетБСД, кто-то писал о прозрачности... не замеченно )

powertux аватар

Как работает set skip и

Как работает set skip и насколько pf адекватно портирован на NetBSD - не ручаюсь.
выше приводил конфиги ipf+ipnat... настраивал с ними с начала, толку НОЛЬ... с этого-то все и началось, потом на ядре с поддержкой одного проца статранул #modload /usr/lkm/pf.o!, на generic.mp не стартовал :)
и на нем попробовал настроить, с теми правилами что указанны выше, опять ноль, и потом собрал ядро с вшитой поддержкой pf тоже ноль

spinore аватар

На самом деле вместо pftop

На самом деле вместо pftop можно использовать pfctl -s с определёнными флагами, и, кажется, даже можно заставить ежесекунжно обновлять статистику. Как такое может быть... вдруг у вас только udp-трафик пропускается?