Как настроить машрутизатор средствами FreeBSD

10 Jun 2011 | Автор: anchous |

В связи с появившимся в обилии свободным временем могу подтянуть все свои стародавние статейки относительно различных фрёвых сервисов, которые уже лет 6-7 валялись у меня на диске в ожидании когда же до них наконец то дойдут руки, и вот потихоньку это время настало.

Так что не боясь предстать капитаном очевидность в этот раз я распишу как организовать программный маршрутизатор средствами FreeBSD. И хотя писалось все это еще под 4.2, но тем не менее и под 7.4 все эти же рецепты применимы, разве только с той разницей, что все пакеты отличаются версиями с большую сторону. Сказать откровенно, я предпочитаю программные маршрутизаторы за их дешевизну, простоту и быстроту в настройке, поскольку для программного маршрутизатора сгодится любая древняя машинка, главное чтобы в ней была возможность поставить дополнительные сетевухи. При этом программный маршрутизатор отличается от аппаратных аналогов тем, что произведя один раз настройку маршрутизатора вы следующий настроите уже за полчаса, а не будите копаться в мануалах нового для вас агрегата, купленного клиентом с оказией, не понимая почему це фича вдруг оказалась багой. К тому же вменяемый аппаратный маршрутизатор стоит не малых денег и вполне сопоставим по стоимости с хорошим компом, который помимо того что будет с сотни раз мощнее, также при этом сможет, естественно при желании, стать принт-сервером, фаерволом, проксей, поточным антивирем и еще чем угодно, и что самое основное- это решение маштабируемое, то есть добавление нового интерфейса сопряжено с гораздо меньшими затратами, нежели при попытке расширения аппаратного маршрутизатора, главное подобрать материнку с 2-3 слотами под сетевуху, ибо найти две интегрированные не проблема. И естественно формула скорость работы/цена для программного маршрутизатора будет на порядки ниже аппаратного, так как стоимость гигабитного маршрутизатора уже будет сопоставима с покупкой мощного сервера для офиса. Ну это просто вода относительно того за что я люблю программные рутеры, а теперь собственно перейдем к самой настройке маршрутизатора.

Для начала устанавливаем систему FreeBSD 7.4 и настраиваем её в соответствии с нашими требованиями, то есть можно настроить как защищенную систему если она торчит в инет, или служит для защиты серверной фермы от локалки; ну а ленивцы могут ограничиться просто установкой нужных пакетов, если она будет служить просто для маршрутизации пакетов между сетями внутренней сети предприятия.

Собственно для начала имеем две сетки: 192.168.0.0/24 (основная) и 192.168.10.0/24 (дополнительная) которые нам и надо совокупить посредством нашего настроенного сервера FreeBSD, в который мы же загодя воткнули две-три-четыре и более сетевых карт (максимум который у меня прекрасно существовал было 5 сопряженных сетей, не считая вирутальных интерфейсов). Предположим что для сетевых интерфейсов мы выбрали IP адреса: 192.168.0.1 и 192.168.10.1

Смотрим что за интернерфейсы установлены в системе:
# ifconfig
тут нам главное понять какой интерфейс какой, для чего не плохо было бы ознакомиться с чипами карт. Порядок интерфейсов обычно идет от проца к периферии, а у дополнительных интерфейсов в зависимости от нумерации слотов, возрастая от видюхи. Но проверить все это можно эмперическим путем просто воткнув рабочий кабель в систему, посе чего интерфейс перейдет из статуса status: no carrier в status: active. Предположим у нас в системе два интерфейса rl0 и rl1.
Поняв какие интерфейсы будем сопрягать, идем в /etc/rc.conf и добавляем необходимый интерфейс, так как там уже должен присуствовать один из интерфейсов, если в процессе настройки системы FreeBSD мы поднимали сетку.
##### /etc/rc.conf #####
ifconfig_rl0=”inet 192.168.0.1 netmask 255.255.255.0″
ifconfig_rl1=”inet 192.168.10.1 netmask 255.255.255.0″
#####################

