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

pf маршрутизация

Добавлено: 2011-08-18 9:23:28
libbkmz.dev
Приветствую. Вчера долго и упорно разбирался с pf ну никак не смог его заставить делать то что мне нужно, а нужно мне следующее.
У меня есть интернет по ng0 интерфейсу, и еще есть tap0 с OpenVPN. При соединении с ним у меня прописываются маршруты на некоторые сайты через впнку, дефолтный шлюз остается на ng0. Все замечательно все довольны. Но, так как у меня внешний ип, и сервер выполняет роль веб-сервера и не только, то вчера обьявился косяк. Если к примеру example.org прописать через tap0, то все работает замечательно, но если приходит любой пакет с адресом источника = example.org то все ломается, пакет приходит на ng0 и видя что такой адрес назначения прописан у меня в таблице маршрутизации, делает вывод и идет через tap0 что соответсвенно дает нерабочую схему. Вчера пытался заставить через pf пакеты которые пришли с ng0 отправлять их туда же. Но ничего не смог.
Давно у меня стоял ipfw и там я подобное сделал

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

${fwcmd} add 100 forward tun0 ip from ${inet_ip} to table\(3\) out xmit ${lif}
А теперь мой конфиг pf.conf:

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

ext_if="ng0"                                                    #Внешний интерфейс (смотрит к провайдеру WAN)
int_if="re0"                                                    #Внутренний интерфейс (смотрит в нашу сеть LAN)
int_net="192.168.1.0/24"
ext_gw="109.195.67.254"

vpn_if="tap0"

# using () for dynamicly change IP adress by pf, without reloading rules


#set loginterface $ext_if                                       #собираем статистику на внешнем фейсе
                                                                # Для просмотра статистики используется команда pfctl -s info или pfctl -si

set skip on lo0                                                 #пропускаем проверку на петле
scrub in all                                                    #собираем все части пакета перед отправкой

scrub on $ext_if all no-df max-mss 1400
scrub on $int_if all no-df max-mss 1400

nat on $ext_if from !($ext_if) -> ($ext_if:0) static-port
nat    on $vpn_if from $int_if:network -> ($vpn_if) static-port

rdr pass on $ext_if proto {tcp,udp} to ($ext_if) port 7000:7010 -> 192.168.1.100
rdr pass on $ext_if proto {tcp,udp} to ($ext_if) port 9870:9880 -> 192.168.1.62
rdr pass on $ext_if proto {tcp,udp} to ($ext_if) port 8760:8770 -> 192.168.1.110

rdr pass on $ext_if proto {tcp,udp} to ($ext_if) port 8770:8780 -> 192.168.1.111

rdr-anchor "miniupnpd"
anchor "miniupnpd"

#block all                                                      #запретим все отовсюду

pass in log on $ext_if 
pass out log on $vpn_if 

# for UPnP
pass out on $int_if from any to 239.0.0.0/8 keep state
pass in on $int_if from any to 239.0.0.0/8 keep state

pass in on $int_if from any to any                              #разрешаем всё из локальной сети 
pass out on $ext_if from ($ext_if) to any                       #разрешаем серверу доступ в интернет 
pass in on $ext_if proto tcp from any to ($ext_if) port ssh     #разрешаем ssh
pass in on $ext_if proto tcp from any to ($ext_if) port 80      #разрешаем www
pass in on $ext_if proto tcp from any to ($ext_if) port 443     #разрешаем www

pass in log inet proto icmp all icmp-type echoreq                       #разрешаем ping 
Вчера добавил

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

pass in log on $ext_if 
pass out log on $vpn_if 
Прошу друга пинговать, а вообще пусто в логе. Я вчера просто не смог эти пакеты поймать, как выяснилось, чтобы либо route-to либо replay-to.
Карочи, нужна помощь =)

Re: pf маршрутизация

Добавлено: 2011-08-18 10:59:29
mak_v_
либо route-to либо replay-to.
туды его и не забывать что у вас динамический интерфейс (помнить составляя правила пф)

Re: pf маршрутизация

Добавлено: 2011-08-18 11:02:03
libbkmz.dev
mak_v_ писал(а):
либо route-to либо replay-to.
туды его и не забывать что у вас динамический интерфейс (помнить составляя правила пф)
Дык я вкурсе. Помогите правилом, у меня не полкчилось их даже в log запихать с просто pass in log on $ext_if а тут еще больше условий. я не знаю...

Re: pf маршрутизация

Добавлено: 2011-08-18 11:10:10
mak_v_
ну правилом - помочь могу только увидев что там у вас.
Но скорее всего надо непосредственно в консольке "трогать"

Re: pf маршрутизация

Добавлено: 2011-08-18 11:18:56
libbkmz.dev
Что вам нужно предоставить? какие данные?

Re: pf маршрутизация

Добавлено: 2011-08-18 13:26:27
Dron
смотрите в сторону конструкций с reply-to и route-to

http://www.opennet.ru/base/net/pf_faq.txt.html

Re: pf маршрутизация

Добавлено: 2011-08-18 13:28:49
libbkmz.dev

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

pass out on $ext_if route-to ($ext_if $ext_gw) from $ext_if to any
Делаю, никакого эффекта не получаю.

Re: pf маршрутизация

Добавлено: 2011-08-18 16:12:57
libbkmz.dev
Совместно с mak_v_ починили. Конфиг привел к такому виду. Вроде бы работает так как нада.

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

ext_if="ng0"
int_if="re0"
int_net="192.168.1.0/24"
vpn_if="tap0"

ext_gw="109.195.67.254"
vpn_gw="172.16.0.1"

scrub in all
scrub on $ext_if all no-df max-mss 1400
scrub on $int_if all no-df max-mss 1400

nat on $ext_if from !($ext_if) -> ($ext_if)
nat on $vpn_if from $int_if:network -> ($vpn_if)

pass out on $ext_if route-to ($vpn_if $vpn_gw) from $vpn_if to any
pass out on $vpn_if route-to ($ext_if $ext_gw) from $ext_if to any