• Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Search
  • Register
  • Login
Netgate Discussion Forum
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Search
  • Register
  • Login

Странный рутинг

Scheduled Pinned Locked Moved Russian
36 Posts 7 Posters 13.2k Views
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • C
    chawoosh
    last edited by Nov 2, 2012, 3:04 AM

    Ситуация следующая:
    pfSense стоит как рутер в среде VMware ESXi 5.0, за ней - куча виртуальных машин. Всё работает, хвала богам и создателям сего продукта, но проявилась странность следующего вида - необходимо обеспечить доступ к внутренним машинам клиентам, попадающим в сеть через VPN. Сервер, на котором работает OpenVPN находится в одной сети (VLAN) с сервером ESXi и, соответственно, внешним (WAN) интерфейсом pfSense но не совпадает с дефолтным рутером. Вроде ничего особенного, но!
    Прописываю дополнительное правило рутинга, всё равно как - через веб интерфейс или в командной строке

    10.8.0.0/24	 GWvpn - 192.168.21.214	 WAN
    

    получаю для IP4

    netstat -r
    Routing tables
    
    Internet:
    Destination        Gateway            Flags    Refs      Use  Netif Expire
    default            corerouter-21      UGS         0  7476867    le0
    10.8.0.0           basebsd            UGS         0      246    le0
    localhost          link#6             UH          0      229    lo0
    192.168.0.0        link#2             U           0 99388697    le1
    virtbuff           link#2             UHS         0        0    lo0
    192.168.1.0        link#3             U           0        0    em0
    192.168.1.1        link#3             UHS         0        0    lo0
    192.168.21.0       link#1             U           0 49814580    le0
    virtbuff           link#1             UHS         0        0    lo0
    

    сеть 10.8.0.0/24 - это адреса внутри VPN, basebsd (192.168.21.214) - адрес интерфейса сервера с OpenVPN.
    Результат: пакеты по этому правилу не идут, точнее какие-то туда попадают, но случайным образом. При попытке трассировки изнутри получаем трассу в дефолтный рутер -

    traceroute 10.8.0.2
    traceroute to 10.8.0.2 (10.8.0.2), 64 hops max, 40 byte packets
     1  corerouter-21 (192.168.21.100)  0.366 ms  0.225 ms  0.207 ms
     2  gwb (172.16.7.181)  0.227 ms  0.202 ms  0.203 ms
    ...............
    

    соответвенно, там таких адресов нет.
    Вопрос: что за …? На BSD, линуксе и даже винде (!) такие правила работают без проблем.

    1 Reply Last reply Reply Quote 0
    • N
      nomeron
      last edited by Nov 2, 2012, 5:11 AM

      Скорее всего вместо маршрутизации у вас срабатывает правило NAT

      1 Reply Last reply Reply Quote 0
      • R
        rubic
        last edited by Nov 2, 2012, 8:59 AM

        Нужна схема сети, ничего не понятно из ваших слов. С какой машины трассируете и кто для нее шлюз по умолчанию?

        1 Reply Last reply Reply Quote 0
        • C
          chawoosh
          last edited by Nov 2, 2012, 10:28 AM

          Мне в свою очередь не понятно что непонятно.
          Трассирую изнутри pfSense к одному из хостов подключенных через VPN, чисто для демонстрации, т.к. сразу было очевидно что пакеты в VPN от pfSense не возвращаются. Шлюз по умолчанию == default, сабинтерфейс Cisco, 192.168.21.100

          Правило NAT на возвращаемые пакеты действовать не могут, точнее, должны действовать автоматически создаваемые "обратные" правила.

          1 Reply Last reply Reply Quote 0
          • R
            rubic
            last edited by Nov 3, 2012, 1:12 AM

            Тут телепатов нету, многие вещи, которые очевидны вам, могут быть не очевидны другим.
            Если правильно понимаю, Cisco, pfSense и сервер OpenVPN смотрят своими интерфейсами в один свитч, причем pfSense смотрит в него интерфейсом WAN, а Cisco - LAN. Все находятся в одной подсети 192.168.21.0/?? и все влезают в маску.
            Теперь озвучте версию pfSense и как вы добавляли маршрут через WEBGUI. Через коммандную строку лучше не делать т.к. это не чистая FreeBSD (pf например тут пропатчен по-своему) и могут быть подводные камни.
            Если версия 2.0.1, то в System -> Routing нужно добывить Gateway с адресом сервера OpenVPN (192.168.21.214) и там же в Routes маршут через этот Gateway в сеть 10.8.0.0/24.

            1 Reply Last reply Reply Quote 0
            • C
              chawoosh
              last edited by Nov 3, 2012, 7:29 AM

              Никакой телепатии не потребовалось, рассматриваем именно такую линейную схему. Все интерфейсы в сети 192.168.21.0/24. Маршрут к серверу OpenVPN в конечном итоге был прописан именно через System -> Routing (версия как раз 2.0.1), т.е. описан второй гейт (не дефолтный) и прописан маршрут: отправлять пакеты в сеть 10.8.0.0/24 через него. pfSense не перегружал, правило не работает. Пришлось поднять прокси в той же сети и пустить юзеров из VPN через него, но это паллиатив.

              1 Reply Last reply Reply Quote 0
              • R
                rubic
                last edited by Nov 4, 2012, 12:21 AM

                Я бы попросил вас неприличными словами тут не выражаться) По сути вопроса, маршруты, в том виде как вы их заводите, работают у тысяч и сотен тысяч пользователей pfSense. Единственное, что следует учитывать - это policy routing. Правилами Firewall -> Rules можно переназначить gateway и это переназначение будет иметь приоритет над таблицей маршрутизации.
                Если у вас policy routing'а нет, то все должно работать. Все вы сделали правильно.

                1 Reply Last reply Reply Quote 0
                • C
                  chawoosh
                  last edited by Nov 4, 2012, 6:53 AM

                  Именно это я имел в виду. Такие правила работают на линуксе, FreeBSD и даже винде (извините за повтор), а здесь ядро просто игнорирует частное правило и сразу шлёт пакеты по дефолтному.
                  Ещё раз повторюсь: правилами Firewall -> Rules невозможно назначить маршрут куда-то налево, не введя понятие ещё одного гейта. Правильно? Именно так в конечном счёте и было проделано, был опрелён доп. гейт, в него прописан маршрут, отправлять туда пакеты назначенные в "левую" сеть. В результате в таблице рутинга появляется тоно такая же запись, как при определении маршрута командой route add (специально смотрел), и результат совершенно аналогичный. Т.е. либо всё же бага в ядре в 2.0.1, либо где-то сидит здоровенный побочный эффект.
                  То, что я "всё сделал правильно" - не утешает ;)

                  1 Reply Last reply Reply Quote 0
                  • R
                    rubic
                    last edited by Nov 4, 2012, 11:27 AM

                    Все это странно конечно, при том, что у меня например такие маршруты не первый год нормально работают. Одно скажу, ядро тут не при чем.
                    Пара мыслей. Маршруты нужно определять не через Firewall -> Rules, а через System -> Routing вкладка Routes. Тогда они будут действительны не только для машин за pfSense, но и для самого pfSense. Иначе трассировка с pfSense даст то, что вы и наблюдаете.
                    Отзывается ли сервер OpenVPN на пинг с pfSense? Если нет, то определенный вами gateway может расценен как недоступный. Проверьте это в Status -> Gateways.

                    1 Reply Last reply Reply Quote 0
                    • S
                      sweep4
                      last edited by Nov 4, 2012, 12:31 PM

                      @rubic:

                      Пара мыслей. Маршруты нужно определять не через Firewall -> Rules, а через System -> Routing вкладка Routes.

                      Такие маршруты будут действительны только для самого pfSense. А станции в сети - по правилам FW Rules отдельно работают.

                      Я уже нарывался на такое, отписывался здесь в какой-то теме.

                      1 Reply Last reply Reply Quote 0
                      • C
                        chawoosh
                        last edited by Nov 4, 2012, 2:04 PM

                        Вот это уже интересно, нужно попробовать.
                        Гейт/сервер vpn естественно пингуется и с базовой машины и из pfSense.

                        1 Reply Last reply Reply Quote 0
                        • R
                          rubic
                          last edited by Nov 4, 2012, 3:23 PM

                          @sweep4:

                          @rubic:

                          Пара мыслей. Маршруты нужно определять не через Firewall -> Rules, а через System -> Routing вкладка Routes.

                          Такие маршруты будут действительны только для самого pfSense. А станции в сети - по правилам FW Rules отдельно работают.

                          Я уже нарывался на такое, отписывался здесь в какой-то теме.

                          Эти маршруты будут действительны для всех, если иное не определено в Firewall -> Rules. Иными словами, если в правиле Firewall -> Rules gateway выставлен как default, то будет действовать таблица маршрутизации pfSense, включая то, что пользователь прописал в System -> Routing [Routes].
                          Если вы хотите чтобы для определенного трафика действовала дефолтная таблица маршрутов, то правило для этого трафика в Firewall -> Rules нужно поставить выше правил, для которых определен альтернативный gateway и под которые подпадает этот трафикю

                          1 Reply Last reply Reply Quote 0
                          • C
                            chawoosh
                            last edited by Nov 6, 2012, 4:43 AM

                            Прекрасный пример ответа "вообще", не читая вопроса. :)

                            В общем, только после того как прописал особое правило рутинга во "Floating rules", появился контакт к хостам подключенным через OpenVPN сервер (выделенный).

                            1 Reply Last reply Reply Quote 0
                            • C
                              chawoosh
                              last edited by Nov 9, 2012, 2:59 AM

                              Мда, чудны дела твои…
                              Поторопился малость. Из машин за гейтом контакт с машинами в OpenVPN есть, а вот если попытаться из VPN подключиться к машине за pfSense, облом. Т.е. пакеты от источника до получателя доходят, тот отвечает, естественно на адреса отправителя, но на сервер VPN эти пакеты не попадают... Загадка. Подключение от машин, находящихся просто в одной сети с выходным интерфейсом pfSense, проходит без сучка и задоринки. Будем смотреть теперь физический интерфейс :)

                              1 Reply Last reply Reply Quote 0
                              • R
                                rubic
                                last edited by Nov 9, 2012, 6:04 AM

                                У вас cisco - это то, куда все сходится, и для всех она default gateway. Вот на ней я бы на вашем месте и прописал маршрут в 10.8.0.0/24 через 192.168.21.214, а если NAT на pfSense отключен, то и в сети 192.168.0.0/24, 192.168.1.0/24 через WAN IP pfSense. Да, трафик между машинами за pfSense и клиентской сетью OpenVPN ходил бы через cisco, но если он небольшой, то и нормально. Зато весь ручной роутинг в одном месте.
                                Еще у pfSense есть такой момент, что пакеты от локальных процессов всегда уходят через default gateway. Я к тому, что трассировка с самого pfSense - не показатель, нужно трассировать 10.8.0.0/24 с машины за pfSense. То, что вы прописали floating rule исправило только этот момент. По сути это правило для общения машин за pfSense с клиентской сетью OpenVPN не нужно, достаточно маршрута в System -> Routing -> Routes

                                1 Reply Last reply Reply Quote 0
                                • C
                                  chawoosh
                                  last edited by Nov 9, 2012, 8:25 AM Nov 9, 2012, 7:41 AM

                                  теоретически оно может и так, а практически правило в System -> Routing -> Routes эффекта не даёт, что без "плавающего правила", что с ним. NAT естественно включен, с одной стороны у pfSense сеть .21.0/24, с другой - .0.0/24.

                                  Чуть позже: таки пришлось прописать правило во внутреннем рутере, который виланами рулит и является гейтом для всех. Странновато реализован рутинг в pfSense, при том что это вообще-то рутер по призванию.

                                  1 Reply Last reply Reply Quote 0
                                  • A
                                    aleksvolgin
                                    last edited by Nov 9, 2012, 8:37 AM

                                    это вообще-то рутер по призванию.

                                    Нее. По призванию он как раз кусок роутера. А полноценный роутер из него как раз хотят все сделать. Ожидаемо безуспешно.

                                    1 Reply Last reply Reply Quote 0
                                    • R
                                      rubic
                                      last edited by Nov 10, 2012, 12:56 AM

                                      @chawoosh:

                                      NAT естественно включен, с одной стороны у pfSense сеть .21.0/24, с другой - .0.0/24.

                                      Да? И в чем взаимосвязь?

                                      Странновато реализован рутинг в pfSense, при том что это вообще-то рутер по призванию.

                                      Не надо делать глобальных выводов из вашей частной неудачи. Не то превратитесь в "обиженного", такого как постом выше. Вы очевидно недавно на pfSense, решили сделать все по наитию, не прочитав документацию. Где-то накосячили в конфигурации и не видите этого. Схему сети выкладывать не хотите, скриншоты очевидно тоже. Ну, вал_и_те теперь все на pfSense, это действительно проще чем признать, что чего-то не понимаете.
                                      Ваша ситуация (асимметричный роутинг) яйца выеденного не стоит и элементарно решается. Будет схема, будут скрины, будем говорить.

                                      1 Reply Last reply Reply Quote 0
                                      • A
                                        aleksvolgin
                                        last edited by Nov 10, 2012, 7:11 AM

                                        2 rubic

                                        Не то превратитесь в "обиженного", такого как постом выше.

                                        Это не обида, это констатация очевидного факта. Концепцию нужно менять. Она себя исчерпала уже в m0n0. Из куска маршрутизатора полноценный роутер не получиться, очевидно-же.

                                        1 Reply Last reply Reply Quote 0
                                        • C
                                          chawoosh
                                          last edited by Nov 10, 2012, 12:05 PM

                                          Специально для великого Рубика приведу невообразимо сложную схему

                                          Из подписей и предидущих постов вроде должно быть ясно что и куда должно бегать. Единственное пояснение - pfSense и Hosts array - внутри ESXi 5.

                                          NAT естественно включен, с одной стороны у pfSense сеть .21.0/24, с другой - .0.0/24.

                                          Да? И в чем взаимосвязь?

                                          Может великий подскажет способ общения компов, находящихся в разных сетях, в обе стороны, не применяя NAT. Нобелевскую не дадут, но на что-то поменьше можно рассчитывать.

                                          1 Reply Last reply Reply Quote 0
                                          20 out of 36
                                          • First post
                                            20/36
                                            Last post
                                          Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.
                                            This community forum collects and processes your personal information.
                                            consent.not_received