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

PF + route-to (тема избитая, но не могу разобраться)

Добавлено: 2010-05-31 13:11:15
krendelek007
Сервер на ОС FreeBSD 8. Фаервол PF.
На одной из сетевых карт имеется 2 ip
1) 192.168.222.2
2) 10.1.7.205

Оба адреса (192.168.222.2 и 10.1.7.205) висят на одном интерфейсе vr1.

Провайдер локальной сети по адресу 10.1.7.205 даёт доступ к своим локальным ресурсам, но чтоб к ним добраться, надо натить адреса компов из локальной сети 192.168.222.0/28

В принципе проблем зайти на эти ресурсы нет, если добавить статические адреса в таблицу маршрутизации. Но я хочу сделать это же при помощи route-to на pf и нифига не получается :( .

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

local_if = “vr1”
table <table> const { 10.1.0.0/20, 93.204.61.0/24 }

nat on $local_if from 192.168.222.0/28 to <table> -> 10.1.7.205

pass out quick on $local_if route-to ( 10.1.7.205 10.1.0.6 ) inet from any to <table>

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

# traceroute somedomen.ru
… и трасса идет через внешние каналы интернета  :( 

где somedomen.ru имеет IP из диапазона 93.204.61.0/24
Опять таки, если вписать маршруты статикой, то все работает как надо.

Большое спасибо за помощь.

Re: PF + route-to (тема избитая, но не могу разобраться)

Добавлено: 2010-06-01 9:55:09
Al
Возможно, стоит повесить на разные сетевые карты, т.к. исходящий адрес берется с нее. Возможно, в данном случае некорректно отрабатываются алиасы.
ЗЫ. а роут-ту не синтаксис (интерфейс, шлюз)? Где интерфейс - имя ифа, а не его адрес?

Re: PF + route-to (тема избитая, но не могу разобраться)

Добавлено: 2010-06-01 14:42:08
krendelek007
Al писал(а):Возможно, стоит повесить на разные сетевые карты, т.к. исходящий адрес берется с нее. Возможно, в данном случае некорректно отрабатываются алиасы.
ЗЫ. а роут-ту не синтаксис (интерфейс, шлюз)? Где интерфейс - имя ифа, а не его адрес?
Спасибо за ответ.

Поставил имя интерфейса, а не адрес - не изменилось ничего.
Попробую повесить на разные интерфейсы. Потом отпишусь о результатах.

Re: PF + route-to (тема избитая, но не могу разобраться)

Добавлено: 2010-06-03 22:39:12
krendelek007
Разбросал по разным сетевым картам ... не помогло (

Re: PF + route-to (тема избитая, но не могу разобраться)

Добавлено: 2010-06-04 7:13:02
Al
Конфиг целиком давай тогда. И netstat -rn

Re: PF + route-to (тема избитая, но не могу разобраться)

Добавлено: 2010-06-04 7:16:48
Al

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

pass out quick on $local_if route-to ( 10.1.7.205 10.1.0.6 ) inet from any to <table>
Где route-to ( $if $gate )
Если маска на интерфейсе /24, то шлюз и интерфейс в разных сетях.
Статикой как маршрут добавляли?

Re: PF + route-to (тема избитая, но не могу разобраться)

Добавлено: 2010-06-05 9:32:43
krendelek007
Al писал(а):Конфиг целиком давай тогда. И netstat -rn
netstat -rn

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

Destination        Gateway               Flags      Refs      Use       Netif     Expire
default                       109.56.12.254      UGS        54        15759    rl0
10.1.0.0/20                link#1                   U            0          2          vr0
10.1.7.205                  link#1                  UHS         0          0          lo0
109.56.12.0/24           link#2                  U             0          0          rl0
109.56.12.14               link#2                 UHS          0         0          lo0
127.0.0.1                    link#5                 UH           0         95         lo0
192.168.111.0/24       link#3                  U             0         32         rl1
192.168.111.10           link#3                 UHS         0          0          lo0
192.168.222.0/28       link#4                 U             2         7384      vr1
192.168.222.2            link#4                 UHS         0          0           lo0
pf.conf

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

## MACROS
local_if = "rl1"
dlan_if = "vr1"
prov_if = "rl0"
provaider_if = "vr0"

## HOSTS
lhosts  = "192.168.111.0/28"
dhosts  = "192.168.222.0/28"

## ping requests
icmp_types = "{ echoreq, unreach }"

## tables
table <table> const { 10.1.0.0/20, 93.204.61.0/24, 93.204.62.0/24, 93.204.63.0/24 }

## options
set block-policy drop
set skip on lo0

#########
## NAT ##
#########################
nat on $prov_if from { $dhosts, $lhosts } to any -> $prov_if
nat on $local_if from $dhosts to any -> $local_if

pass out quick on $provaider_if route-to ( $provaider_if 10.1.0.6 ) inet from any to <table>

Re: PF + route-to (тема избитая, но не могу разобраться)

Добавлено: 2010-06-05 9:35:28
krendelek007
Al писал(а):

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

pass out quick on $local_if route-to ( 10.1.7.205 10.1.0.6 ) inet from any to <table>
Где route-to ( $if $gate )
Если маска на интерфейсе /24, то шлюз и интерфейс в разных сетях.
Статикой как маршрут добавляли?

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

#!/bin/sh

/sbin/route add 10.1.0.0/20 10.1.0.6
/sbin/route add 93.204.61.0/24 10.1.0.6
/sbin/route add 93.204.62.0/24 10.1.0.6
/sbin/route add 93.204.63.0/24 10.1.0.6

Re: PF + route-to (тема избитая, но не могу разобраться)

Добавлено: 2010-06-05 11:02:36
Al
Ты не понял синтаксиса.

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

/sbin/route add 10.1.0.0/20 10.1.0.6
и

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

 route-to ( 10.1.0.0/20 10.1.0.6 ) 
не одно и тоже. Похожи только слова.
Я ж тебе написал.
route-to ( $if $gate ), где
$if - интерфейс, с которого выплевывать пакеты
$gate - новый шлюз для них. Следующий некст-хоп.

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

/sbin/route add 10.1.0.0/20 10.1.0.6 
еквивалентно

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

pass out on $ext_if1 from any to {10.1.0.0/20} route-to ($ext_if2 $ext_gw2)
,где
$ext_if1 - интерфейс,через который выходят пакеты по умолчанию (дефолт роут)
$ext_if2 - интерфейс,через который ты хочешь плюнуть пакеты в сеть 10.1.0.0/20
$ext_gw2 - шлюз в сеть 10.1.0.0/20. В воем случае 10.1.0.6. В этой же сети находится $ext_if2
Логика такая.
Выпускаем пакеты на $ext_if1 (сюда они идут по дефолтроуту), от всех к сети 10.1.0.0/20, перебрасываем их на сетевуху $ext_if2 и даем шлюз (некст хоп) $ext_gw2

Re: PF + route-to (тема избитая, но не могу разобраться)

Добавлено: 2010-06-05 11:07:48
Al
krendelek007 писал(а):

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

pass out quick on $provaider_if route-to ( $provaider_if 10.1.0.6 ) inet from any to <table>
Не работает, т.к. ни один пакет у тебя не попадает на $provaider_if и правило не срабатывает.
Все пакеты идут по дефолтному шлюзу через $prov_if.
Должно быть

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

pass out quick on $prov_if route-to ( $provaider_if 10.1.0.6 ) inet from any to <table>

Re: PF + route-to (тема избитая, но не могу разобраться)

Добавлено: 2010-06-05 17:07:47
krendelek007
Al писал(а):
krendelek007 писал(а):

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

pass out quick on $provaider_if route-to ( $provaider_if 10.1.0.6 ) inet from any to <table>
Не работает, т.к. ни один пакет у тебя не попадает на $provaider_if и правило не срабатывает.
Все пакеты идут по дефолтному шлюзу через $prov_if.
Должно быть

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

pass out quick on $prov_if route-to ( $provaider_if 10.1.0.6 ) inet from any to <table>
Спасибо большое, без вашей помощи не разобрался бы.
В общем то:

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

pass out quick on $prov_if route-to ( $provaider_if 10.1.0.6 ) inet from any to <table>
работает верно, за исключением того, что перебрасывает пакеты на $provaider_if, но присваивает адрес источника - IP сетевой карты $prov_if.
Натами этот вопрос решил, сейчас все работает нормально.

Но теперь вернусь к самому началу. Возможно ли реализовать тоже самое, но когда IP адреса:
1) 192.168.222.2
2) 10.1.7.205
висят на одном интерфейсе, а не на разных?

Re: PF + route-to (тема избитая, но не могу разобраться)

Добавлено: 2010-06-05 17:28:24
Al
Ну, попробуй. Заодно расскажешь)