Чтобы поднять теперь интерфейс, выполним
# /etc/netstart
Второй интерфейс rl1 ожил и теперь пингуется из подсети 192.168.10.1, но для того чтобы сервер настроить как маршрутизатор необходимо в ядре разрешить пересылку пакетов между пакетами, за что отвечает парметр net.inet.ip.forwarding. Его значение в системе в данный момент:
# sysctl net.inet.ip.forwarding
net.inet.ip.forwarding: 0

где значение 0 означает что маршрутизация запрещена, поэтому для включения функционала маршрутизации, нам необходимо присвоить этому значению 1, для чего выполняем:
# sysctl net.inet.ip.forwarding=1
net.inet.ip.forwarding: 0 -> 1

Теперь настройка маршрутизации завершена и маршрутизатор будет фурычить до перезагрузки системы, после чего значение net.inet.ip.forwarding переключится обратно в 0. Для того чтобы избежать этого добавляем в файл /etc/rc.conf следующую строку:
gateway_enable=”YES”
после чего уже безбоязненно можем перегрузить машину.
При такой схеме наш маршрутизатор будет рутить только сопряженные с ним сети, представленные интерфейсами, или же алиасами на интерфейсах, в том же случае когда у нас в сети уже существуют маршрутизаторы, прикрывающие еще какие то сети, то тогда поднимаем на нашей машине статическую таблицу маршрутизации. Делается это также в файле /etc/rc.conf
##### /etc/rc.conf #####
static_routes=”network1 network2 network3″
route_network1=”-net 10.10.15.0/24 192.168.0.25″
route_network2=”-net 172.168.10.0/24 192.168.0.25″
route_network3=”-net 192.168.168.0/24 192.168.10.111″
#####################

то есть мы задаем названия маршрутов, которые дальше выводим в виде сетки, и внешнего, для нашего маршрутизатора, интерфейса шлюза.
Также в случае использовании настроенного сервера FreeBSD в качестве внутреннего маршрутизатора, необходимо на внешнем шлюзе, заданном для рабочих станций и серверов сети дефолтным маршрутом, поднять маршрутизацию на внутреннюю сеть задав маршрут в 192.168.10.0, через 192.168.0.1. На самом деле тут обычно и возникает самый косячный момент, особенно в случае использования интернет шлюзом аппаратных фаерволов типо D-Link, у которых вроде функционал рутинга имеется, но чтобы настроить удаленный маршрут надо долго и упорно танцевать с бубном, так что гораздо проще для нашего уже настроенного маршрутизатора задать дефолтовым маршрутом интернет-шлюз, а все машины предприятия завернуть на него- это добавит лишний хоп, но уберет проблему настройки маршрутизации на сторонних серверах.

VN:F [1.9.21_1169]
Rating: 8.3/10 (4 votes cast)
VN:F [1.9.21_1169]
Rating: +2 (from 2 votes)
Как настроить машрутизатор средствами FreeBSD, 8.3 out of 10 based on 4 ratings

Теги: , ,

