The Perfect SOHO router – Част 4

След като вече сме инсталирали нашият рутер и сме пуснали някои
услуги е време да конфигурираме самият процес на рутиране. Това се
постига чрез стандартни инструменти като route, iptables, arp, iproute2.

В тази част ще покажем следните варианти:

  • Прост елементарен рутер – това е най елементарният но за сметка на това не предлага кой знае какви възможности
  • Рутер който изпълнява NAT/masquerade и firewall функции – това е може би най-разпространеният вариант.
  • Рутер който изпълнява баланс на трафика от два или повече
    доставчика – това вече е по-напреднала тема но въпреки всичко има полза
    от нея.

Примерите и конфигурациите ще са доста опростени като ще покажем
само скелета на системата, тъй като всеки има различни изисквания. В
края на статията ще дам малко връзки с допълнителна информация за
четене и помощ.

Прост рутер

При тази ситуация нашият рутер просто развърта тряфика. В общият случай
не се прави маскиране или филтрация на трафикатъй като като цяло е
решено че не е необходимо. Това решение обикновенно се ползва при
големи мрежи просто за да се сегментира мрежата. Постига се особенно
елеменарно тъй като изисква включване на една единствена опци в кернела
и разрешаването и за изпълнение. Опцията е IP FORWARDING. Може да бъде
разрешена по два различни начина:

Посредством sysctl системата (може да не е налична):

 sysctl -w net.ipv4.ip_forward=1Тази настройка разрешава препращане на пакети между интерфейсите на
рутерът ни и така реално го стартираме. Необходимо е тази настройка да
бъде сложена на такова място че при стартирането на нашата машина тя да
бъде изпълнена автоматично. Добро място за тази настройка е /etc/rc.local или отделен файл който се изпълнява съвсем в края на процеса на стартиране.

Както забелязвате това е един много опростен рутер който не предлага
почти никакви ползи. За да работи правилно всяка от клиентските машини
трябва да има собствен адрес, който е разпознаваем в обхвата на
мрежата. Този рутер не изпълнява филтрация и не предпазва по никакъв
начин машините зад него. Като цяло това решение е удачно за големи
мрежи които искат да сегментират адресното си пространство и които имат
сериозен рутер и firewall на входа им.

Рутер който изпълнява NAT/masquerade и firewall функции

Това е може би най-често използваното решение. Предимствата му са че
зад един адрес могат да се скрият (маскират) доста олям брой машини
(теоретично почти неограничен стига да имаме процесорна мощ).

Конфигурацията за този пример ще изградим при следните предпоставки:

  • Външен интерфейс: eth0 със съответно назначения му адрес и маска
  • Вътрешен интерфейс: eth1 със съответно назначения му адрес и маска
  • Проста защита от DoS, DDoS атаки и сканиране
  • Лимит на специфични ICMP заявки
  • Достъп до http и ssh от външната страна на рутера ни
  • Достъп до http, ssh, dns, dhcp от вътрешната страна
  • SNAT за всички клиенти на рутера ни (дори при динамичен адрес)
  • Препращане на 10 порта за всеки клиент – за удобство на потребителите ни
  • Изрична филтрация на част от боклука във външната/вътрешната ни мрежа

Темата за ограничения по TTL изрично ще я пропусна. Реализира се просто и има достатъчно документация по въпроса.

Като цяло това е един относително добър базов firewall. В него има няколко интересни момента а именно:

  • Начинът по който вземаме адресите на мрежовите карти – както сте
    забелязали единствените променливи които не се извличат това са имената
    на интерфейсите. По този начин самият firewall става по гъвкав и
    приложим за почти всякакъв вид връзки.
  • Начина по който реализираме маскирането. Правим го със SNAT тъй
    като той е по лек отколкото MASQUERADE. За хората които ще кажат че при
    динамични връзки (pppoe, ip идващо от dhcp) това не е подходящо, да по
    принцип сте прави. Обаче ако използваме възможностите на DHCP
    клиента/pppoe клиента това може да бъде избегнато. В момента в който
    нашият адрес бъде подменен можем принудително да изпълним отново нашият
    firewall и той отново да си вземе правилния адрес и да се оправи както
    си му е редът.
  • Начинът по който препращаме портове на машините зад нас –
    използвана е конструкция която е валидна само в bash с която да се
    генерират две числа които използваме за начало и край на обхвата от
    портове. След това експлицитно ги отваряме във веригата FORWARD макар
    че това не е строго необходимо и в последствие ги препращаме чрез DNAT.
  • Обхватът от портове 33434:33524 – тези портове трябва да са отворени за да работи traceroute

Рутер който изпълнява баланс на трафика от два или повече доставчика

Тук ще дадем само частта която реално изпълнява балансирането на
трафика. Вземаме пример само с два доставчика, но разширяването на
примера не е проблем. Задачата е малко по обемиста тъй като за удобство
ще използваме iproute. Самият пакет има доста криптичен синтаксис но
след като му свикнете едва ли ще ви се разделя с него.

За да можем да балансираме трафик ни трябват следните инструменти:

  • iproute2
  • поддръжка в кернела за multipath routing
  • Компилиран в кернела поне една дисциплина за multipath routing – аз лично препоръчвам wrr

За да можем да използваме имена в конфигурацията е необходимо да ги добавим във файла /etc/iproute2/rt_tables. Индексите им са между 2 и 252. Ако ще балансирате повече от 200 доставчика … не четете на правилното място.

 

 

Leave a Reply

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">