Рассматриваем простейшие случаи раздачи интернета внутри офисной сети

    Предисловие
    В процессе работы иногда приходиться подключать клиентов либо уже с присутствующими машинами на FreeBSD (распространенный вариант – держат там рабочие файлошары на самбах) либо ставить им такое решение по запросу, для максимально удобного решение насущных проблем клиента. Статья рассчитана на читателя крайне слабо знакомого с FreeBSD. Думаю людям, что-то, понимающим эта статья будет крайне отвратительна – рекомендую дальше не читать и не травмировать себя.

    image


    Необходимый набор знаний – общее знакомство с *nix подобными операционными системами (любой линукс, возможно макось), хладнокровное отношение к консоли и базовые представления о работе сети.
    Статья клеилась из подручной шпаргалки, писанной для нашего персонала и предназначенной для начального обучения. Человек 5 по крайней мере по этой писанине в свое время чему-то научились засим и считаю что оно имеет право на существование.

    Установка FreeBSD уже очень подробно и даже в красивых картинках описана очень хорошо и доступно у других людей и о ней мы скромно умолчим. Кроме того установка FreeBSD для человека ранее устанавливавшего допустим Debian либо FreeBSD (здесь смайл) проблем составить не должна.

    После-предисловие и ответы на ваши первые мысли
    — да я знаю про существование pfnat, ipnat, ng_nat – если вы тоже знаете такие слова, пожалуйста, дальше не читайте (см. еще раз выше)
    — да я знаю, что pf быстрее но не считаю целесообразным его использование при потоках менее 50-60 Мбит
    — нет, мы не будем исходя, из поставленных в заголовке задач строить полноценную балансировку на round robin
    — нет, не линукс – потому что статья не о нем.
    — и не макось – хотя да, можно… наверное.
    — еще раз – про pf но уже на более быстрых вещах поговорим в следующий раз
    — да, исходя из опыта ядерный ipfw nat быстрее на процентов 20, на его использование очень просто перейти после понятия сути работы с natd
    — нет, и про 2850 мы промолчим
    — да, я действительно считаю ipfw достаточно гибким. Серьезно.
    — нет, я не люблю squid, polipo, privoxy – потом объясню почему

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

    Сферическая офисная сеть в вакууме

    Что хотим сделать:
    • Тривиальный и практический минимум — хождение нашей сети в интернет
    • Будем считать, что в интернет смотрит сетевуха rl0 с адресом 10.10.10.1 а в нашу внутреннюю сеть сетевуха fxp0 с адресом 192.168.0.1 и еще одна никуда не воткнутая сетевуха xl0 (далее мы возможно узнае для чего мы можем ее использовать)

    Нам потребуются:
    1. Машина с установленным FreeBSD
    2. немножко времени
    3. 2 чашки кофе

    Для начала собираем и устанавливаем ядро, поскольку в идущее из коробки GENERIC не включены IPFIREWALL и IPDIVERT нужные сейчас нам, зато включено много чего не нужно. В принципе процесс сборки ядра описан уже неоднократно и повторяться более чем нету смысла, но написание пошагового и доступного руководства чувствую, требует этой рутины.

    Итак сборка ядра:

    #cd /usr/src/sys/i386/conf
    # cp GENERIC MYROUTER
    #vim MYROUTER

    Правим конфиг ядра под наши минимальные ну или по желанию не минимальные нужды (читать отдельно):

    ident MYROUTER
    options IPFIREWALL
    options IPFIREWALL_DEFAULT_TO_ACCEPT
    options IPFIREWALL_FORWARD
    options DUMMYNET
    options IPDIVERT
    options HZ=1000
    options IPFIREWALL_VERBOSE
    options IPFIREWALL_VERBOSE_LIMIT=100

    и собираем:
    #config MYROUTER
    #cd ../compile/MYROUTER
    #make depend
    #make

    Бекапим старое ядро если случиться что-то страшное:

    #cp –R /boot/kernel /boot/good

    и инсталлим новое ядро

    #make install

    Примечание – если натить мы собрались на внешней железке либо другом хосте а тут только контролировать утилизацию канала, то IPDIVERT совсем ненужен, можно свободно обойтись подгрузкой ipfw модулем и обойтись без пересборки ядра.

    Начинаем играться с NAT-ом, ради чего все это и затеивалось:

    в /etc/rc.conf засовываем

    defaultrouter=«10.10.10.2» #шлюз по умолчанию
    ifconfig_rl0=«inet 10.10.10.1 netmask 255.255.255.0»
    ifconfig_fxp0=«inet 192.168.0.1 netmask 255.255.255.0»
    gateway_enable=«YES» # таки да — будем
    firewall_enable=«YES» # врубаем ipfw
    firewall_script="/etc/firewall.conf" # отсюда наше ipfw должно брать правила
    natd_enable=«YES» # врубаем natd
    natd_interface=«rl0» # и подсказываем ему где мы будем натить (сетевуха смотрящая в интернет)

    Вот так рекомендуется всюду. Лично мне привычнее пускать natd не на интерфейсе а на конкретной айпишке с конкретно указанным портом для диверта. Делать это можно например из того же /etc/firewall.conf в виде /sbin/natd -u -p 8671 -a 10.10.10.1 (Для чего так удобно делать тоже рассмотрим в случае PBR)

    Далее создаем вышеупомянутый /etc/firewall.conf

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

    #!/bin/sh
    FwCMD="/sbin/ipfw -q"
    ${FwCMD} -f flush
    ${FwCMD} add divert natd all from any to any via rl0
    ${FwCMD} add 65535 allow all from any to any

    divert from any to any via вообще некрасивый вариант засим дальше, если будем делать что-то, то сделаем более красиво:

    #!/bin/sh
    /sbin/natd -u -p 8671 -a 10.10.10.1
    FwCMD="/sbin/ipfw -q"
    ${FwCMD} -f flush

    # Networks define
    ${FwCMD} table 2 add 192.168.0.0/24
    ${FwCMD} table 9 add 10.10.10.8/32
    #internet natting and preserving
    ${FwCMD} add 1799 divert 8671 ip from table\(2\) to not table\(9\) out via rl0
    ${FwCMD} add 2099 divert 8671 ip from any to 10.10.10.1 in via rl0

    На будущее запоминаем что в table(2) у нас живут сети либо хосты которые мы будем натить, а в table(9) те хосты трафик к которым NAT-ить мы не хотим. Как пример у нас там упоминался хост 10.10.10.8 который стоит в сети 10.10.10/24 и допустим исполняет функции нашего офисного %название_сервиса%. На нем соответственно для того чтобы из сети 192.168/24 мы могли достучаться до него нужно вбить статический раут до 10.10.10.1

    Итак возвращамся к задаче и ставим права на выполнение

    #chmod a+x /etc/firewall.conf

    После чего можно посмотреть в небо, перекреститься и перезагрузиться
    #reboot

    После загрузки есть шанс что мы увидим рабочий NAT и наши пользователя смогут таки увидеть страдальческий Интернет, прописав у себя айпишки из диапазона 192.168.0.0/24 и указав шлюзом по умолчанию 192.168.0.1 плюс Провайдерский DNS (свой мы еще не подымали).

    Проверяется работа nat методом
    #ipfw show

    В результате чего мы должны увидеть что-то похожее на

    1265581 168080800 divert 8671 ip from table(2) to not table(9) out via rl0
    769868437 668041277852 divert 8671 ip from any to 10.10.10.1 in via rl0

    Ясно что пропустили мы многое например выкидывание мусора оставшегося на память от GENERIC, тюнинг опций ядра для обеспечения человеческого быстродействия при мульйонах сессий и грандиозном потоке, порезку всякого мусора на интерфейсах но об этом в следущий раз если захотите.

    Поехали дальше по реально возникающим задачам, которые могут ВНЕЗАПНО встать перед нами.

    Довольно часто возникает задача обеспечения различной пропускной способности на разные хосты.
    Допустим, Светлане Денисовне не нужен в процессе работы очень быстрый интернет и начальство желает, чтобы у нее персонально канал выглядел как симметричное 256 Кбит/с. ОК, нет проблем:

    ipfw pipe 10256 config bw 256Kbit/s queue 32Kbytes
    ipfw pipe 20256 config bw 256Kbit/s queue 32Kbytes
    ipfw add 10000 pipe 10256 ip from 192.168.0.6 to not table\(9\) via fxp0 in
    ipfw add 10000 pipe 10256 ip from not table\(9\) to 192.168.0.6 via fxp0 out

    Убедившись в работоспособности можно продублировать все это в /etc/firewall.conf. Никогда не протестировав очередное правило, даже казалось бы, самое очевидное не добавляйте его в конфиг – у вас всегда будет путь к оступлению без излишних нервов.
    Если скорость нужно резать на всю сеть, либо еще как-то по маске то более логично было бы сделать, допустим, вот так:

    ${FwCMD} pipe 9999 config bw 512Kbit/s queue 64Kbytes mask dst-ip 0xffffffff
    ${FwCMD} pipe 9998 config bw 512Kbit/s queue 64Kbytes mask dst-ip 0xffffffff
    ${FwCMD} add 5000 pipe 9999 ip from table\(2\) to not table\(9\) via fxp0 in
    ${FwCMD} add 5000 pipe 9998 ip from not table\(9\) to table\(2\) via fxp0 out

    Крутя маску в пайпе мы можем сделать либо «вот такая скорость на всех» либо «вот такая скорость каждому» как указано в примере.

    Что еще хотелось бы после этого сделать? Очень многое если честно.

    1. Настроить DHCP
    2. Поднять свой DNS
    3. Хотелось бы снимать реалистичную статистику хождения трафика на интерфейсах при помощи snmp и рисовать красивые графики при помощи cacti
    4. Иметь возможность лимитировать по трафику пользователей внутри сети
    5. Иметь детальную статистику по тому кем и на что расходуется трафик
    6. Настроить бекап каналов в случае наличия еще одного провайдера (а о xl0 все и забыли)
    7. Научиться разруливать трафик между несколькими каналами средствами ipfw

    Как хочеться чтобы все в финале выглядело?
    Хотябы вот так:
    sgconfig

    Эти 7 пунктов совместно с ускоренной установкой биллинга (картинка выше) хотелось бы рассмотреть в следующей статье если кому-то будет интересно и карма после сегодняшнего нажатия кнопки «опубликовать» позволит ;)

    PS и да — мой русский со времени публикации предыдущего поста не улучшился. Искренне прошу извинить.
    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 62

      +1
      /me почитатель PF. Так что это: «PF: Packet Queueing and Prioritization» поможет решить ту же задачу, что описана в теме.
        +1
        а давайте не будем? :)

        Тогда с отличным настроением я прочитаю вашу статью о altq =)

        Если серьезно то не вижу ни малейшего смысла. pf использую только там где нужно отруливать потоки >60-70 Мбит при зверском количестве сессий.
          0
          Наоборот. PF, в отличие от IPFW, плохо масштабируется на SMP-системах. Поэтому удел PF — небольшие и средние сетки с требуемым уровнем качества обслуживания (QoS). ALTQ создавался не для тупого шейпинга, а для QoS, вообще-то.

          А вот IPWF — это и есть молотилка трафика, настоящий Ассемблер.
            0
            IPWF → IPFW (опечатался)
        0
        Альтернативные решения раздачи:
        Kerio WinRoute Firewall
        DrayTek Vigor 2950/3300
        Barracuda WebFilter по сравнению с KWF не понравился, но тоже вариант.
          +1
          www.kerio.com/firewall/buy — $395
          DrayTek Vigor 2950 — Price range: $610.08 to $698.50
          Barracuda WebFilter — $474.05

          Могу вообще идеальную железку под такие задачи предложить — Cisco 2800 series либо пиксу какую-нить.

          Описал бюджетное решение ценовой категории «от $0»
            +1
            Это вы мягко говоря лукавите. Сервер что-то стоит, FreeBSD не на кофемолку ставилась.
              +1
              Подножный корм себестоимостью 0$ вестимо. Можно и слепить хоть новое в магазине — минимальная тачка с 2-3 сетевухами всяко дешевле хотя как показала практика что-то «не нужное» в таких учреждениях всегда валяется.
              • UFO just landed and posted this here
                  –3
                  и из этой коробки никуда не вылезти. В качестве сетевых железок 3 уровня признаю только циску)
                  • UFO just landed and posted this here
                      0
                      Почему же — меня «устраивает» практически любой бюджет :)
                      Просто исходить всегда только из реальных требований к финальному решению и его масштабируемости без глупого фанатизма — «фря/линукс/циска/джунипер/моторола (ненужное зачеркнуть) рулез»
                    +1
                    был давеча на семинаре по роутерам DLink:
                    1. обсуждали этот дивайз — отличная железка за свои то деньги, но по причине своего преждевременного выхода на рынок см. п.2
                    2. www.dlink.com/products/?pid=452 почему смотрите п.1. :)
                    3. ничего не имею против того чтобы если задача «просто взять и раздать» и «взять и забалансить» воткнуть либо его либо одноканальный DIR-300 (еще и вайфай там будет) и забыть.
                    4. если задача «пошейпить/посчитать/полимитировать/всесторонне помониторить/еще и файлопомойку» развернуть всеравно придеться рядышком ставить софтовое решение приблизительно за теже деньги.

                    За последний год по п.4. развернули 5 таких точек с затратами $0 на железо ибо были уже в наличии «старый ненужный хост бухгалтерши» либо «вот наш файлосервер на win2k» — стоимость настройки приблизилась к стоимости того же LB =)

                    Если требования клиента полностью удовлетворяються конкретной железкой с запасиком так на годик вперед — тогда в любом случае лучше ставить железку, как минимум требования к електропитанию попроще будут. Если клиент хочет тотального контроля за тем как все работает а еще и недайбог (смайл здесь) имеет у себя штатного вменяемого эникея которого можно научить пользоваться мордашкой к биллингу — выбор скорее всего падет на софтовое решение.
                    • UFO just landed and posted this here
                        0
                        это к transparent proxy чтоли — чуть не в ту степь :)
                        • UFO just landed and posted this here
                            0
                            Гуманность в случае транспарентной прокси со сворачиваемым http трафиком также имеет вторую сторону медальки — на которой назову моментально 3 минуса на вскидку. Угадайте каких :)
                            • UFO just landed and posted this here
                                0
                                Не томлю — называю.
                                1. офисы это и асечки манагеров (пусть проксей — нет проблем) и почта черти знает где (110,23 — уже либо огород городить с форвардингом/настройкой МТА либо всеравно подымать рядышком НАТ по описанной вами методе)
                                2. «хотелки» в виде mp3 бывают еще и в виде zip/rar/exe/xxx/p2p/… (ненужное зачеркнуть) и здесь пороблемы с ними вылезают за рамки ИТ и как никогда прямо смотрят на качество организации труда
                                3. опять же шейпить интернеты по скорости придется тогда либо на интерфейсе смотрящем внутрь (fxp0 в примере) либо же изголяться с delay_class/delay_access/delay_parameters сквида, тогда уж давайте и авторизацию пользователя на PAM к проксе сбацаем — но это почему-то никогда не считал «нетрудоемким» и «прозрачным».

                                ЗЫ вы еще не видели приятных и хороших отчетов от bandwithd + stg + какая-нить мордашка ;)
                                О этом как и обещался расскажу в картинках в ближайшие дни — рутинная работа с паралельным копипастом в заготовку статьи какраз в процесе.
                                • UFO just landed and posted this here
                                    +1
                                    1. уже и почтовый сервер рядом появился либо МТА на нашем роутере — отлично :)
                                    >>нат только для себя любимого :)
                                    Ооо :)
                                    2. бедный Святослав Никифорович не сможет загрузить свежий прайс на комплектуху :( за чтоооо??? :)
                                    как я и пророчил «админ… ищет вручную… показательно… лишает… запугивает..» уходит в сторону воспитания сотрудников и переходит в стадию улучшения планирования труда.
                                    Возможно это не моя сфера ниразу (я всегда стараюсь не лезть в то где ничерта не понимаю) но организация труда должна сводиться к «выполнил поставленную задачу — молодец отдыхай» либо «не выполнил норматив качаешь порнуху/это мешает (либо ты просто не хочешь) тебе выполнять поставленные задачи за которые тебе платят — казнь». Возможно все зависит от специфики производства, качественных характеристик персонала но сдается мне что сотрудник который не выполняет поставленных задач и требует постоянного контроля за трафиком — нафиг никому не нужен. Надеюсь вы со мной согласны :)
                                    3. причем адреса к РАМ-у? :)
                                    • UFO just landed and posted this here
                                        –1
                                        2. за чтооооо… рыдает Святослав Никифорович
                                        3. и?

                                        Итак по поводу отчетов из реальных условий.
                                        Текстильное предприятие, около 50 хостов за 1 бросовой машиной. Имееться штатный эникей на обучение которого «а так добавляется новая машина в сеть» было затрачено около 40 минут + неполный рабочий день на постройку роутера. Строилось это нечто 2 года назад — обращений ко мне было тоже ровно 2 — помочь в отлове спамлящих машин (одним глазом в tcpdump посмотреть) и по поводу переезда всего «as is» на новый винт (старый очень страшно начал стучать — sic.)

                                        Общая картинка которую _должен_ видеть ихний эникей/начальство при тыке кнопочки «статистика» рандомного пользователя (да там просто у каждого своя айпишка + дхцп на статических хостах)

                                        Общая статистика:


                                        Как это в общем выглядело в исполнении этого работника (день, неделя, месяц, год):



                                        Когда же и сколько использовано интернетов:


                                        Куда ходилось если уж очень неймется:


                                        Как это выглядело в исполнении всего колектива:


                                        Ну и собственно еще все поверху для души приконтраливаеться cacti (как это выглядит думаю нагуглите сами)
                                        • UFO just landed and posted this here
                                            –1
                                            ОМГ.

                                            Если попросить сильно могу отбекризолвить (+1 строка) и посортировать как угодно (order by же) — уймитесь наконец :)
                                              –1
                                              Да ладно вам, в самом деле. Как шейпить пользователей зависит от ситуации — кто шейпит, кого шейпят, где шейпят. Где-то будет удобней натом, ипфв. А где-то домен стоит и пользователи защищены (от вирусов, рекламы, порнухи) сквидом с авторизацией нтлм.
                              • UFO just landed and posted this here
                                • UFO just landed and posted this here
                                    +1
                                    Кстати к Вам не закралась мысль что никто не запрещает паралельно с NAT-ом можно использовать столь любимый вами squid? Давайте даже реальное и полезное применение постараюсь придумать… ммм… ну действительно можно использовать его как _кеширующий_ прокси и ним же АЦЛками ограничивать размеры загружаемых файлов в случае скажем ооочень медленных интернетов или если интернеты лимитированы по трафику (OMG)
                                    +1
                                    tldp.org/HOWTO/IP-Masquerade-HOWTO/what-is-masq.html

                                    Сидеть и мониторить риалтайм кто-куда-кого? Не не не.
                                    Trafshow/tcpdump если неожиданно возникает вопрос чья вирусня так буйствует прямо сейчас либо постфактум минимум 20 способов наскладировать логов деятельности — от бпф-а до флоутулз.
                                    • UFO just landed and posted this here
                                        –1
                                        >>Риалтаймово полезно(если до 100-200 клиентов)
                                        божеж ты мой — сидите и смотрите в реалтайме за сотней бедных планктонин ходящих по фишечкам?

                                        >>но иногда они как пушка по воробью дают избыточную информацию
                                        а еще есть и греп и фильтра для отбора нужной информации :)

                                        >>Screws up WWW counters and WWW statistics
                                        Oo

                                        >>DNAT наше всё
                                        ну всеравно же к нату и портфорвардингу вернулись :)

                                        >>Сладость прокси в её логах.
                                        А что больше ничем нельзя пологать кто-куда ходил? :)))

                                        >>Иногда есть «творческие» задания по подсчету посещений тех или иных урлов и т.п.
                                        собрать колекцию порноссылок для себя? или построение графика популярности башорга среди планктонин?
                                        Извините не занимался никогда.

                                        • UFO just landed and posted this here
                                            0
                                            Вчитался — какая, то наркоманская статья в целом. Закинул я в принципе ее только за тем чтобы вы уверовали что нету панацеи. Ни от чего — небыло и нету. Я уже где-то упоминал что руководствоваться в решении любой задачи можно только поставленной задачей и никакой религией и личными предпочтениями нивкоем случае — это влечет за собой либо кривость/невозможность реализации либо излишнюю непрозрачность решения.
                      0
                      Кофемолку зачастую найти труднее, чем железо, которое будет вертеть на себе FreeBSD. Вы посмотрите что у Cisco внутри)
                        0
                        ничего особенного (смотрю на лежащую на столе 2850) — а что?
                    +1
                    как то выпускать винду в инет в виде роутера, всегда вызывает некоторые опасения, хотя наверно пользователю винды поднять керио значительно проще %) (это если не говорить о нагрузках...)
                      0
                      Холивар разводить нет желания, не верите что RWF защитит вашу сеть, не ставьте. С нагрузками тожде всё в порядке, 100-200Мб/с без проблем.
                        0
                        Умоляю вас, дома сервачок на бсд у меня раздавал шифрованый вай фай. Я начинающий, но за один вечер освоил кое что и удивился, насколько все наглядно и просто. А придя на новое место работы и увидев керио, честно говоря расстроился. Скоро переведу инет на BSD, бог даст.
                          –1
                          я всегда считал, что тут разница подходов :) понимаете, со знаниями основ ИТ грамотности, бздя или линукс понимаются гораздо проще, чем виндовс, но без знания оных, по менюшкам зачастую лазить нагляднее и проще, хотя когда начинаешь копать глубже, и понимать, что в менюшки надо лезть все глубже и глубже снова становится легче бздя и линукс с конфигами и командной строкой, но это лично мой опыт, может быть у кого то иначе.
                            –1
                            >>со знаниями основ ИТ грамотности
                            >>…
                            >>без знания оных
                            А что с таким набором знаний, точнее их отсутствием кто-то подпустит кого-то что-то конфигурить, особенно если еще от этого зависит жизнедеятельность фирмы?
                              –1
                              :))) допускают!
                                0
                                искренне сожалею
                      0
                      ну хотя б правило, в фаервол чтоб ssh открытым остался :) (или я чет пропустил?)
                        0
                        пропустили — options IPFIREWALL_DEFAULT_TO_ACCEPT
                          0
                          оу, ну да, у меня как то все время наоборот было, в параметры ядра не посмотрел…
                            0
                            Естественно, никто ж не запрещает и даже рекомендует сделать дефолтным полиси deny ;)
                        0
                        а почему на картинке вверху 2 интернета, а в схеме пониже — только один?
                        куда второй потерялся?
                          +1
                          второй интернет это про PBR из свежего пишущегося манускрипта — Тайна незанятого xl0 или как сделать интернет «всегда» :)
                            +1
                            озадачил.
                            жду раскрытия темы.
                              0
                              думаю можно раскрывать и тут, и в ширь, VPN тоже интересная тема ;)
                                0
                                ничего в ни в vpn ни в ipsec ни в pppoe в контексте топика не вижу
                          +1
                          Спасибо, интересно было прочитать и кое что узнать
                          Вот если бы в таком направлении но более глубоко, вообще б цены небыло для меня
                          жду продолжение…
                            +1
                            Более глубоко в этом направлении можно найти в гугле.
                              0
                              Смотря в каком конкретно направлении. В любом случае если очень хочеться вникнуть в тонкости гугл должен быть лучшим другом и советником — никто не спорит.
                                0
                                я это понимаю и знаю, просто высловил пожелание
                                кто ищет тот всегда найдет ;)
                                  +1
                                  «высловил»? И вам здравствуйте землячок :)
                            • UFO just landed and posted this here
                                +1
                                исправился
                                  +2
                                  Зато стиль прикольный
                                  0
                                  А в сторону NoDeny что-то сказать можете?
                                    –1
                                    Могу сказать что это АСР (вот такой веселый класс продуктов) которая не имеет к НАТу никакого отношения :)

                                    Денюжку считать можно много чем (netams/stargazer/abills/nodeny/utm/freenibs/и еще длинный ряд специфичных продуктов) и моно как. Лично последних лет 8-9 работал плотно только со stargazer/abills и двумя текущими самописами.

                                  Only users with full accounts can post comments. Log in, please.