Отзывов: 11 на «Как настроить машрутизатор средствами FreeBSD»

  1. Автор: Павел на 27 Jun 2011

    Пожалуйста объясните мне по подробней вот эти строки:
    static_routes=”network1 network2 network3″
    route_network1=”-net 10.10.15.0/24 192.168.0.25″
    route_network2=”-net 172.168.10.0/24 192.168.0.25″
    route_network3=”-net 192.168.168.0/24 192.168.10.111″
    Что куда и как заворачивается, просто я во FreeBSD новичек и немного не в курсе… Заранее благодарю!
    P.S.: Я так понимаю что 192.168.0.25, 192.168.10.111 – адреса свичей, или компьютеров соединяющих подсети одной локальной сети!? А адрес карточки на маршрутизаторе значение имеет????

    [Reply]

    anchous Reply:

    Эти IP адреса (192.168.0.25, 192.168.10.111 ) адреса сетевых интерфейсов других, имеющихся в сети маршрутизаторов, которые смотрят в сопряженные с вашим рутером сетки.
    То есть 0.25 смотрит в сеть 192.168.0.0/24, а 192.168.10.111 в сеть 192.168.10.0/24

    [Reply]

    VN:F [1.9.21_1169]
    Rating: 0.0/5 (0 votes cast)
    VN:F [1.9.21_1169]
    Rating: 0 (from 0 votes)
  2. Автор: Евгений на 09 Aug 2012

    Добрый день! Недавно начал изучение FreeBSD и столкнулся со следующей проблемой(простейший пример маршрутизации описанный вами выше):
    FreeBSD-сервер НЕ ВЫПОЛНЯЕТ МАРШРУТИЗАЦИЮ из одной сети в другую!
    1. Свежеустановленная FreeBSD 9.0
    2. Две сетевые карты em0 em1
    3. IP-адреса маски, шлюз по умолчанию, опция gateway_enable, net.inet.ip.forwarding прописаны верно!
    4. Ping с сервера в сеть №1 и в сеть №2 идет!
    5. Ping с компьютеров на em0 и em1 тоже идет!

    А ВОТ PING МЕЖДУ КОМЬЮТЕРАМИ ИЗ СЕТИ №1 и №2 не идет!!! В ЧЕМ МОЖЕТ БЫТЬ БЕДА???

    [Reply]

    anchous Reply:

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

    [Reply]

    VN:F [1.9.21_1169]
    Rating: 0.0/5 (0 votes cast)
    VN:F [1.9.21_1169]
    Rating: 0 (from 0 votes)
  3. Автор: Евгений на 10 Aug 2012

    Огромное спасибо за отклик. Tracert к сожалению помочь мне ничем не может. Вот более подробное описание:
    - сеть №1 em0 (192.168.1.0/24) в ней PC Win7 (192.168.1.5/24 default gateway 192.168.1.60)

    - сеть №2 em1 (192.168.0.0/24) в ней internet-router (192.168.0.1/24), *так же есть и другие компы… которые через этот шлюз выходят в интернет*.

    - freebsd 9.0
    ——- rc.conf———–:
    hostname=”FreeBSD1″

    defaultrouter=”192.168.0.1″
    gateway_enable=”YES”

    ifconfig_em0=” inet 192.168.1.60 netmask 255.255.255.0″
    ifconfig_em1=” inet 192.168.0.60 netmask 255.255.255.0″

    sshd_enable=”YES”
    moused_enable=”YES”
    dumpdev=”NO”

    ——- ifconfig ———–:

    em0: flags=8843 metric 0 mtu 1500
    options=9b
    ether 00:0c:29:df:f3:00
    inet 192.168.1.60 netmask 0xffffff00 broadcast 192.168.1.255
    inet6 fe80::20c:29ff:fedf:f300%em0 prefixlen 64 scopeid 0×2
    nd6 options=29
    media: Ethernet autoselect (1000baseT )
    status: active
    em1: flags=8843 metric 0 mtu 1500
    options=9b
    ether 00:0c:29:df:f3:0a
    inet 192.168.0.60 netmask 0xffffff00 broadcast 192.168.0.255
    inet6 fe80::20c:29ff:fedf:f30a%em1 prefixlen 64 scopeid 0×3
    nd6 options=29
    media: Ethernet autoselect (1000baseT )
    status: active

    ——–netstat -rn: ———–
    Destination Gateway Flags Refs Use Netif Expire
    default 192.168.0.1 UGS 0 0 em1
    127.0.0.1 link#7 UH 0 0 lo0
    192.168.0.0/24 link#3 U 0 325 em1
    192.168.0.60 link#3 UHS 0 0 lo0
    192.168.1.0/24 link#2 U 0 22 em0
    192.168.1.60 link#2 UHS 0 0 lo0
    ——————————-
    net.inet.ip.forwarding: 1
    ——————————-

    ПИНГ С FREEBSD
    ping 192.168.0.1 – OK
    ping 192.168.1.5 – OK

    ——————————-
    ПИНГ с WIN7 (192.168.1.5)
    ping 192.168.1.60 – OK
    ping 192.168.0.60 – OK
    ping 192.168.0.1 – FCUK!!! – в смысле НЕТУ!
    ——————————-
    ПИНГ с компов из сети 192.168.0.0 на комп 192.168.1.5 тоже не проходит. (шлюз для компов из этой сети менял на 192.168.0.60)

    ——————————-

    Можно что-то посоветовать?

    [Reply]

    anchous Reply:

    трейс как раз вам и должен был бы помочь, ибо точно бы диагностировал куда идет пакет и где происходит затыка, так как судя по вашей схеме, могу предположить что для машин подсети 192.168.0.0/24 дефолтным шлюзом стоит 192.168.0.1, на котором не прописан маршрут в подсеть 192.168.1.0

    [Reply]

    VN:F [1.9.21_1169]
    Rating: 0.0/5 (0 votes cast)
    VN:F [1.9.21_1169]
    Rating: 0 (from 0 votes)
  4. Автор: Евгений на 10 Aug 2012

    ничего лишнего на систему не устанавливал.. типа фаервола.. ната и тд. система была абсолютно чистая, свежеустановленная… переустанавливал несколько раз… устанавливал и на виртуальной машине и на реальной, с оборудованием всё в порядке.

    [Reply]

    VA:F [1.9.21_1169]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.21_1169]
    Rating: 0 (from 0 votes)
  5. Автор: Евгений на 10 Aug 2012

    ********************************
    упростил до минимума :

    две сети (em0,em1), между ними FreeBSD.
    в каждой сети по одному компу, с настройками шлюза на соответствующий интерфейс FreeBSD.

    всё что описано выше остается так же.

    tracert -d 192.168.1.5
    —-
    C:\Users\STV>tracert 192.168.1.5

    Трассировка маршрута к 5.1.168.192.in-addr.arpa [192.168.1.5]
    с максимальным числом прыжков 30:

    1 <1 мс <1 мс <1 мс 60.0.168.192.in-addr.arpa [192.168.0.60]
    2 * * * Превышен интервал ожидания для запроса.

    Из другой сети так же!!!

    Что делать???

    [Reply]

    anchous Reply:

    с 9кой не работал, но вроде в ней никаких кардинальных изменений не было, так что все должно рвботать, посему проверяйте синтаксис файлов, маски, и могу посоветовать только шаманить: добавить на дефолтный рутер маршрут в подсеть; убрать со шлюза дефолтный маршрут- посмотреть без него; сменить адресацию второй подсети где один компутер на какую нить вроде 172.16.0.0, отрубить-врубить шлюзование

    [Reply]

    VN:F [1.9.21_1169]
    Rating: 0.0/5 (0 votes cast)
    VN:F [1.9.21_1169]
    Rating: 0 (from 0 votes)
  6. Автор: Сергей на 13 Oct 2012

    Добрый день. Не могли бы помочь.
    Сервер одним концом смотрит в 10.114.172.0/24, а другим в 10.114.173.0/24.
    ———
    em0: inet 10.114.172.50 netmask 255.255.255.0
    em1: inet 10.114.173.1 netmask 255.255.255.0

    IPFW:
    ————-
    cmd=”ipfw -q add”
    oif=”em0″
    iif=”em1″
    oip=”10.114.172.50″
    iip=”10.114.173.1″
    MyLan=”10.114.173.0/24″
    Lan1=”10.114.172.0/24″
    Lan2=”10.114.171.0/24″
    #netmask=”24″
    #netin=”10.114.173.0″

    ipfw -q -f flush

    $cmd allow ip from $MyLan to $MyLan via $iif
    $cmd allow ip from $Lan1 to $MyLan
    $cmd allow ip from $MyLan to $Lan1
    $cmd fwd 127.0.0.1,3128 tcp from $MyLan to not me 80 in recv $iif
    $cmd allow ip from $oip to any out via $oif
    $cmd allow ip from any to $oip in via $oif
    $cmd allow ip from $MyLan to any in via $iif
    $cmd allow ip from $MyLan to any out via $oif
    $cmd allow ip from any to $MyLan in via $oif
    $cmd allow ip from any to $MyLan out via $iif
    ————–
    С компьютера 10.114.172.35 ping идет в другую сеть, а с 10.114.173.20 теряется на сервере. В чем может быть проблема?

    [Reply]

    anchous Reply:

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

    [Reply]

    VN:F [1.9.21_1169]
    Rating: 5.0/5 (1 vote cast)
    VN:F [1.9.21_1169]
    Rating: 0 (from 0 votes)

Ваш отзыв