Маршрутизатор на линуксе своими руками

Добавил пользователь Евгений Кузнецов
Обновлено: 04.09.2024

Untangle Gateway 7.0.1

Endian Firewall Community 2.3

IPCop Firewall 1.9.8

Open — весь исходящий трафик разрешен;
Half-Open — разрешено подключение только по основным портам, потенциально опасные соединения блокированы;
Closed — все исходящие соединения блокированы.

Vyatta CE 5

Настраиваем сетевой интерфейс:

Аналогично включаются и остальные сервисы — nat, dns, dhcp-relay, dhcp-server, webproxy, ssh. В консоли доступно автодополнение: нажимая , получаем список возможных значений. Подтверждаем все установки.

Смотрим, что получилось:

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

Заключение

Победителя каждый выберет себе сам, исходя из конкретных задач. Мне лично нравится Vyatta за гибкость и Cisco-подобные команды, Endian Firewall и Untangle — за оснащенность. Тем, кому нужны простота в настройках, присмотритесь к SmoothWall и IPCop.

16 комментариев

IPCop Firewall 1.9.8 это бета версия
последний стабильный релиз 1.4.21

Домашний роутер на Linux (Linux Home Router)

Этот гайд я хотел написать очень давно. В свое время много искал в инетах, находил кусками по разным аспектам создания домашнего роутера на Linux, но вот полноценного гайда от и до так и не нашел.

Актуальность

В настоящее время скорости подключения предоставляемые провайдерами выросли на порядки и с другой стороны прибавилось различных устройств дома, которые потребляют этот интернет: если например четверо жителей в квартире, у каждого телефон, у папы еще и планшет и у дочки планшет и еще есть пару настольных компьютеров или ноутбуков, то это уже 8 устройств потребляющих интернет. Кроме этого еще и тип потребляемого контента изменился, от страниц HTML все больше переходит к прослушиванию музыки, просмотру видео, или же загрузки видео. Одним слово скорость и обьемы передачи данных выросли значительно. Все это накладывает определенные требования на роутеры. Обычные общедоступные роутерытипа D-Link, TP-Link, ASUS и т.п., купленные 2-3 года назад уже захлёбываются от пропускаемого через них трафика. Их мощности уже не позволяют обрабатывать такой поток, они просто не рассчитаны на него. Все это выражается в разного рода задержках, потере пакетов, ухудшении качества видео, потере кадров, глюках в играх и тому подобных проблем. Роутеры нового поколения уже рассчитаны на подобный трафик, но стоят денег и немалых. От 10 до 30 тысяч рублей. Но ведь есть же другой путь. У многих еще валяются в кладовке забытые старые компы, где-то еще в разобраных корпусах, а если не валяются, то в изобилии полно преложений на том же Авито о продаже по цене около 1 тыс. рублей. А ведь из этого компа можно собрать роутер на операционной системе Linux, и работать он будет на порядок быстрее самого быстрого роутера, даже тот же Pentium 4. В настройке нет ничего сложного, и любой человек с минимальными знанимями в области информационных технологий, который отличает IP адрес от MAC адреса сможет настроить себе роутер на LINUX, за час, два и забыть обо всех проблемах с инетом навсегда, при этом не тратя безумных денег. Вот об этом и будет наш гайд.

Железо

Подойдет практически ЛЮБОЙ компьютер. Главное требование — наличие 2-х сетевых карт. Одна может быть встроенная, вторую можно купить за 100-250 рублей и вставить в PCI (PCI-E) слот. Не рекомендую использовать USB-сетевые карты, хотя это и возможно, но в этом гайде я тонкости работы с USB картами описыать не буду.
В нашем гайде мы будет использовать Linux дистрибутив Centos 7, который имеет минимальные рекомендуемые системные требования:

Память: 1ГБ на логический ЦПУ (ядро процессора)
Диск: 20 ГБ

Одно замечание. Обычно роутеры стоят в квартире: в коридоре или в комнате и шум от работающих вентиляторов (а компьютере их как минимум 2) может здорово раздражать. Если комьютер старый, то рекомендую заменить вентиляторы. Разберите блок питания, надо открутить всего 4 болта, и почистить или поменять (открутить еще 4 винта и скрутить 2 проводка) вентилятор на блоке питания. Тоже сделать с вентилятором на процессоре. На работу самого роутера это никак не повлияет.

