The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
PF policy routing local interface, !*! rusdis, 25-Ноя-09, 14:47  [смотреть все]
Здравствуйте! Подскажите пожалуйста, у меня не получается направить пакеты исходящие из localhost.
Конфигурация:
FREEBSD-7.1
PF
ng0 – внешний интерфейс с ограниченным каналом и реальным IP
gw_ng0-шлюз для ng0

vlan5-10.8.37.4 внешний интерфейс с дешевым трафиком и IP под NAT провайдера,
gw_vlan5 – шлюз 10.8.37.1

по умолчанию маршрутизация настроена на дешевый канал vlan5.
Хочу сделать, чтобы запросы на отправку/прием почты, и WEB инициализированными самим маршрутизатором  шли через канал с реальным IP ng0,


Пример:
Отправить пакеты через интерфейс ng0, приходящие на физический интерфейс re0:
<code>
pass in on re0 route-to (ng0 $gw_ng0)  proto {tcp, udp} from any to any port {80, 25} flags S/SA keep state
</code>
Данное правило работает, т.к. пакеты идут от ВНЕШНЕЙ машины на интерфейс re0.

Теперь пробую написать правило для пакетов исходящих от Localhost
т.к. путь по умолчанию настроен на gw_vlan5 ловлю их на vlan5
<code>
pass OUT on vlan5 route-to (ng0 $gw_ng0)  proto {tcp, udp} from any to any port {80, 25} flags S/SA keep state
</code>
не работает:
<code>
#tcpdump -nettti pflog0
tcpdump: WARNING: pflog0: no IPv4 address assigned
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on pflog0, link-type PFLOG (OpenBSD pflog file), capture size 96 bytes
000000 rule 2/0(match): pass out on vlan5: 10.8.37.4.62764 > 62.152.59.5.80:  tcp 40 [bad hdr length 0 - too short, < 20]
где 62.152.59.5 сайт ip-ping.ru
</code>

Похожую проблему нашел в статье
http://lists.freebsd.org/pipermail/freebsd-net/2007-July/014...
как я понял, эту проблему пытались решить с указанием маршрута по умолчанию на некий виртуальный интерфейс, и затем его там ловить, но не совсем понял как это сделать.

  • PF policy routing local interface, !*! vagif, 16:09 , 25-Ноя-09 (1)
    привет!

    лениво разбираться...
    http://wiki.zeynalov.com/vagif:docs:freebsd:pf#load_balancin...- посмотри, тут есть мои живые конфиги.
    Я тут пытался раскидывать трафик между stream & corbina.
    причем corbina - было по умолчанию

    как выяснилось, некоторые сайты не любят, когда для одной и той же сессии пакеты приходят с разных IP. И icq оказалась в том же числе. Поэтому некоторые адреса я явно загнал в какие-то каналы статически.

    • PF policy routing local interface, !*! rusdis, 16:40 , 25-Ноя-09 (2)
      >http://wiki.zeynalov.com/vagif:docs:freebsd:pf#load_balancin...- посмотри, тут есть мои >живые конфиги.

      есля я правильно понял из конфигоф указанных на указанном сайте

      pass in quick on $int_if route-to { ($ext_if2 $ext_gw2) } proto { tcp } from any to $icq keep state

      pass in quick on $int_if route-to { ($corbina_if $corbina_gw) } proto { tcp, udp } from any to $corbina keep state


      то $int_if это интерфейс к которому подключены пользователи/клиенты и если запрос придет от них на ip icq то он уйдет в ext_if2, если на ip corbina то уйдет на $corbina ;

      такое правило как я уже писал у меня работает, проблема заключается в том что, если запустить traceroute на клиенте подключенному к $int_if до ip ICQ и до IP corbina, то каждый уйдет по своему интефейсу, ! НО ! если сделать traceroute с сервера до ip icq, и до ip corbina то все они пойдут на шлюз по умолчанию, т.е. в corbina, можете проверить.

      • PF policy routing local interface, !*! rusdis, 17:17 , 25-Ноя-09 (3)
        Хочу добавить вот еще что:
        если написать
        pass out log quick on vlan5 route-to (ng0 $gw_ng0) proto icmp from any to any keep state
        и сделать ping -c 5 77.88.21.8

        то

        [root@julman /etc]# tcpdump -i ng0 host 77.88.21.8
        tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
        listening on ng0, link-type NULL (BSD loopback), capture size 96 bytes
        17:06:10.829710 IP 94.102.53.85 > ya.ru: ICMP echo request, id 18806, seq 0, length 64
        17:06:10.980776 IP ya.ru > 94.102.53.85: ICMP echo reply, id 18806, seq 0, length 64
        17:06:11.830409 IP julman.s > ya.ru: ICMP echo request, id 32702, seq 1, length 64
        17:06:12.831183 IP julman.s > ya.ru: ICMP echo request, id 32702, seq 2, length 64
        17:06:13.831959 IP julman.s > ya.ru: ICMP echo request, id 32702, seq 3, length 64
        17:06:14.832765 IP julman.s > ya.ru: ICMP echo request, id 32702, seq 4, length 64

        т.е. пакеты заворачиваются на ng0 но ПИНГ не проходит,
        tcpdump -i vlan5 host 77.88.21.8
        пакетов ни входящих ни исходящих не регистрирует

      • PF policy routing local interface, !*! vagif, 17:26 , 25-Ноя-09 (4)

        >том что, если запустить traceroute на клиенте подключенному к $int_if до
        >ip ICQ и до IP corbina, то каждый уйдет по своему
        >интефейсу, ! НО ! если сделать traceroute с сервера до ip
        >icq, и до ip corbina то все они пойдут на шлюз
        >по умолчанию, т.е. в corbina, можете проверить.

        честно скажу, icmp пакетами не заморачивался...
        но все это выглядит вполне логично, ведь правила навешиваются только на интерфейс пользователей ($int_if), а на сервере эти правила не работают.

        • PF policy routing local interface, !*! rusdis, 17:43 , 25-Ноя-09 (5)
          >честно скажу, icmp пакетами не заморачивался...
          >но все это выглядит вполне логично, ведь правила навешиваются только на интерфейс
          >пользователей ($int_if), а на сервере эти правила не работают.

          В том то и дело что берем работающее правило для клиентского интерфейса меняем на нужный (vlan5) и направление на out , и не работает!


          • PF policy routing local interface, !*! rusdis, 20:20 , 30-Ноя-09 (6)
            Обгуглив весь интернет нашел в mail archive, то что мне нужно называлось Port-Based-Routing

            http://www.mail-archive.com/misc@openbsd.org/msg36355.html

            смысл таков
            $ext_sainf - шлюз по умолчанию, куда идут все пакеты.
            $ext_kiev - интерфейс через который следует выпустить пакет.
            $gw_kiev  - шлюз для $ext_kiev

            nat     on      $ext_sainf      proto   {tcp,udp}       from    self            to      any     port    smtp tag IF2    -> ($ext_kiev)


            pass    out log quick   on      $ext_sainf      route-to ($ext_kiev $gw_kiev) tagged IF2 keep state

            вот эти два правила решают поставленную задачу.

            • PF policy routing local interface, !*! vagif, 21:26 , 30-Ноя-09 (7)
              >Обгуглив весь интернет нашел в mail archive, то что мне нужно называлось
              >Port-Based-Routing

              кстати, новая FreeBSD 8 поддерживает на уровне ядра несколько роутинговых таблиц.
              + стала более продвинутая поддержка jail, со своим роутингом, nat'ом, fw, и т.д.

              вот только руки все не доходят поковыряться...




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру