- Интернет-шлюз на базе Ubuntu Server / Internet Connection Sharing + Squid, Firestarter
- Содержание
- Основная часть
- PPPoE
- Прокси-сервер squid
- Раздача Интернета в локальную сеть c помощью firestarter
- Раздача Интернета в локальную сеть (ICS: Internet Connection Sharing)
- На сервере
- Домашний интернет-шлюз. Начальная настройка 6-портового мини-компьютера на Ubuntu Server 20.04 LTS
- Введение
- Netplan
- DHCP-сервер
- Заключение
- Как создать простой маршрутизатор с Ubuntu Server 18.04.1 LTS (Bionic Beaver)
- ПРЕДПОСЫЛКИ
- 1. НАСТРОЙКА СЕТЕВЫХ ИНТЕРФЕЙСОВ
- 2. НАСТРОЙКА СЕРВЕРА DHCP
- 3. НАСТРОЙКА ФАЙЕРВОЛА
- Наш рецепт отказоустойчивого Linux-роутера
- Компоненты
- Настройка интерфейсов
- Балансировщик основного шлюза
- Настройка keepalived
- Настройка ISC DHCPD
- Настройка PowerDNS
- Заключение
Интернет-шлюз на базе Ubuntu Server / Internet Connection Sharing + Squid, Firestarter
Содержание
Имеется сервер и подключенные к нему клиенты по локальной сети. Сервер имеет выход в интернет. Необходимо устроить раздачу интернета сервером.
Основная часть
Собственно, установка шлюза на базе Ubuntu Server занимает не больше 10-15 минут.
PPPoE
Если Вы используете для подключения по локальной сети PPPoE, вам необходимо просто-напросто ввести в терминале команду:
и дать ответы на вопросы. По окончании работы pppoeconf соединение должно быть установлено.
Если Вы используете для подключения к провайдеруL2TP, то для этого понадобится установить xl2tpd — демон l2tp и pppd — демон ppp. 1)
Редактируем файл настроек xl2tpd:
Записываем в файл chap-secrets логин и пароль:
соединение должно быть установлено.
На установленной машине Интернет появился. Теперь надо добавить включить все репозитарии в /etc/apt/source.list и выполнить:
Для доступа с других машин вашей локальной сети необходимо поставить всего лишь навсего два малюсеньких пакета:
Или, вы можете использовать DNS провайдера.
Прокси-сервер squid
Squid — программный пакет, реализующий функцию кэширующего прокси-сервера для протоколов HTTP , FTP , Gopher и HTTPS.
Для установки прокси-сервера squid необходимо выполнить команду:
Теперь редактируем конфигурационный файл. Открываем /etc/squid/squid.conf , ищем нужные строки и корректируем следующим образом:
Перезапускаем прокси-сервер командой:
Настраиваем браузеры на клиентских машинах на использование прокси: адрес прокси — пишем IP адрес интерфейса, обращенного в локальную сеть. Скорее всего,это будет 192.168.0.1, порт прокси — указанный в конфигурационном файле 3128.
Желающим сделать прозрачное проксирование необходимо изменить в файле настроек squid.conf одну строчку:
Затем для заворачивания нужных портов на прокси-сервер прописывается правило:
Раздача Интернета в локальную сеть c помощью firestarter
Firestarter – это средство для создания межсетевых экранов для Linux, использующее GNOME. С помощью мастера можно создать базовый межсетевой экран, в дальнейшем его возможности расширяются с помощью динамических правил. Несколькими щелчками мыши можно открывать и закрывать порты или скрывать сервисы, оставляя доступ только к некоторым из них. В программе имеется монитор, который в режиме реального времени показывает попытки поиска злоумышленниками открытых портов.
Для начала установим firestarter :
При настройке указываем интерфейс с Интернетом — ppp0 раздавать на eth1 2)
Раздача Интернета в локальную сеть (ICS: Internet Connection Sharing)
Для организации совместного доступа в Интернет с помощью общего доступа к подключению Интернета на сервере должна быть одна сетевая карта для подключения к внутренней сети и еще одна карта или модем для подключения к Интернету.
На сервере
Для настройки общего доступа к подключению Интернета необходимо выполнить на сервере указанные ниже действия.
Исходные данные: Оба компьютера соединены по сети. На сервере установлено две сетевые карты:
Это можно сделать вручную или используя терминал:
Разрешите направление пакетов. Чтобы сделать это, отредактируйте /etc/sysctl.conf . Откройте сам файл командой:
А затем вставьте следующую строчку:
Для того, чтобы применить это правило до перезагрузки выполните:
Затем добавляем правило для NAT:
Где eth0 название вашего интерфейса через который выходите в интернет. Измените его если используете другой интерфейс (напрмер ppp0) тогда команда будет выглядит иначе:
Установите и запустите пакет для раздачи пакетов по сети:
Или, вы можете использовать DNS провайдера.
Чтобы NAT работал после перезагрузки сохраняем настройки iptables в файл:
И добавляем в конец файла:
Эту строчку, для автоматической подгрузки правил:
Также в этот файл добавляем правила роутинга:
Источник
Домашний интернет-шлюз. Начальная настройка 6-портового мини-компьютера на Ubuntu Server 20.04 LTS
Введение
Обновил я интернет до 500 Мбит/с, и пришло время заняться 100 Мбитным сервером, который работал на Pentium 3 и был уже на грани. Выбор пал на китайского зверя. Все, что нужно — имеется, потребление в обычном режиме не превышает 15W, запас производительности для дополнительных задач есть.
Установку ОС расписывать не буду («ОК — Далее — Далее»), отмечу только, что при установке требуется сконфигурировать хотя бы один сетевой интерфейс для доступа в интернет.
Для удобства я использую Midnight Commander и его текстовый редактор. Работать будем от root-пользователя:
Итак, у нас есть установленная Ubuntu Server, начнем с конфигурации остальных сетевых интерфейсов.
Netplan
В последних версиях Ubuntu появилась утилита Netplan, позволяющая настроить сеть в унифицированном формате и выбирать сетевой менеджер для работы. По умолчанию используется Systemd-networkd, я же выбрал NetworkManager, так как установил Web-интерфейс Cockpit, который использует именно NM для отображения части информации.
Синтаксис конфигурации Netplan очень строгий и лишний пробел или табуляция может вызвать ошибку.
Подробнее о функционале уже расписывали habr.com/ru/post/448400, так же различные примеры есть на сайте netplan.io/examples.
Посмотрим названия интерфейсов:
Перейдем в директорию /etc/netplan и откроем (F4 для МС) файл 50-cloud-init.yaml. Для сетевого интерфейса, который будет использоваться для подключения к интернету, определим получение настроек по dhcp (dhcp4: true). В моем случае это enp6s0. Для остальных укажем false и добавим параметр optional: true, т.к. интерфейс может быть ни к чему не подключен.
Для объединения интерфейсов в локальную сеть я использовал bridge, но, возможно, правильнее было бы использовать vlan. Создадим мост lan-br, зададим общий IP-адрес, DNS-сервер и пропишем объединяемые интерфейсы:
У меня будет собственный DNS-сервер, поэтому указываю адрес своего сервера в поле nameservers, можно указать например 8.8.8.8 (Google). Указываем версию и менеджер. В итоге должно получиться примерно так:
Сохраняем файл и проверяем/применяем конфигурацию:
DHCP-сервер
Настроим DHCP-сервер для того, чтобы клиенты могли получать IP-адреса автоматически.
В файле /etc/default/isc-dhcp-server правим строчку:
Переходим в /etc/dhcp, открываем dhcpd.conf и прописываем настройки:
Теперь клиенты должны получать адреса автоматически.
UFW (Uncomplicated Firewall) — инструмент для более легкой настройки iptables. Настроим фаервол и пересылку пакетов между интерфейсами. Переходим в/etc/ufw и в файле sysctl.conf раскомментируем строку:
Если Вы подключены через ssh перед началом откройте 22 порт:
Включим UFW, проверим состояние:
Зададим политики по умолчанию:
Разрешим доступ из локальной сети:
Настроим NAT. Откроем файл before.rules и пишем следующее перед блоком *filter:
Сохраняемся и перезапускаем ufw:
Проверим iptables, должна появиться наша строчка:
На этом базовую настройку сервера можно считать законченной.
Заключение
Я не поднимал вопрос настройки DNS-сервера, так как планирую выпустить вторую часть, где будет изложена настройка Dnscrypt-proxy в роли DNS-сервера для локальной сети.
Источник
Как создать простой маршрутизатор с Ubuntu Server 18.04.1 LTS (Bionic Beaver)
Главное меню » Операционная система Ubuntu » Как создать простой маршрутизатор с Ubuntu Server 18.04.1 LTS (Bionic Beaver)
Мы написали это руководство, чтобы помочь другим с подобной задачей.
ПРЕДПОСЫЛКИ
- Компьютер под управлением Ubuntu Server 18.04.1 LTS. Не будем вдаваться в подробности установки операционной системы Ubuntu. Это довольно просто.
- Как минимум два сетевых интерфейса. Один предназначен для глобальной сети, а другой – для локальной сети маршрутизатора. Вы также можете использовать некоторые коммутаторы в случае, если вы собираетесь подключить несколько устройств в локальной сети, купить коммутаторы или маршрутизаторы можно на сайте http://spw.ru/. Но это почти все, что вам нужно для работающего роутера.
1. НАСТРОЙКА СЕТЕВЫХ ИНТЕРФЕЙСОВ
Во-первых, нам нужно настроить сетевые интерфейсы, которые мы будем использовать. В нашем случае eth0 будет WAN, а eth1 LAN.
WAN (eth0) – этот интерфейс получит IP от провайдера, поэтому мы оставляем его с помощью DHCP.
LAN (eth1) – мы настраиваем интерфейс со статическим IP внутри подсети, которую мы будем использовать для локальной сети
Небольшое замечание: Ubuntu 18.04 не использует традиционный файл конфигурации сети /etc/network/interfaces. Он использует NETPLAN. В нашем случае, есть конфигурационный файл, называется 50-cloud-init.yaml внутри папки /etc/netplan/. В вашем случае файл может иметь другое имя, просто найдите файл с расширением.yaml внутри папки netplan.
Давайте откроем это с помощью nano:
Отредактируйте его в соответствии с потребностями вашей сети, в моем примере я настроил это так:
Подводя итог: eth0, который является WAN, получает IP от модема интернет-провайдера. Eth1 является частью локальной сети маршрутизатора. Нам нужен статический IP и DNS-серверы (в нашем примере мы использовал Google). Также мы не настроили ни один шлюз на eth1.
Сохраните конфигурацию с помощью следующих команд:
2. НАСТРОЙКА СЕРВЕРА DHCP
Далее мы настроим DHCP-сервер. Мы действительно не хотим настраивать каждый клиент со статическим IP в сети LAN. Для этой задачи нам нужно установить следующий пакет.
Далее нам нужно отредактировать файл /etc/default/isc-dhcp-server. Это сообщает DHCP-серверу, какой сетевой интерфейс он должен прослушивать. В нашем случае это конечно eth1, интерфейс локальной сети.
А под «INTERFACESv4» вставьте сетевой интерфейс вашей локальной сети. В нашем случае это eth1 :
Следующим шагом будет настройка DHCP-сервера. Это делается путем редактирования файла /etc/dhcp/dhcpd.conf
Вот куча разных параметров, большинство из них комментируются # перед каждой строкой. Короче говоря, мы запишем только те параметры, которые мы использовал, и/или отредактируем их в соответствии со своими потребностями. Если вы хотите, вы можете удалить все содержимое этого файла и просто скопировать/вставить код ниже. Конечно, вы меняете IP-адреса, шлюзы и т. д. В соответствии с вашей собственной конфигурацией сети.
Теперь давайте применим настройки и включим DHCP-сервер при загрузке с помощью следующих команд:
С помощью следующей команды мы проверяем статус.
Если все настроено правильно, должна быть строка «ACTIVE». В противном случае вы что-то напутали в файле /etc/dhcp/dhcpd.conf. Возможно, отсутствует точка с запятой или скобка.
3. НАСТРОЙКА ФАЙЕРВОЛА
Чтобы иметь функциональный маршрутизатор, нам нужно правильно настроить брандмауэр. Это делается путем записи некоторых правил iptables. Чтобы сохранить правила при перезапуске сервера, мы создали скрипт, который будет выполняться во время загрузки.
Сначала давайте включим UFW с…
Далее нам нужно включить пересылку пакетов из WAN в LAN. У нас следующий параметр внутри файла /etc/ufw/sysctl.conf:
… и мы просто удаляем # перед следующей строкой:
В Ubuntu 18.04 файл /etc/rc.local больше не существует. Но мы все еще можем создать это с:
Затем скопируйте/вставьте следующий скрипт. Есть комментарии, объясняющие каждое правило iptables. Вы можете удалить их, если хотите, но вы НЕ должны удалять #! /bin/bash. Также измените eth0 и eth1, если ваши сетевые интерфейсы имеют несколько разных имен.
Этот сценарий должен выполняться во время загрузки, поэтому нам нужно сделать файл исполняемым с помощью следующей команды:
И это все. Мы перезагружаем маршрутизатор с помощью команды sudo reboot, и мы готовы к работе. 🙂
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Источник
Наш рецепт отказоустойчивого Linux-роутера
В высоконагруженных проектах всегда повышенные требования к избыточности и надежности. Одним из важнейших звеньев инфраструктуры является маршрутизатор, потому что от его устойчивости зависит доступность сети в целом. Именно на таких узлах мы используем одну из схем реализации отказоустойчивого виртуального роутера на базе GNU/Linux с использованием iproute2, NetGWM, keepalived, ISC DHCPD, PowerDNS. Как мы всё это настраиваем, читайте в этой статье.
Компоненты
В идеальной схеме отказоустойчивого роутера мы резервируем все элементы, которые могут привести к недоступности сети, то есть:
- каналы связи,
- коммутаторы,
- маршрутизаторы.
В общем виде схема (на уровне L2) выглядит так:
Как видно из схемы, нам нужны 2 коммутатора с поддержкой 802.1Q VLAN. Оператор 1 коммутируется в Коммутатор 1 и ему выделяется отдельный VLAN (например, 110). Оператор 2 коммутируется в Коммутатор 2, в другой VLAN (например, 120). Отдельный VLAN (в нашем случае — 200), выделяется под локальную сеть. Между коммутаторами организуется транк, и транком же линкуем оба маршрутизатора, которые и будут «сердцем» нашего виртуального роутера (схема router-on-a-stick).
Такая компоновка позволяет оставлять работоспособной сеть при выходе из строя любого компонента: роутера, коммутатора или оператора.
Стек базовых компонентов, которые мы используем в работе роутеров:
- Ubuntu Linux;
- NetGWM — утилита приоритезации основного шлюза в решении. Это наша Open Source-разработка, о которой мы готовим отдельную статью (пока предлагаю ознакомиться с базовой документацией) [Обновлено 08.08.2017: статья опубликована как «Настройка основного и двух резервных операторов на Linux-роутере с NetGWM»];
- iproute2 — для создания нескольких таблиц маршрутизации;
- keepalived — для реализации протокола VRRP в Linux;
- ISC DHCPD — как горизонтально масштабируемый DHCP-сервер;
- PowerDNS — как DNS-сервер для локальной сети.
Маршрутизаторы настраиваются примерно одинаково, за исключением конфигурации IP-адресов и keepalived.
Настройка интерфейсов
Настраиваем VLAN. Конфигурация /etc/network/interfaces будет выглядеть примерно так:
- настраиваем blackhole — хорошая практика для того, чтобы локальные пакеты не улетали по маршруту по умолчанию в сторону провайдера;
- net.ipv4.conf.$IFACE.rp_filter=0 — необходим для корректной работы multi-wan;
- для каждого провайдера настраиваем отдельную таблицу маршрутизации с единственным маршрутом по умолчанию.
Настроим маркинг пакетов для направления в определенные таблицы — добавим в iptables правила:
И настроим правила маршрутизации для промаркированных пакетов — мы это делаем вызовом скрипта iprules.sh при выполнении ifup lo (смотри выше в /etc/network/interfaces ). Внутри скрипта:
Эти таблицы маршрутизации необходимо объявить в /etc/iproute2/rt_tables :
Балансировщик основного шлюза
Настроим NetGWM — утилиту для приоритезации основного шлюза. Она будет устанавливать маршрут по умолчанию, выбирая операторов в соответствии с двумя правилами: а) установленным нами приоритетом, б) статусом оператора (жив или нет).
Чтобы установить NetGWM, можно воспользоваться исходниками на GitHub или нашим репозиторием для Ubuntu. Второй способ в случае Ubuntu 14.04 LTS выглядит так:
Укажем в конфиге /etc/netgwm/netgwm.yml , что у нас 2 оператора, маршруты по умолчанию для каждого из них, приоритезацию и настройки для контроля доступности:
Обратите внимание на имена oper1 и oper2 — это названия таблиц маршрутизации из /etc/iproute2/ip_tables . Рестартнем сервис netgwm , чтобы он начал управлять шлюзом по умолчанию для системы:
Настройка keepalived
Keepalived — реализация протокола VRRP для Linux. Этот протокол позволяет реализовать схему с отказоустойчивой маршрутизацией, создавая виртуальный IP, который будет использоваться в качестве маршрута по умолчанию для обслуживаемой сети. Виртуальный IP автоматически передается резервному серверу при выходе из строя основного сервера.
На этом этапе мы определяемся, что Маршрутизатор 2 будет играть роль Backup, а Маршрутизатор 1 — роль Master. Настраиваем keepalived, изменяя конфигурационный файл /etc/keepalived/keepalived.conf :
Так как наш отказоустойчивый роутер — многокомпонентный, мы решили использовать режим, в котором переключение keepalived режимов Backup → Master происходит только в случае отказа Master-сервера. За это как раз отвечает параметр nopreempt .
Настройка ISC DHCPD
ISC DHCPD был выбран нами, так как позволяет масштабировать DHCP на несколько серверов. Он прост в конфигурировании и хорошо зарекомендовал себя на практике. Кроме того, нам понравилось, что разработчики этого DHCP-сервера придумали изящное решение для организации реплики между серверами. Для основного и второстепенного серверов выделяются разные пулы адресов и на запросы отвечает сервер, который успел сделать это первым, выдавая адрес из своего пула. При этом база арендованных IP синхронизируется. В случае, если один из серверов отказывает, второй как ни в чем не бывало продолжает выдачу адресов из своего пула. При возврате отказавшего сервера он начинает выдачу из своего пула, при этом не возникает коллизий.
Правим конфиг /etc/dhcp/dhcpd.conf :
Нам понадобится сгенерировать ключ update_key , с помощью которого мы будем обновлять зону mynet . Сгенерируем его и выведем на экран:
Скопируйте сгенерированный ключ и вставьте в конфигурационный файл вместо слова КЛЮЧ.
Настройка PowerDNS
В качестве DNS-сервера мы предпочли PowerDNS, так как он имеет возможность хранить зоны в СУБД MySQL, которую удобно реплицировать между первым и вторым сервером. Кроме того, PoweDNS — это производительное решение, хорошо функционирующее в высоконагруженном роутере.
Настройку PowerDNS начнем с подготовки базы данных.
Теперь нужно настроить PowerDNS и научить его работать с БД. Для этого требуется установить пакет pdns-backend-mysql и изменить конфиг /etc/powerdns/pdns.conf :
На этом базовая конфигурация PowerDNS закончена. Нам же ещё потребуется настроить рекурсор — обработчик рекурсивных DNS-запросов, который позволяет значительно повысить производительность DNS-сервера. Правим файл /etc/powerdns/recursor.conf :
В файл forward_zones вносим зоны intranet, которые обслуживают соседние серверы:
По окончании настройки перезапускаем сервисы pdns и pdns-recursor .
После запуска настраиваем реплику MySQL между серверами.
Заключение
Мы используем данное решение не только в чистом виде. В большинстве случаев оно усложняется добавлением туннелей VTun, OpenVPN или IPSec через основного и резервного оператора связи и динамической маршрутизацией, которая реализуется с помощью Quagga. Поэтому схему, предложенную в статье, предлагаю воспринимать как фундамент для создания более сложных решений.
Будем рады, если вы зададите свои вопросы в комментариях или укажете на места в схеме, которые можно улучшить. И, конечно, подписывайтесь на наш хаб, чтобы не пропускать новые полезные материалы! )
Источник