Допущения

В своем гайде я предпологаю, что провайдер предоставляет вам подключение по читому Ethernet, без всяких PPOE и других VPN технологий и аутентификация абонента происходит по MAC адресу. Т.е. на внешнем интерфейсе роутера должен быть определенный MAC адрес, чтобы работал интеренет. Никаких паролей не требуется. Сейчас так подключено 90% всех пользователей интернета в России.

Загрузка образа и создание загрузочной флешки

Загружаем устанавливаем и запускаем программу записи образов дисков на флешку, вставляем флешку — все информация на флешке будет перезаписана.


1 — нажимаем на кнопку с папкой, выбираем загруженный образ. По умолчанию программа показывает только файлы с расширением .img поэтому выбираем показать все файлы *.*
2 — выбираем флекшу для записи
3 — нажимаем записать. Процесс записи начнется и в результате у вас будет загрузочная флешка.

Установка Centos 7

Зайдите в БИОС и установите загрузку с флешки с Centos.

Там все просто, нам подойдут настройки по умолчанию, как раз как описано.

Подключение в существующую сеть

Определите какой сетевой интерфейс будет внешним, т.е. смотрящим в Интренет, а какой внутренним — смотрящим в локальную сеть. Лучше даже подписать на корпусе, чтобы не спутать потом. Встроенную карту лучше использовать как внутренний интрефейс, в вставленную — как внешний, потому что в общем случае скорости на внешнем интрефейсе ниже чем в локалке.

Нам надо закачать необходимые пакеты, поэтому подключите компьютер к существующей сети ВНЕШНИМ интерфейсом. Предпологаю, что у вас есть доступ в интернет и IP адреса выдаются существующим роутером.

Заходим в Linux либо под пользователем root, если вы задали при настройке его пароль, либо под созданным пользователем в процессе настройки. Даем следующую команду:

она покажет сетевые интерфейсы и их настройки:

[user1@router ~]$ ip a
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: enp1s0:
mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:50:db:00:70:5e brd ff:ff:ff:ff:ff:ff
inet 192.168.33.1/24 brd 192.168.33.255 scope global noprefixroute enp1s0
valid_lft forever preferred_lft forever
3: enp2s0:
mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
link/ether f4:6d:04:3e:5e:9e brd ff:ff:ff:ff:ff:ff
valid_lft 26366sec preferred_lft 26366sec

Что же мы здесь видим? lo — внутренний интерфейс, присутствует по умочанию нам особенно не интересен, enp1s0 и enp2s0 это и есть наши сетевые карты причем одна в состоянии UP с настроенным внутренним IP адресом — это та, которую мы подключили в нашу сетку (будущий внешний интерфейс), а вторая в состоянии DOWN это будущий внутренний интерфейс, к которому не подключен кабель.

Если это так то можете пропустить следущий шаг. Если вы видите интерфейс в состоянии UP но inet адреса на нем нет, надо будет его настроить.

Предварительная настройка интерфейса

Заходим под пользователем root. Даем команду nmtui, открывается меню настройки интерфейсов. Вибираем Edit Connection, нажимает Enter.


В списке интерфейсов вибираем нужный нам интерфейс, нажимаем Enter


Перемещение по пунктам меню осуществляеся с помощью клавиши Tab. Переходим на пункт Show напротив IPv4 CONFIGURATION, нажимаем Enter.



Выставляем или убеждаемся, что настойки выставлены IPv4 CONFIGURATION — Automatic, Automatically connect — X ( с помощью клавиши пробел), Available for all users — X. Перемещаемся на ОК и нажимаем Enter.

Опять попадаем в меню выбора интрефейсов нажимаем Back, попадаем в главное меню, стрелочкой вниз доходим до Quit, нажимаем Enter. Выходим из программы.

Инициируем сетевые интерфейсы, чтобы применились настройки, даем команду

Снова даем команду ip a убеждаемся что ip адрес получен.

