Как сделать роутер на debian

Добавил пользователь Alex
Обновлено: 18.09.2024

[How To] Поднимаем полноценную Wi-Fi точку доступа на Debian 7

Правила форума
Условием использования нашего форума, является соблюдение настоящих Правил форума.

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

[How To] Поднимаем полноценную Wi-Fi точку доступа на Debian 7

10 окт 2014, 14:19

Поднимаем полноценную Wi-Fi точку доступа на Debian 7
Немного предыстории.
Озаботился я организацией точки доступа (далее просто ТД) давно, а у домашний роутер был без Wi-Fi. Была, конечно, мысль приобрести "навороченный" девайс, так сказать, "на вырост" и забыть. Поход по магазинам и etc. не увенчалась успехом - не позарился я на китайщину, а на топовые модели не глядел даже. Жаба не позволила.
И тут пришла в голову другая мысль. Ведь есть у меня PCI-карточки Wi-Fi и, если они могут принимать WiFi, значит должны его раздавать. Не долго думая, пошукал по сусекам и у меня оказалось в распоряжении 2 карточки:

Не буду описывать все этапы воплощения задуманного в жизнь. Поиск в интернете по фразе "создание точки доступа" давал много информации из которой я испробовал почти всё.
Первый заход был попыткой создания ТД на Windows 7 (XP устарела уже и, как оказалось, не умеет такого).
Результат в итоге плачевный. Слабый сигнал, в трёх метрах от ТД связь пропадала. Часто без причины падала сеть.

Второй заход, более удачный, был попыткой создания ТД на Debian 7.
Итог: Сигнал не пропадал по всей квартире. Сеть была стабильной. Интернет был доступен. Чего ещё надо-то?
А вот не угодил мне этот способ. Интернет есть, а ресурсы локальной сети напрямую недоступны, так как ТД имела свою сеть и была за NAT. непорядок.

Немного теории.
Совместимость оборудования
Как оказалось, не каждая карта Wi-Fi умеет работать в режиме Master, т.е. как ТД. Китайский noname сразу был назначен карточкой для проверки сети из-за невзрачного внешнего вида и хлипкой антеннки. А вот DWL-G550 и выглядела солидно на вид, и на деле имела нужное нам свойства - умела раздавать Wi-Fi.

А как определить уже установленное оборудование на предмет работы в AP (Acsses Point англ. - Точка Доступа)? Всё просто.
Идём в консоль (у нас же Debian, кстати, для Ubuntu тоже подходит ) и набираем команды:

Установка и настройка программ.
Нам понадобится минимум пакетов:

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

Теперь настроим hostapd, который "рулит" нашей картой Wi-Fi.
Укажем путь к конфигу

На самом деле настроек в файле hostapd.conf может быть на много больше и в разных вариантах.
Насколько смог, собрал основные параметры и настройки с таблицу.
Смотрите под спойлером.

Кстати, на будущее, если что-то "наколбасили" в конфиге и hostapd категорически не желает запускаться, не отчаивайтесь. Если hostapd запустить с ключом -d и указать наш многострадальный конфиг, то можно увидеть где засела ошибка. Например:

Оказалось, то забыл дописать строку wpa_passphrase с паролем.

Настройка iptables и ip форвардинга
Далее, нам нужно настроить хождение всех сетевых пакетов между интерфейсами в правильном направлении. Для этого создадим файл с правилами:

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

Ваш старый компьютер Pentium 4 может быть использован в качестве полнофункционального маршрутизатора. Установить Ubuntu/Debian и следовать этот шаг для установки Ubuntu в качестве маршрутизатора.

Вы можете взять контроль над каждым потоком данных через маршрутизатор.

Хорошо, давайте начнем. Настройка маршрутизатора на Ubuntu или Debian, чтобы настроить маршрутизатор необходимо нужно две сетевые карты

Настройка Ubuntu или Debian в качестве маршрутизатора

ОС – Ubuntu LTS
Номер NIC – 2
Порт LAN IP (eth0) – 192.168.1.1/24
Порт WAN IP (eth1) – 172.16.1.1/24

1. Установите необходимые инструменты

Iptables используется для управления брандмауэром, маршрутизации. Вы можете прочитать подробности здесь.

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

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

Вам необходимо установить имя домена и сервера имен:

Увеличение времени аренды. Время устанавливается в секундах:

Директива authoritative должна быть раскомментирована:

Я уже писал ранее, о проблемах с роутером, но увы более свежая версия прошивки особо ситуация не изменила. Имеется так-же назовем его, домашний сервер, под управлением Debian 7, всякое разное на нем, от мультимедиа, до этого сайта. Так же в нем имеется 2 сетевых карты, встроенная и внешняя. До этого момента использовал встроенную, подавал собственно на нее интернет с роутера на сервер.

И вот давно меня посещала мысль, пожалуй с самой покупки сервера, пустить интернет через него, даже внешнюю сетевую сразу покупал. Но на момент покупки железа для сервера с Debian 7 да и целом с линуксом был практически не знаком, да и основная цель покупки изучение операционной системы линукс на данный момент оправдана, не такой уж я специалист конечно еще, но значительный прогресс по сравнению с 2013 годом есть. Какие то базовые вещи нужные мне уже знаю помню, и проще познавать что-то новое.

В общем ладно, получилась такая большая предыстория, а теперь к делу.

Какая была поставлена задача, завести интернет во внешнюю сетевую карту eth1. Затем передать интернет встроенной eth0 и далее с нее на LAN роутера, а дальше в остальные LAN порты необходимые устройства + остается на раздача WI-FI.

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


Каждый выход в интернет не только дает возможность подключаться к различным серверам и сайтам, но и создает потенциальную опасность проникновения на наш компьютер извне. Не стоит пренебрегать этой опасностью. Ситуация усугубляется оттого, что в некоторых (пока еще) широко распространенных операционных системах по умолчанию остаются открытыми многие порты, что позволяет подключаться из интернета к пользователю незаметно для последнего. Поэтому в основу любого фаервола должны быть заложены правила по закрытию и контролированию портов. В нашем случае действуют политики по умолчанию — всё закрыть, открыть извне только то что нам необходимо («block everything, then open up holes as neccessary«), а также сам шлюз и компьютеры локальной сети могут открывать порты в обратную сторону самостоятельно.

Вот что у меня будет:

3G modem USB (ppp0) со статическим IP 123.456.789.012
Ethernet (eth0) IP 192.168.1.1
Wi-Fi USB (wlan0) IP 192.168.0.1
OpenVPN (tun0) IP 10.8.0.1

Замутил все это дело на вот такой штуке, если интересно Fujitsu-Siemens FUTRO A250


Вообще, это тонкий клиент ? Но я поставил в него CF card 32GB и установил Debian 8.4

Не смотря на то, что ОЗУ всего 256мб, справляется он очень хорошо.

Приступим. Для того чтобы наш шлюз раздавал dns клиентам необходимо поствить dnsmasq, а также на всякий случай убедиться что пакет iptables установлен в системе (хотя я не помню ни одного случая чтобы он по-умолчанию в Debian не был установлен):

Настраивать dnsmasq никак не надо — если у вас стоит какой-то другой кэшируюший dns-сервер то dnsmasq устанавливать нет необходимости.
Так же нам понадобится DHCP сервер (хотя можно и использовать dnsmasq)

По настройке isc-dhcp-server можно почитать отдельную статью на этом сайте.
В нашем случае вот примерно как будут выглядеть скрипт настройки iptables:

Теперь сделаем, чтобы правила загружались при запуске системы. Добавим в файл /etc/network/interfaces строчку

Как мы и ожидали в предыдущих руководствах этой серии 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. Не стесняйтесь добавлять столько маршрутизаторов, сколько хотите, и экспериментируйте, сколько хотите. Не стесняйтесь обращаться к нам, используя контактную форму ниже, если у вас есть какие-либо комментарии или вопросы.

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