Доброго времени суток. Есть такая задача поставить компьютер с 3-мя сетевыми картами, в которые идут 3 разные сети:

  1. 10.11.0.0/16
  2. 172.20.0.0/16
  3. 192.168.1.0/24

Ни одна сеть не должна видеть другую сеть, но админские компьютеры (например 10.11.10.7) должны видеть другие сети по всем портам.

Как мне это сделать через iptables ? Я уже просто окончательно запутался.

3 ответа 3

ИМХО самое простейшее - не делать этот комп шлюзом по умолчании. На компах адинистраторов прорписать route add для подсетей, указав этот комп в качестве роутера. Другие просто не будут знать, что так можно ходить ;)

@skykub, Хотя нет всё нормально. Я только пинговал и больше ничего не делал, а на самом деле всё остальное работает. Так даже лучше. Спасибо

Если делать тупо то ставьте на писюк линукс Ubuntu/CentOS/FreeBSD что вам ближе. Ставьте три сетевые карточки (если есть управляемый коммутатор который у меет VLAN'ы 802.1q я бы сдела на vlan'ах) на каждый сетевой интерфейс вешайте по ip-адресу из каждой сети. Например: 10.11.0.1/16172.20.0.1/16192.168.1.1/24

Включите пересылку пакетов между интерфейсами How to Enable IP Forwarding in Linux

Как настроить vlan'ы HowTo: Configure Linux Virtual Local Area Network (VLAN) как преимущество нужна только одна сетевая карта.

@huffman, то что надо 3 сетевые карты я знаю. Я извиняюсь забыл дописать настройки сетевых карт. Но как iptables настроить я все равно не понял.

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

Запрещаем всеiptables -P INPUT DROPразрешаем все для интерфейса loiptables -A INPUT -i lo -j ACCEPTразрешаем трафик для из сети 192.168.0.0/24 через интерфейс eth0iptables -A INPUT -i eth0 -s 192.168.0.0/24 -j ACCEPT

Для удобства общения с iptables использую Shorewall - там лексика построения правил менее запутанная. После конфигурирования и запуска Shorewall пропишет правила в iptables.
Shorewall

Всё ещё ищете ответ? Посмотрите другие вопросы с метками маршрутизация linux или задайте свой вопрос.

Похожие

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

дизайн сайта / логотип © 2022 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2022.1.28.41300

Как мы и ожидали в предыдущих руководствах этой серии LFCE ( сертифицированный инженер Linux Foundation ), в этой статье мы обсудим статическую и динамическую маршрутизацию IP-трафика с конкретными приложениями.


Перво-наперво, давайте дадим несколько определений:

Расширенная настройка IP и сетевых устройств

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

Центральная утилита в пакете iproute называется просто ip. Его основной синтаксис следующий:

Где object может быть только одним из следующих (показаны только наиболее часто встречающиеся объекты - вы можете обратиться к man ip для получения полного списка):

  1. ссылка : сетевое устройство.
  2. addr : адрес протокола (IP или IPv6) на устройстве.
  3. route : запись в таблице маршрутизации.
  4. правило : правило в базе данных политик маршрутизации.

В то время как команда представляет собой конкретное действие, которое может быть выполнено с объектом. Вы можете запустить следующую команду, чтобы отобразить полный список команд, которые можно применить к определенному объекту:


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

В этом примере мы отключим и включим eth1 :


Если вы хотите снова включить eth1,

Вместо отображения всех сетевых интерфейсов мы можем указать один из них:

Что вернет всю информацию для eth1.

Вы можете просмотреть свою текущую основную таблицу маршрутизации с помощью любой из следующих 3 команд:


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

Хотя в настоящее время ip-команда предпочтительнее маршрута, вы все равно можете обратиться к man ip-route и man route для подробного объяснения остального. колонн.

Мы хотим маршрутизировать пакеты icmp (ping) с dev2 на dev4 и наоборот (обратите внимание, что обе клиентские машины находятся в разных сетях). Имя каждой сетевой карты вместе с соответствующим IPv4-адресом приводится в квадратных скобках.

Наша тестовая среда выглядит следующим образом:

Давайте посмотрим на таблицу маршрутизации в dev1 (поле CentOS):

а затем измените его, чтобы использовать его сетевой адаптер enp0s3 и подключение к 192.168.0.15 для доступа к хостам в сети 10.0.0.0/24:


Аналогично в dev4 (поле openSUSE) для проверки связи с хостами в сети 192.168.0.0/24:


Наконец, нам нужно включить пересылку в нашем маршрутизаторе Debian:

А теперь пингуем:



Чтобы сделать эти настройки постоянными при загрузке, отредактируйте /etc/sysctl.conf на маршрутизаторе и убедитесь, что для переменной net.ipv4.ip_forward установлено значение true, как показано ниже:

Кроме того, настройте сетевые адаптеры на обоих клиентах (найдите файл конфигурации в /etc/sysconfig/network в openSUSE и /etc/sysconfig/network-scripts в CentOS - в обоих случаях он называется ifcfg-enp0s3 ).

Вот файл конфигурации из окна openSUSE:

Другой сценарий, в котором компьютер с Linux можно использовать в качестве маршрутизатора, - это когда вам нужно совместно использовать подключение к Интернету с частной локальной сетью.

В дополнение к настройке пересылки пакетов и статической таблицы маршрутизации в клиенте, как в предыдущем примере, нам нужно добавить несколько правил iptables в маршрутизатор:

Первая команда добавляет правило в цепочку POSTROUTING в таблице nat (преобразование сетевых адресов), указывая, что сетевая карта eth0 должна использоваться для исходящих пакетов.

Только часть вывода:

показано на следующем снимке экрана.


Где выделены источник (частный IP-адрес openSUSE box) и пункт назначения (Google DNS) пакетов. Это результат бега:

в окне openSUSE.

Как я уверен, вы уже догадались, маршрутизатор использует Google 8.8.8.8 в качестве сервера имен, что объясняет, почему пункт назначения исходящих пакетов указывает на этот адрес.

Не забудьте сделать свои правила iptables постоянными, выполнив действия, описанные в части 8 - Настройка брандмауэра Iptables из этой серии.

Динамическая маршрутизация с Quagga

В настоящее время наиболее часто используемым инструментом для динамической маршрутизации в Linux является quagga . Это позволяет системным администраторам реализовать на относительно недорогом сервере Linux те же функции, которые предоставляются мощными (и дорогостоящими) маршрутизаторами Cisco.

Сам инструмент не обрабатывает маршрутизацию, а скорее изменяет таблицу маршрутизации ядра, поскольку он изучает новые лучшие маршруты для обработки пакетов.

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

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

Чтобы установить quagga в выбранный вами дистрибутив:

Мы будем использовать ту же среду, что и в примере № 3, с той лишь разницей, что eth0 подключен к главному шлюзу-маршрутизатору с IP 192.168.0.1.

Затем отредактируйте /etc/quagga/daemons с помощью,

Теперь создайте следующие файлы конфигурации.

и добавьте эти строки (замените на имя хоста и пароль по вашему выбору):

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

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

В этом примере мы будем использовать следующую настройку с двумя маршрутизаторами (не забудьте создать файлы конфигурации для маршрутизатора №2 , как описано ранее):


Важно: не забудьте повторить следующую настройку для обоих маршрутизаторов.

Подключитесь к zebra (прослушивание порта 2601 ), который является логическим посредником между маршрутизатором и ядром:

Введите пароль, который был установлен в файле /etc/quagga/zebra.conf , а затем включите конфигурацию:

Введите IP-адрес и сетевую маску каждой сетевой карты:


Теперь нам нужно подключиться к терминалу демона RIP (порт 2602):

Введите имя пользователя и пароль, как указано в файле /etc/quagga/ripd.conf , а затем введите следующие команды полужирным шрифтом (комментарии добавлены для пояснения):


Примечание. В обоих случаях конфигурация добавляется к ранее добавленным строкам ( /etc/quagga/zebra.conf и /etc/quagga/ripd.conf ). .


Если вы хотите попробовать другие протоколы или настройки, вы можете обратиться к сайту проекта Quagga для получения дополнительной документации.

Заключение

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

Читайте также: