Время на прочтение
10 мин
Количество просмотров 42K
В высоконагруженных проектах всегда повышенные требования к избыточности и надежности. Одним из важнейших звеньев инфраструктуры является маршрутизатор, потому что от его устойчивости зависит доступность сети в целом. Именно на таких узлах мы используем одну из схем реализации отказоустойчивого виртуального роутера на базе 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
будет выглядеть примерно так:
auto lo
iface lo inet loopback
post-up bash /etc/network/iprules.sh
post-up ip route add blackhole 192.168.0.0/16
dns-nameservers 127.0.0.1
dns-search dz
# lan, wan: trunk dot1q
auto eth0
iface eth0 inet manual
# lan
auto vlan200
iface vlan200 inet static
vlan_raw_device eth0
address 192.168.1.2
netmask 255.255.255.0
# Operator1
auto vlan110
iface vlan110 inet static
vlan_raw_device eth0
address 1.1.1.2
netmask 255.255.255.252
post-up ip route add default via 1.1.1.1 table oper1
post-up sysctl net.ipv4.conf.$IFACE.rp_filter=0
post-down ip route flush table oper1
# Operator2
auto vlan120
iface vlan120 inet static
vlan_raw_device eth0
address 2.2.2.2
netmask 255.255.255.252
post-up ip route add default via 2.2.2.1 table oper2
post-up sysctl net.ipv4.conf.$IFACE.rp_filter=0
post-down ip route flush table oper2
Основные моменты:
- настраиваем blackhole — хорошая практика для того, чтобы локальные пакеты не улетали по маршруту по умолчанию в сторону провайдера;
-
net.ipv4.conf.$IFACE.rp_filter=0
— необходим для корректной работы multi-wan; - для каждого провайдера настраиваем отдельную таблицу маршрутизации с единственным маршрутом по умолчанию.
Настроим маркинг пакетов для направления в определенные таблицы — добавим в iptables правила:
iptables -t mangle -A PREROUTING -i vlan110 -m conntrack --ctstate NEW,RELATED -j CONNMARK --set-xmark 0x1/0x3
iptables -t mangle -A PREROUTING -i vlan120 -m conntrack --ctstate NEW,RELATED -j CONNMARK --set-xmark 0x2/0x3
iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark --nfmask 0xffffffff --ctmask 0xffffffff
iptables -t mangle -A OUTPUT -o vlan110 -m conntrack --ctstate NEW,RELATED -j CONNMARK --set-xmark 0x1/0x3
iptables -t mangle -A OUTPUT -o vlan120 -m conntrack --ctstate NEW,RELATED -j CONNMARK --set-xmark 0x2/0x3
iptables -t mangle -A OUTPUT -j CONNMARK --restore-mark --nfmask 0xffffffff --ctmask 0xffffffff
iptables -t mangle -A POSTROUTING -o vlan110 -m conntrack --ctstate NEW,RELATED -j CONNMARK --set-xmark 0x1/0x3
iptables -t mangle -A POSTROUTING -o vlan120 -m conntrack --ctstate NEW,RELATED -j CONNMARK --set-xmark 0x2/0x3
И настроим правила маршрутизации для промаркированных пакетов — мы это делаем вызовом скрипта iprules.sh
при выполнении ifup lo
(смотри выше в /etc/network/interfaces
). Внутри скрипта:
#!/bin/bash
/sbin/ip rule flush
#operator 1
/sbin/ip rule add priority 8001 iif vlan110 lookup main
/sbin/ip rule add priority 10001 fwmark 0x1/0x3 lookup oper1
/sbin/ip rule add from 1.1.1.2 lookup oper1
#operator 2
/sbin/ip rule add priority 8002 iif vlan120 lookup main
/sbin/ip rule add priority 10002 fwmark 0x2/0x3 lookup operator2
/sbin/ip rule add from 2.2.2.2 lookup operator2
Эти таблицы маршрутизации необходимо объявить в /etc/iproute2/rt_tables
:
# reserved values
255 local
254 main
253 default
0 unspec
# local
110 oper1
120 oper2
Балансировщик основного шлюза
Настроим NetGWM — утилиту для приоритезации основного шлюза. Она будет устанавливать маршрут по умолчанию, выбирая операторов в соответствии с двумя правилами: а) установленным нами приоритетом, б) статусом оператора (жив или нет).
Чтобы установить NetGWM, можно воспользоваться исходниками на GitHub или нашим репозиторием для Ubuntu. Второй способ в случае Ubuntu 14.04 LTS выглядит так:
# Установим репозиторий
$ sudo wget https://apt.flant.ru/apt/flant.trusty.common.list -O /etc/apt/sources.list.d/flant.common.list
# Импортируем ключ
$ wget https://apt.flant.ru/apt/archive.key -O- | sudo apt-key add -
# Понадобится HTTPS-транспорт — установите его, если не сделали это раньше
$ sudo apt-get install apt-transport-https
# Обновим пакетную базу и установим netgwm
$ sudo apt-get update && sudo apt-get install netgwm
Укажем в конфиге /etc/netgwm/netgwm.yml
, что у нас 2 оператора, маршруты по умолчанию для каждого из них, приоритезацию и настройки для контроля доступности:
# Описываем маршруты по умолчанию для каждого оператора и приоритеты
# Меньшее значение (число) имеет больший приоритет
gateways:
oper1: {ip: 1.1.1.1, priority: 1}
oper2: {ip: 2.2.2.1, priority: 2}
# В ситуации, когда более приоритетного оператора начинает «штормить»
# и он то online, то offline, хочется избежать постоянных переключений
# туда-сюда. Этот параметр определяет время (в секундах), после которого
# netgwm будет считать, что связь стабильна
min_uptime: 900
# Массив удаленных хостов, которые будут использоваться netgwm для
# проверки работоспособности каждого оператора
check_sites:
- 192.5.5.241
- 198.41.0.4
Обратите внимание на имена oper1
и oper2
— это названия таблиц маршрутизации из /etc/iproute2/ip_tables
. Рестартнем сервис netgwm
, чтобы он начал управлять шлюзом по умолчанию для системы:
$ sudo service netgwm restart
Настройка keepalived
Keepalived — реализация протокола VRRP для Linux. Этот протокол позволяет реализовать схему с отказоустойчивой маршрутизацией, создавая виртуальный IP, который будет использоваться в качестве маршрута по умолчанию для обслуживаемой сети. Виртуальный IP автоматически передается резервному серверу при выходе из строя основного сервера.
На этом этапе мы определяемся, что Маршрутизатор 2 будет играть роль Backup, а Маршрутизатор 1 — роль Master. Настраиваем keepalived, изменяя конфигурационный файл /etc/keepalived/keepalived.conf
:
! Глобальный блок можно настраивать под себя
! Configuration File for keepalived
global_defs {
notification_email {
admin@fromhabr.ru
}
notification_email_from keepalived@example.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id MY_ROUTER
}
vrrp_instance VI_1 {
interface vlan200 # VRRP обслуживает VLAN локальной сети
virtual_router_id 17 # поставьте любое число, но одинаковое на Master и Backup
nopreempt # важный параметр, подробнее см. ниже
state MASTER # на резервном сервере установите state BACKUP
priority 200 # на резервном сервере число должно быть ниже, например 100
advert_int 1 # интервал рассылки сообщения “Я жив”
garp_master_delay 1
garp_master_refresh 60
authentication {
auth_type PASS
auth_pass qwerty # не забудьте поменять пароль
}
virtual_ipaddress {
# Виртуальный адрес, который будет шлюзом по умолчанию в локальной сети и
# заодно широковещательный адрес, в который будут рассылаться VRRP-анонсы
192.168.1.1/24 broadcast 192.168.1.255 dev vlan200
}
# Скрипты вызываются при переходе в соответствующее состояние Master, Backup, Fault и
# при остановке keepalived; используются нами для передачи уведомлений
notify_master /etc/keepalived/scripts/master.sh
notify_backup /etc/keepalived/scripts/backup.sh
notify_stop /etc/keepalived/scripts/stop.sh
notify_fault /etc/keepalived/scripts/fault.sh
}
Так как наш отказоустойчивый роутер — многокомпонентный, мы решили использовать режим, в котором переключение keepalived режимов Backup → Master происходит только в случае отказа Master-сервера. За это как раз отвечает параметр nopreempt
.
Настройка ISC DHCPD
ISC DHCPD был выбран нами, так как позволяет масштабировать DHCP на несколько серверов. Он прост в конфигурировании и хорошо зарекомендовал себя на практике. Кроме того, нам понравилось, что разработчики этого DHCP-сервера придумали изящное решение для организации реплики между серверами. Для основного и второстепенного серверов выделяются разные пулы адресов и на запросы отвечает сервер, который успел сделать это первым, выдавая адрес из своего пула. При этом база арендованных IP синхронизируется. В случае, если один из серверов отказывает, второй как ни в чем не бывало продолжает выдачу адресов из своего пула. При возврате отказавшего сервера он начинает выдачу из своего пула, при этом не возникает коллизий.
Правим конфиг /etc/dhcp/dhcpd.conf
:
# Настраиваем DDNS для локальных адресов
ddns-updates on;
ddns-update-style interim;
do-forward-updates on;
update-static-leases on;
deny client-updates; # ignore, deny, allow
update-conflict-detection false;
update-optimization false;
key "update-key" {
algorithm hmac-md5;
secret "КЛЮЧ"; # про генерацию ключа см. ниже
};
zone 1.168.192.in-addr.arpa. {
primary 192.168.1.1;
key "update-key";
}
zone mynet. {
primary 192.168.1.1;
key "update-key";
# Настраиваем масштабирование
failover peer "failover-partner" {
primary; # на резервном сервере укажите здесь secondary
address 192.168.1.3; # адрес резервного сервера
port 519;
peer address 192.168.1.2; # адрес основного сервера
peer port 520;
max-response-delay 60;
max-unacked-updates 10;
load balance max seconds 3;
}
default-lease-time 2400;
max-lease-time 36000;
log-facility local7;
authoritative;
option ntp-servers 192.168.1.1, ru.pool.ntp.org;
# Настраиваем пул для нашего сервера
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.51 192.168.1.150; # на 100 адресов, например
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
option domain-name-servers 192.168.1.1;
option routers 192.168.1.1;
ddns-domainname "mynet.";
# … и пул для резервного. Они не должны пересекаться
pool {
failover peer "failover-partner";
range 192.168.1.151 192.168.1.250;
}
# … и статические leases
host printer { hardware ethernet 00:26:73:47:94:d8; fixed-address 192.168.1.8; }
}
Нам понадобится сгенерировать ключ update_key
, с помощью которого мы будем обновлять зону mynet
. Сгенерируем его и выведем на экран:
$ dnssec-keygen -r /dev/urandom -a HMAC-MD5 -b 64 -n HOST secret_key
Ksecret_key.+157+64663
$ cat Ksecret_key.+*.private | grep ^Key | awk '{print $2}'
bdvkG1HcHCM=
Скопируйте сгенерированный ключ и вставьте в конфигурационный файл вместо слова КЛЮЧ.
Настройка PowerDNS
В качестве DNS-сервера мы предпочли PowerDNS, так как он имеет возможность хранить зоны в СУБД MySQL, которую удобно реплицировать между первым и вторым сервером. Кроме того, PoweDNS — это производительное решение, хорошо функционирующее в высоконагруженном роутере.
Настройку PowerDNS начнем с подготовки базы данных.
# Заходим в MySQL CLI
$ mysql -u root -p
# Создаем БД и назначаем права для пользователя, которым будем к ней подключаться
mysql> CREATE DATABASE IF NOT EXIST powerdns;
mysql> GRANT ALL ON powerdns.* TO 'pdns_admin'@'localhost' IDENTIFIED BY 'pdns_password';
mysql> GRANT ALL ON powerdns.* TO 'pdns_admin'@'localhost.localdomain' IDENTIFIED BY 'pdns_password';
mysql> FLUSH PRIVILEGES;
# Переходим в только что созданную БД и создаем структуру данных
mysql> USE powerdns;
mysql> CREATE TABLE IF NOT EXIST `domains` (
id INT auto_increment,
name VARCHAR(255) NOT NULL,
master VARCHAR(128) DEFAULT NULL,
last_check INT DEFAULT NULL,
type VARCHAR(6) NOT NULL,
notified_serial INT DEFAULT NULL,
account VARCHAR(40) DEFAULT NULL,
primary key (id)
);
mysql> CREATE TABLE `records` (
id INT auto_increment,
domain_id INT DEFAULT NULL,
name VARCHAR(255) DEFAULT NULL,
type VARCHAR(6) DEFAULT NULL,
content VARCHAR(255) DEFAULT NULL,
ttl INT DEFAULT NULL,
prio INT DEFAULT NULL,
change_date INT DEFAULT NULL,
primary key(id)
);
mysql> CREATE TABLE `supermasters` (
ip VARCHAR(25) NOT NULL,
nameserver VARCHAR(255) NOT NULL,
account VARCHAR(40) DEFAULT NULL
);
mysql> CREATE INDEX `domain_id` ON `records`(`domain_id`);
mysql> CREATE INDEX `rec_name_index` ON `records`(`name`);
mysql> CREATE INDEX `nametype_index` ON `records`(`name`,`type`);
mysql> CREATE UNIQUE INDEX name_index` ON `domains`(`name`);
quit;
Теперь нужно настроить PowerDNS и научить его работать с БД. Для этого требуется установить пакет pdns-backend-mysql
и изменить конфиг /etc/powerdns/pdns.conf
:
# Настраиваем доверенные сети
allow-axfr-ips=127.0.0.0/8,192.168.1.0/24
allow-dnsupdate-from=127.0.0.0/8,192.168.1.0/24
allow-recursion=127.0.0.0/8,192.168.1.0/24
# Базовые настройки демона
config-dir=/etc/powerdns
daemon=yes
disable-axfr=no
dnsupdate=yes
guardian=yes
local-address=0.0.0.0
local-address-nonexist-fail=no
local-port=53
local-ipv6=::1
# На втором маршрутизаторе такие же значения этих параметров
master=yes
slave=no
recursor=127.0.0.1:5353
setgid=pdns
setuid=pdns
socket-dir=/var/run
version-string=powerdns
webserver=no
# Настраиваем MySQL
launch=gmysql
# Хост с БД - тот самый, которым управляет keepalived
gmysql-host=192.168.1.1
gmysql-port=3306
# Имя и пароль пользователя, которого мы создавали в БД
gmysql-user=pdns_admin
gmysql-password=pdns_password
gmysql-dnssec=yes
На этом базовая конфигурация PowerDNS закончена. Нам же ещё потребуется настроить рекурсор — обработчик рекурсивных DNS-запросов, который позволяет значительно повысить производительность DNS-сервера. Правим файл /etc/powerdns/recursor.conf
:
daemon=yes
forward-zones-file=/etc/powerdns/forward_zones
local-address=127.0.0.1
local-port=5353
quiet=yes
setgid=pdns
setuid=pdns
В файл forward_zones
вносим зоны intranet, которые обслуживают соседние серверы:
piter_filial.local=192.168.2.1
2.168.192.in-addr.arpa=192.168.2.1
По окончании настройки перезапускаем сервисы pdns
и pdns-recursor
.
После запуска настраиваем реплику MySQL между серверами.
Заключение
Мы используем данное решение не только в чистом виде. В большинстве случаев оно усложняется добавлением туннелей VTun, OpenVPN или IPSec через основного и резервного оператора связи и динамической маршрутизацией, которая реализуется с помощью Quagga. Поэтому схему, предложенную в статье, предлагаю воспринимать как фундамент для создания более сложных решений.
Будем рады, если вы зададите свои вопросы в комментариях или укажете на места в схеме, которые можно улучшить. И, конечно, подписывайтесь на наш хаб, чтобы не пропускать новые полезные материалы! )
Время на прочтение
12 мин
Количество просмотров 62K
И снова здравствуйте!
В первой части статьи я рассказывал о «железной» составляющей будущего роутера. Поскольку без софта даже самое расчудесное железо, естественно, работать не будет, следовательно требовалось снабдить аппарат соответствующей программной «начинкой».
Когда я затевал всё это движение, я предполагал, что будет непросто. Но не предполагал, что настолько. В одном из комментариев к предыдущей части статьи я клятвенно пообещал рассказать о нижеследующем «к выходным». Благоразумно умолчал к каким именно. Тут ещё умудрился прихворнуть не вовремя, но всё-таки сдерживаю своё обещание.
Итак…
Напомню комплектацию:
- материнская плата Intel D2500CC с комплектным двухядерным 64-bit процессором Intel Atom D2500, двумя гигабитными сетевыми интерфейсами
- оперативная память SO-DIMM DDR-3 1066 4Gb Corsair
- SSD-накопитель Crucial M500 120 GB
- сетевая карта 1000 Mbit D-Link DGE-528T
- mini-PCI-E Wi-Fi карта Intel 7260.HMWWB 802.11 a/b/g/n/ac + Bluetooth 4.0
- всё это хозяйство упаковано в корпус Morex T-3460 60W
Первым делом я определил для себя круг задач, которые будет выполнять маршрутизатор, чтобы в дальнейшем мне было проще его админить.
Ещё раз уточню, что эти ваши интернеты приходят ко мне по 100 Мбитному каналу (тариф, естественно, даёт несколько меньшую скорость, но не суть). Получилось, собственно, вот что:
- Доступ в интернет со всех устройств, имеющихся дома в распоряжении +n устройств, появляющихся эпизодически или вообще однократно
- Домашняя локалка
- Соответственно, маршрутизация трафика из/в интернет/локальная сеть
- Файлохранилище (доступ по FTP или Samba)
- Торрентокачалка
- ed2k-сеть (ибо очень круто развита у провайдера)
- web-сервер
В перспективе:
- домен
- видеонаблюдение
- элементы «умного дома»
чёрт в ступемного чего интересного
Естественным в этой ситуации было выбирать из *nix-based систем. Некоторое время пришлось потратить на изучение матчасти, рыская по сети. В итоге я проделал следующий путь…
1. FreeBSD 10.1-RELEASE
Очень хотелось реализовать всё на фряхе. Плюсы её в управлении сетевыми устройствами, серверами/шлюзами/маршрутизаторами очевидны, неоспоримы и многократно воспеты гуру.
Поскольку ранее дел я с фряхой близко не имел, пришлось круто раскурить Руководство по FreeBSD, сопровождая процесс чтения параллельным процессом установки на устройство последнего стабильного релиза 10.1.
Небольшое отступление
К слову, установку фряхи (да и всех описываемых далее систем) я производил при помощи замечательного устройства Zalman ZM-VE300 с терабайтным HDD внутри; сие устройство имеет на борту эмулятор оптического привода, что позволяет накидать на жёсткий диск в папку _iso образы, после чего, установив в BIOS загрузку с Zalman Virtual CD, производить загрузку и установку с этих самых образов, всё равно что, если бы они были записаны на болванку и вставлены в физический привод.
Всё было замечательно, система встала, но меня ждал неприятный сюрприз, о котором я, откровенно говоря, знал, но решил-таки проверить на практике: FreeBSD напроч отказывалась видеть Wi-Fi карточку. Вернее видеть-то она её видела, но только адрес и название вендора, а что это и с чем её едят, фряха понимать не желала (драйвер устройства значился как none1). Кроме того, дальнейшее чтение мануала выявило, что в режиме точки доступа во FreeBSD работают только Wi-Fi карты на основе набора микросхем Prism. Печальбеда… Да, нашёл я также и информацию, что моя карточка в настоящий момент вообще не имеет драйвера под фряху. Даже портированного.
10. Debian 7.7.0
Расстраивался я недолго: не состоялась фряха — возьму старый добрый Debian. Установил с netinstall-образа базовую систему без графического окружения. Долго пытался понять, что не так. Стабильный релиз Debian в данный момент 7.7.0, имеет ядро версии 3.2. В этом ядре опять же нет поддержки моей многострадальной Wi-Fi сетевушки. Полез на ЛОР искать ответ, в итоге получил неутешительные выводы: надо ставить ядро посвежее (в случае Debian — тот ещё геморрой), пляски с
бубном
ядрами, по мнению гуру, не труъ Debian-way (так прямо и сказали: хочешь перекомпилять ядра — выбери другой дистрибутив).
11. Ubuntu Server 14.04 LTS
Плюнув на попытки круто
провести время
покрасноглазить, я взял знакомый и уважаемый мной дистрибутив. Уже более года он (правда версии 12.04 LTS) вертится у меня на сервере, раздающем плюшки в сети провайдера.
Из плюсов: стабильность, простота установки, настройки и администрирования, куча документации.
Из минусов: необходимость дорабатывать напильником, поскольку «искаропки» получается толстоват и несколько неповоротлив.
Установка
По сути не представляет ничего сложного и аналогична таковой в Debian. Производится в диалоговом режиме text-mode. Описывать детально не вижу смысла, т.к. всё это уже десятки раз пережёвано и валяется на множестве ресурсов (начиная с официальных сайтов на разных языках и заканчивая местечковыми форумами).
Важным моментом является правильная разметка и подготовка SSD. Всем прекрасно известно, что твердотельные накопители построены на технологии flash-памяти и имеют ограниченный ресурс на запись. Справедливости ради отмечу, что на просторах всемирной паутины глаголят о достаточной надёжности современных твердотельников (сравнимой с классическими жёсткими дисками). Тем не менее было бы глупо плевать на элементарные рекомендации в отношении эксплуатации SSD.
Перед началом любых манипуляций с накопителем рекомендуется обновить прошивку, но на моём оказалась самая свежая, поэтому данный шаг я пропустил.
Первой необходимой манипуляцией при разметке накопителя является выравнивание разделов диска. Если кратко, то каждый раздел должен начинаться с сектора кратного 8. Первый раздел рекомендовано начинать с 2048 сектора (это связано с расположением в начале накопителя MBR или GPT, а «отступ» в 1 Мб берётся с запасом.
При разметке я создал 3 раздела:
- boot — ext2
- root — ext4
- home — ext4
$ sudo fdisk -l
Диск /dev/sda: 120.0 Гб, 120034123776 байт
255 головок, 63 секторов/треков, 14593 цилиндров, всего 234441648 секторов
Units = секторы of 1 * 512 = 512 bytes
Размер сектора (логического/физического): 512 байт / 4096 байт
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Идентификатор диска: 0x000ea779
Устр-во Загр Начало Конец Блоки Id Система
/dev/sda1 * 2048 1050623 524288 83 Linux
/dev/sda2 1050624 42993663 20971520 83 Linux
/dev/sda3 42993664 234440703 95723520 83 Linux
Как видно, все разделы начинаются с секторов, кратных 8. Таким образом доступ будет осуществляться с обращением по правильному сектору, что поможет сберечь нежный ресурс накопителя.
Далее в опциях монтирования разделов в /etc/fstab следует добавить discard — для включения TRIM и noatime — для отключения записи в метаданные времени последнего доступа к файлу.
Очередное отступление
С noatime не всё так однозначно. Например, в десктопных системах браузеры отслеживают «свежесть» своего кэша именно по времени последнего доступа, таким образом, включение данной опции влечёт за собой не уменьшение записи на диск, а наоборот — увеличение, поскольку браузер видит, что его кэш «протух» и начинает подтягивать новый. В этом случае рекомендуется использовать опцию relatime — атрибут времени доступа (atime) обновляется, но только в том случае, если изменились данные файла (атрибут mtime) или его статус (атрибут ctime). Для серверной системы это, пожалуй, не столь критично, но всё же я включил noatime для boot, а для root и home — relatime.
Все остальные советы, нагугленные на просторах сети, как то увеличение времени между сбросами буферов на диск (опция commit=[time, sec.]), отключение «шлагбаума» (опция barrier=0) и прочее не внушили мне доверия в плане приобретаемой полезности в ущерб сохранности данных и безопасности.
Кроме того, я не стал выделять отдельный раздел для swap, решив, что оперативной памяти мне должно хватить для поставленных задач. Если же всё-таки возникнет необходимость в подкачке, ничто не мешает сделать swap в виде файла и смонтировать его как раздел.
Также было принято волевое решение вынести временные файлы (/tmp) в tmpfs.
В процессе установки задаются общие параметры, как то: локаль, параметры времени/геопозиции, имя системы, а также создаётся новый юзер и пароль к нему. Далее следует выбор устанавливаемого программного обеспечения, в котором я пометил для установки следующее:
- OpenSSH server
- DNS server
- LAMP server
- Print server
- Samba file server
После загрузки в свежеустановленную систему проявилась одна крайне неприятная особенность (кстати, в Debian было то же самое): после инициализации драйверов вырубалось видео, монитор переходил в режим ожидания, и становилось непонятно система зависла или просто что-то не так с выводом. Обнаружилось, что доступ по ssh есть, и можно было бы на этом остановиться, но всегда может возникнуть ситуация, когда необходимо получить физический доступ к маршрутизатору (например, шаловливые ручонки админа поковырялись в настройках сети, и доступ через консоль категорически пропал %) ). Посёрфиф по форумам я наткнулся на решение (оказывается баг известен и проявляется именно на этой материнской плате):
add to /etc/modprobe.d/blacklist.conf:
blacklist gma500_gfxrun
sudo update-initramfs -u
sudo reboot
Пруф.
В случае с Debian — /etc/modprobe.d/fbdev-blacklist.conf.
После перезагрузки всё заработало.
Настройка сети
В процессе установки системы я выбрал в качестве сетевого интерфейса, который будет использован для установки, карту D-Link. Она уменя была подключена патчкордом к одному из LAN моего старого маршрутизатора (это было сделано для того, чтобы иметь доступ по SSH до настройки сетевых интерфейсов, а поскольку на Асусе также запущен DHCP-сервер, проблем с подключением не возникло), тестировать при таком подключении доступ в интернет не составит никаких проблем.
Также в свежей системе проявился ещё один глюк:
no talloc stackframe at ../source3/param/loadparm.c:4864, leaking memory
Проблема связана с библиотекой авторизации libpam-smbpass, можно просто её снести, а можно поступить более изящно:
$ sudo pam-auth-update
снять пометку с SMB password synchronization, что отключает синхронизацию паролей системных пользователей и пользователей Samba.
Устанавливаем все доступные обновления:
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get dist-upgrade
И приступаем к настройке сетевых интерфейсов. В маршрутизаторе 4 физических интерфейса и loopback:
Вывод терминала
$ ifconfig -a
em0 Link encap:Ethernet HWaddr 00:22:4d:ad:69:f0
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:17 Память:d0220000-d0240000
eth0 Link encap:Ethernet HWaddr d8:fe:e3:a7:d5:26
inet addr:192.168.1.10 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::dafe:e3ff:fea7:d526/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:741 errors:0 dropped:0 overruns:0 frame:0
TX packets:477 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:482523 (482.5 KB) TX bytes:45268 (45.2 KB)
eth1 Link encap:Ethernet HWaddr 00:22:4d:ad:69:ec
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:16 Память:d0320000-d0340000
lo Link encap:Локальная петля (Loopback)
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:28 errors:0 dropped:0 overruns:0 frame:0
TX packets:28 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1784 (1.7 KB) TX bytes:1784 (1.7 KB)
wlan0 Link encap:Ethernet HWaddr 80:19:34:1e:fe:83
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
- eth0 — «смотрит» в интернет, получает настройки по DHCP
- eth1 и em0 — интегрированные в материнку сетевые адаптеры
- wlan0 — как нетрудно догадаться, беспроводной интерфейс Wi-Fi
Устанавливаем hostapd и переводим беспроводной интерфейс в режим Master:
$ sudo iwconfig wlan0 mode Master
К моему величайшему сожалению такой способ не сработал, и команда вывалилась с ошибкой, поэтому я прибегнул к альтернативному способу:
$ sudo apt-get install iw
$ sudo iw dev wlan0 del
$ sudo iw phy phy0 interface add wlan0 type __ap
После чего:
$ iwconfig
wlan0 IEEE 802.11abgn Mode:Master Tx-Power=0 dBm
Retry long limit:7 RTS thr:off Fragment thr:off
Power Management:on
Теперь необходимо сконфигурировать все сетевые интерфейсы, чтобы было удобнее с ними работать. Я решил объединить встроенные сетевушки и Wi-Fi в мост, чтобы управлять этим хозяйством как единым целым при раздаче IP-адресов по DHCP, маршрутизации и пр. Приводим к следующему виду /etc/network/interfaces:
/etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet dhcp
auto wlan0 br0
# The wireless interface
iface wlan0 inet manual
pre-up iw dev wlan0 del
pre-up iw phy phy0 interface add wlan0 type __ap
# The bridge
iface br0 inet static
address 192.168.0.1
network 192.168.0.0
netmask 255.255.255.0
broadcast 192.168.0.255
bridge_ports em0 eth1 wlan0
Перезагружаемся. Теперь видим:
Вывод терминала
$ ifconfig -a
br0 Link encap:Ethernet HWaddr 00:22:4d:ad:69:ec
inet addr:192.168.0.1 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
em0 Link encap:Ethernet HWaddr 00:22:4d:ad:69:f0
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:17 Память:d0220000-d0240000
eth0 Link encap:Ethernet HWaddr d8:fe:e3:a7:d5:26
inet addr:192.168.1.10 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::dafe:e3ff:fea7:d526/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1329 errors:0 dropped:0 overruns:0 frame:0
TX packets:819 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:531178 (531.1 KB) TX bytes:125004 (125.0 KB)
eth1 Link encap:Ethernet HWaddr 00:22:4d:ad:69:ec
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:16 Память:d0320000-d0340000
lo Link encap:Локальная петля (Loopback)
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:28 errors:0 dropped:0 overruns:0 frame:0
TX packets:28 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1784 (1.7 KB) TX bytes:1784 (1.7 KB)
wlan0 Link encap:Ethernet HWaddr 80:19:34:1e:fe:83
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Инициализировались все интерфейсы.
Можно приступить к настройке hostapd. Пока мы тут рассуждали, версия стала, таки, 2.1.
У меня получился вот такой конфиг /etc/hostapd/hostapd.conf:
hostapd.conf
interface=wlan0
bridge=br0
driver=nl80211
logger_syslog=-1
logger_syslog_level=4
logger_stdout=-1
logger_stdout_level=4
ssid=TEST
hw_mode=g
ieee80211n=1
ht_capab=[HT40-][SHORT-GI-40]
channel=11
macaddr_acl=0
deny_mac_file=/etc/hostapd/hostapd.deny
auth_algs=3
ignore_broadcast_ssid=1
ap_max_inactivity=300
wpa=2
wpa_passphrase=my_wpa_passphrase
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
Включаем автоматический запуск hostapd при загрузке системы, для этого в /etc/default/hostapd раскомментируем и редактируем строки:
DAEMON_CONF="/etc/hostapd/hostapd.conf"
DAEMON_OPTS="-B"
RUN_DAEMON="yes"
Далее, не мудрствуя лукаво, я настроил общий доступ. Скрипт для настройки iptables и ip-форвардинга я взял отсюда, привёл его в соответствие своим реалиям и настроил автозапуск. В результате iptables наполняются необходимым содержимым при загрузке системы.
Логично, что нужно текже настроить DHCP-сервер. Решив упростить задачу до минимума, я установил dnsmasq и снёс имеющийся в наличии и конфликтующий с ним bind9. Конфиг прост:
/etc/dnsmasq.conf
# Configuration file for dnsmasq.
#
# Format is one option per line, legal options are the same
# as the long options legal on the command line. See
# "/usr/sbin/dnsmasq --help" or "man 8 dnsmasq" for details.
# Never forward plain names (without a dot or domain part)
domain-needed
# Never forward addresses in the non-routed address spaces.
bogus-priv
# If you want dnsmasq to listen for DHCP and DNS requests only on
# specified interfaces (and the loopback) give the name of the
# interface (eg eth0) here.
# Repeat the line for more than one interface.
interface=br0
# This is an example of a DHCP range where the netmask is given. This
# is needed for networks we reach the dnsmasq DHCP server via a relay
# agent. If you don't know what a DHCP relay agent is, you probably
# don't need to worry about this.
dhcp-range=192.168.0.2,192.168.0.254,255.255.255.0,12h
# Give a host with Ethernet address 11:22:33:44:55:66 or
# 12:34:56:78:90:12 the IP address 192.168.0.60. Dnsmasq will assume
# that these two Ethernet interfaces will never be in use at the same
# time, and give the IP address to the second, even if it is already
# in use by the first. Useful for laptops with wired and wireless
# addresses.
#dhcp-host=11:22:33:44:55:66,12:34:56:78:90:12,192.168.0.60
dhcp-host=00:11:22:33:44:55,66:77:88:99:aa:bb,MyDevice1,192.168.0.2
dhcp-host=cc:dd:ee:ff:ee:dd,cc:bb:aa:99:88:77,MyDevice2,192.168.0.3
На самом деле в конфиге ещё куча закомментированных опций, которые позволяют производить очень fine tuning, но такого набора вполне хватает для корректной работы. В принципе, с этого момента аппарат уже работает как домашний маршрутизатор.
После окончания основной настройки я установил и настроил transmission-daemon, aMuled и vsftpd. Собственно говоря, настройка данных сервисов достаточно тривиальна, останавливаться детально на ней не буду. Естественно, доступ к данным ресурсам имеется только из локальной сети, если хочется получить доступ извне, необходимо будет открыть соответствующие порты в iptables.
Вёб-сервер представляет из себя связку Apache 2.4.7 + MySQL Ver 14.14 Distrib 5.5.40. Пока не придумал, чем буду его заполнять: накатить готовый движок и баловаться с дизайном или же просто попрактиковаться в html и php. В любом случае сие имеет для меня прикладное значение. Возможно, в перспективе получится настроить вёб-интерфейс для мониторинга и управления маршрутизатором.
После всех манипуляций остаётся настроить ведение логов: по возможности привести настройки всех процессов, ведущих логи, выводить в них только критически важные уведомления и предупреждения. Идея заключается в снижении количества операций записи, а, соответственно, и негативного влияния на SSD.
Кроме того,
следует
настоятельно рекомендуется включить запуск по cron раз в сутки fstrim (для каждого раздела отдельно). Говорят, хуже не будет точно.
Ффух… Получилось несколько сумбурное описание моих мытарств с собственноручно собранным устройством, но удовлетворение от того, что всё работает просто неописуемо.
В комментарии к предыдущей части статьи многоуважаемый dmitrmax интересовался уровнем энергопотребления сборки. Ну что же, привожу примерные данные, которые мне удалось почерпнуть из открытых источников:
- процессор Intel Atom D2500 — до 10 Вт
- SSD-накопитель Crucial M500 — 3,6 Вт
По остальным крмплектующим данных сходу не нашлось, но практически везде в характеристиках сетевой карты и Wi-Fi модуля пишут «низкое энергопотребление». Если грубо накинуть на всё про всё 10 Вт (прочее железо, интегрированные сетевушки, etc), то итого получается около 25 Вт — не так уж и много, полагаю…
Вроде бы ничего не забыл, упомянул все ключевые моменты. За подробностями прошу в комментарии. Спасибо за внимание! (-;
UPD: Господин Revertis справедливо заметил, и я с ним соглашусь, что изначально при установке системы не следовало отмечать DNS-сервер, чтобы потом его сносить (речь о bind9), но в статье я описывал именно путь, который проделал — со всеми его ошибками и закоулками. И да, соглашусь, что nginx лучше, чем Apache, более того — я его даже заменю. Спасибо за совет.
Как-то в моей маленькой домашней локальной лаборатории потребовалось изолированной сети, в которой присутствуют только виртуальные машины только с адаптерами внутреней сети, дать доступ в Интернет, не добавляя адаптеров типа NAT. Сказано — сделано.
Все действия я провожу с машинами в VirtualBox. Мне потребуется создать еще 1 машину — роутер, которая будет являться шлюзом для других VM и будет предоставлять доступ в Интернет.
В качестве роутера будет выступать виртуальная машинка на борту у которой минимальный Debian.
Создаем новую виртуальку, для которой назначаем 2 сетевых интерфейса первый тип подключения NAT, а второй с типом подключения внутренняя сеть.
Следующим этопом, на котором я не буду останавливаться — установка Debian. А дальше переходим к настройка сети.
Выполним команду:
# ip a
Мы увидим все имеющиеся сетевые интерфейсы, у меня это enp0s3 и enp0s8. Первый это моя сеть с интернетом, а второй является внутренней сетью. Дальше переходим к настройке сетевых интерфейсов. отредактировав файл interfaces выполним команду:
# nano /etc/network/interfaces
и выполним настроку второго интерфейса, дописав к файлу его конфигурацию
allow-hotplug enp0s8
iface enp0s8 inet static
address 172.30.0.1
netmask 255.255.255.0
Далее можно поднять второй интерфейс и попинговать адрес 172.30.0.1 c другой машины в этой сети.
Следующим этапом нужно разрешить маршрутизацию и настроить правила iptables. Разрешаем маршрутизацию отредактировав файл sysclt.conf выполнив команду:
# nano /etc/sysctl.conf
раскоментируем строку net.ipv4.ip_forward = 1.
Далее настроим iptables для пересылки пакетов:
# iptables -A FORWARD -m state —state RELATED,ESTABLISHED -j ACCEPT
# iptables -A FORWARD -s 172.30.0.0/24 -j ACCEPT
# iptables -P FORWARD DROP
# iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE
Если указать в качестве шлюза на других виртуальных машинах ip адрес второго интерфейса этого маршрутизатора, а в качестве DNS ip Google DNS 8.8.8.8, то можно убедиться что на клиентах уже интернет появился.
Осталось зафиксировать в автозагрузке правила iptables (подробно описано в статье Debian: автозагрузка iptables и ip6tables) и можно пожимать свои плоды.
Собственно это все что я хотел рассказать.
Looking for alternatives to commercial router OS software products? Here are some open-source options to consider
Open-source router OS software refers to router operating systems that are released under an open-source license, allowing users to freely use, modify, and distribute the software. These router OS software options are based on Linux or other open-source operating systems, and offer a range of features such as advanced networking configurations, security capabilities, and user-friendly interfaces. They are designed to provide a customizable, secure, and feature-rich networking experience while being cost-effective alternatives to commercial router OS software.
Open-source router OS software can be a strong option to consider as an alternative to commercial products. Open-source router OS software can be customized to meet specific networking needs and can be more cost-effective than commercial products. These software options are often designed to be user-friendly and feature-rich, with advanced networking configurations and security capabilities. These routers’ OSs can be used in networks ranging from home networks, to small business networks, or even in large corporate environments. Additionally, the open-source nature of these products means that users can contribute to the development of the software and collaborate with other users to improve it over time.
In this article, we present the best open-source router OS software out there. Hopefully, this would help you in choosing the right one for your network.
The Best Open-source Router OS Software
1. RouterOS from MikroTik
MikroTik RouterOS is an open-source router OS software that is designed to provide a powerful, customizable, and secure networking experience. It is based on the Linux kernel and offers a range of features and capabilities that make it a popular choice among network enthusiasts, developers, and IT professionals. The open-source nature of MikroTik RouterOS means that users can contribute to the development of the software and collaborate.
One of the primary benefits of MikroTik RouterOS is its flexibility. The software allows users to customize and modify the software to meet their specific networking needs. This includes adding new features, removing unnecessary features, or configuring the software to work with specific hardware. This flexibility makes it an attractive option for advanced users who want more control over their networking equipment.
Another benefit of MikroTik RouterOS is its advanced networking configurations. The software includes support for Quality of Service (QoS), network address translation (NAT), and virtual private network (VPN) support, which can help optimize network performance and improve security. Additionally, the software includes support for advanced routing protocols such as OSPF, BGP, and VRRP, making it an ideal solution for complex network setups.
MikroTik RouterOS also offers a range of security features to protect against security threats and attacks. The software includes support for firewalls, intrusion detection, and prevention, and secure remote access. Additionally, the software is updated frequently with security patches and bug fixes, ensuring that users have access to the latest security enhancements.
MikroTik RouterOS is also designed to be user-friendly. The software includes a web-based interface that allows users to configure their networking settings easily. The interface is responsive and can be accessed from any device with a web browser. Additionally, the software includes support for scripting and automation, allowing users to automate routine tasks and customize the software to fit their specific needs.
2. OpenWrt
OpenWrt is an open-source router operating system (OS) that is designed to provide a customizable, secure, and feature-rich networking experience. It is based on the Linux kernel and offers a range of features and capabilities that make it a popular choice among network enthusiasts, developers, and IT professionals.
One of the primary benefits of OpenWrt is its flexibility. OpenWrt allows users to customize and modify the software to meet their specific networking needs. This includes adding new features, removing unnecessary features, or configuring the software to work with specific hardware. This flexibility makes it an attractive option for advanced users who want more control over their networking equipment.
Another benefit of OpenWrt is its security capabilities. OpenWrt includes features such as firewalls, intrusion detection and prevention, and VPN support, which can help protect against security threats and attacks. Additionally, the software is updated frequently with security patches and bug fixes, ensuring that users have access to the latest security enhancements.
OpenWrt is also designed to be user-friendly. The software includes a web-based interface that allows users to configure their networking settings easily. The interface is responsive and can be accessed from any device with a web browser. OpenWrt also includes support for a wide range of hardware, including popular router models from companies such as TP-Link, Netgear, and Asus.
OpenWrt also offers a range of advanced networking configurations, including support for Quality of Service (QoS), network address translation (NAT), and virtual LAN (VLAN) tagging. These features make OpenWrt an attractive option for businesses and organizations that require more advanced networking capabilities. The open-source nature of OpenWrt means that users can contribute to the development of the software and collaborate with other users to improve it over time. This community-driven approach has led to the development of many useful plugins and packages that extend the functionality of the software.
OpenWrt is a powerful and flexible open-source router operating system that offers advanced networking capabilities, robust security features, and a user-friendly interface. Its customizable nature, support for a wide range of hardware, and active development community make it an attractive option for network enthusiasts and IT professionals alike.
3. DD-WRT
DD-WRT is an open-source router OS software based on the Linux kernel that offers a highly customizable and feature-rich networking experience for both home and enterprise users. Its advanced networking features include Quality of Service (QoS), VPN support, and port forwarding. The software supports multiple wireless protocols, such as 802.11ac, 802.11n, and 802.11g, among others, and advanced routing protocols such as OSPF, BGP, and RIPv2.
DD-WRT includes multiple wireless SSIDs, which allows for the creation of multiple wireless networks with different access levels and security settings. Additionally, the software offers network storage capabilities, allowing users to share files across their network. DD-WRT is highly customizable, allowing users to tailor the software to their specific needs. Its user-friendly web-based interface makes it easy to configure network settings.
The software includes a range of security features, such as firewall support, WPA/WPA2 encryption, VPN and add-ons, and plugin support.
Other features and capabilities include:
- DD-WRT supports a wide range of routers and hardware, including older and newer devices.
- The software includes advanced networking features such as Quality of Service (QoS), VPN support, and port forwarding.
- DD-WRT offers support for multiple wireless protocols, including 802.11ac, 802.11n, and 802.11g, among others.
- The software includes support for advanced routing protocols such as OSPF, BGP, and RIPv2.
- DD-WRT supports multiple wireless SSIDs, which allows for the creation of multiple wireless networks with different access levels and security settings.
- The software includes a range of security features, including firewall support, WPA/WPA2 encryption, and VPN support.
- DD-WRT also supports network storage, allowing users to share files across their network.
- The software can be customized using add-ons and plugins, allowing users to add new features or modify existing ones.
4. VyOS
VyOS is an open-source network operating system based on Debian GNU/Linux. It is designed to be used as a router, firewall, and VPN gateway, and it is well-suited for small to medium-sized businesses and enterprise-level networks. VyOS is a fork of the Vyatta project, which was discontinued in 2013. The software is actively maintained by the VyOS community and offers a range of advanced networking features.
One of the key features of VyOS is its flexibility. It can be installed on a range of hardware, including physical servers, virtual machines, and cloud platforms such as Amazon Web Services and Microsoft Azure. It can also be deployed as a virtual appliance, making it easy to test and evaluate the software. VyOS includes a wide range of networking features, including advanced routing protocols such as OSPF, BGP, and RIPv2. It also supports VPNs, including IPsec, OpenVPN, and L2TP. The software includes advanced firewall features, such as stateful packet inspection, NAT, and zone-based firewalling. Additionally, VyOS supports Quality of Service (QoS) and network address translation (NAT).
One of the strengths of VyOS is its command-line interface (CLI), which allows for detailed configuration of networking features. The CLI is similar to the Juniper Networks Junos CLI, making it a good choice for users familiar with that platform. Additionally, VyOS includes a web-based GUI for configuring basic networking settings. VyOS’s strengths also include its advanced networking features, flexibility, and ability to be deployed in a variety of environments. The software’s active development community and frequent software updates ensure that it remains up-to-date with the latest networking technologies. Additionally, VyOS’s CLI makes it a good choice for experienced network administrators who prefer to work with a command-line interface.
On the other hand, one potential weakness of VyOS is that it may be less user-friendly than other router OS software with a graphical user interface. Additionally, configuring advanced networking features may require a higher level of technical expertise. Nevertheless, VyOS is a powerful and flexible open-source router OS software that is well-suited for enterprise-level networks. Its advanced networking features and active development community make it an excellent choice for experienced network administrators who require advanced routing, firewalling, and VPN capabilities.
5. OPNsense
OPNsense is an open-source router OS software that is based on FreeBSD. It is designed to be used as a firewall, router, and VPN gateway, and it includes a range of advanced networking features. OPNsense is a fork of the pfSense project, and it is actively maintained by the OPNsense community.
One of the key features of OPNsense is its flexibility. It can be installed on a range of hardware, including physical servers, virtual machines, and cloud platforms such as Amazon Web Services and Microsoft Azure. It can also be deployed as a virtual appliance, making it easy to test and evaluate the software. Other features and capabilities include:
- Firewall OPNsense includes a powerful firewall with stateful packet inspection, which allows it to filter traffic based on packet contents, port numbers, and other criteria. This provides a high level of security for enterprise networks.
- Quality of Service (QoS) OPNsense supports Quality of Service (QoS) features, which allows network administrators to prioritize traffic based on its type, source, and destination. This helps to ensure that critical network traffic is given priority over less important traffic.
- Virtual Private Network (VPN) support OPNsense includes built-in support for Virtual Private Networks (VPNs), allowing users to securely connect to the network from remote locations.
- Web-based GUI OPNsense provides a web-based graphical user interface (GUI) for easy configuration and management. The GUI is user-friendly and includes a range of features, such as a dashboard, firewall rule editor, and package manager for installing additional features.
- Traffic shaping OPNsense includes advanced traffic shaping capabilities, which allows network administrators to control the flow of traffic on the network. This helps to optimize network performance and reduce congestion.
- Intrusion Detection and Prevention System (IDPS) OPNsense includes an Intrusion Detection and Prevention System (IDPS), which allows network administrators to detect and prevent network attacks.
As with most applications, OPNsense has its strengths and weaknesses. OPNsense’s strengths include its advanced networking features, flexibility, and ease of use. The software is actively maintained by the OPNsense community, which ensures that it remains up-to-date with the latest networking technologies. Additionally, the software’s web-based GUI makes it easy to configure networking settings, even for users without extensive technical expertise.
On the other hand, one of OPNsense’s weaknesses is that it may be less user-friendly than other router OS software with a graphical user interface. Additionally, configuring advanced networking features may require a higher level of technical expertise. Nonetheless, OPNsense is a powerful and flexible open-source router OS software that is well-suited for enterprise-level networks. Its advanced networking features, flexibility, and ease of use make it an excellent choice for both experienced network administrators and users with less technical expertise.
6. pfSense
pfSense is a free and open-source router and firewall operating system based on the FreeBSD operating system. It is designed to be used on standard x86 hardware and can be deployed as a virtual machine or on dedicated hardware. pfSense offers advanced features and capabilities that are typically found in commercial routers and firewalls, making it an ideal solution for small to medium-sized businesses, educational institutions, and other organizations that require robust network security and management.
pfSense provides a web-based graphical user interface (GUI) that allows users to configure and manage all aspects of their network. This includes setting up firewall rules, configuring virtual private networks (VPNs), managing DNS and DHCP services, and monitoring network activity. The GUI is highly customizable, allowing users to create dashboards and widgets that display real-time network information and statistics.
One of the key features of pfSense is its firewall capabilities. It offers advanced features such as stateful packet inspection, traffic shaping, and intrusion detection and prevention. These features allow administrators to block unwanted traffic and prevent malicious attacks on their networks. pfSense also supports VPN connections, allowing users to securely connect to their network from remote locations.
Another important feature of pfSense is its support for high availability (HA) and load balancing. With HA, administrators can set up redundant systems that automatically failover in the event of a hardware or software failure. Load balancing allows administrators to distribute network traffic across multiple servers or internet connections, improving performance and reducing downtime.
pfSense is highly flexible and can be customized to meet the specific needs of different organizations. It supports a wide range of third-party packages and plugins, including antivirus and anti-spam filters, content filtering, and intrusion detection and prevention systems. It also has an active community of developers and users who contribute to its ongoing development and support.
7. IPFire
IPFire is a free and open-source router and firewall operating system based on the Linux kernel. It is designed to be used on standard x86 hardware and can be deployed as a virtual machine or on dedicated hardware. IPFire offers advanced features and capabilities for network security and management, making it an ideal solution for small to medium-sized businesses, educational institutions, and other organizations that require robust network protection.
IPFire provides a web-based graphical user interface (GUI) that allows users to configure and manage all aspects of their network. This includes setting up firewall rules, configuring virtual private networks (VPNs), managing DNS and DHCP services, and monitoring network activity. The GUI is highly customizable, allowing users to create dashboards and widgets that display real-time network information and statistics.
One of the key features of IPFire is its firewall capabilities. It offers advanced features such as stateful packet inspection, traffic shaping, and intrusion detection and prevention. These features allow administrators to block unwanted traffic and prevent malicious attacks on their networks. IPFire also supports VPN connections, allowing users to securely connect to their network from remote locations. Another important feature of IPFire is its support for proxy servers, which can be used to filter web traffic and block unwanted content. It also supports content filtering, which allows administrators to block access to specific websites or types of content.
IPFire is highly flexible and can be customized to meet the specific needs of different organizations. It supports a wide range of third-party packages and plugins, including antivirus and anti-spam filters, content filtering, and intrusion detection and prevention systems. It also has an active community of developers and users who contribute to its ongoing development and support.
Наиболее частым применением Linux серверов является организация общего доступа в интернет. Это обусловлено низкой стоимостью такого решения и невысокими требованиями к железу. Во многих случаях это бывает первый Linux сервер в организации, что способно вызвать у администраторов определенные сложности. В данной статье мы пошагово рассмотрим настройку роутера (NAT + DHCP + Squid) на базе Ubuntu Server 9.04
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
Внимание! Данный материал устарел, при настройке роутера на базе Ubuntu Server 12.04 и старше рекомендуем воспользоваться обновленной статьей.
Установка и первоначальная настройка
Ubuntu Server отличается от своей настольной версии отсутствием графической оболочки и пользовательских приложений, а также возможностью предустановки заранее выбранных ролей сервера. Несмотря на это, все сказанное будет справедливо для любой версии Ubuntu и, с некоторыми поправками, для любого Linux дистрибутива. Установка Ubuntu Server происходит в текстовом режиме на русском языке и, как правило, не вызывает сложностей. Отдельно стоит только остановится на списке ролей: из предложенного нас, пожалуй, может заинтересовать только OpenSSH, для удаленного доступа, однако воспользовавшись пунктом Manual package selection опытный пользователь может сразу установить необходимые ему пакеты.
Если же это ваш первый сервер, то лучше всего продолжить не выбирая никакого варианта, все необходимые пакеты мы установим позже. Это позволит иметь более четкое представлении о назначении того или иного пакета и позволит успешно справляться с возможными неполадками. По окончании установки система перезагрузится и встретит нас черным экраном командной строки. Непривычного к консоли Windows-администратора это может неприятно удивить, однако ситуация на сегодняшний день такова, что все серверные роли Linux настраиваются исключительно через консоль и файлы конфигурации.
В первую очередь настроим сетевые соединения. Вводим в консоли:
sudo nano /etc/network/interfaces
Эта команда откроет в консольном редакторе nano конфигурационный файл с сетевыми интерфейсами, аналогичный рисунку ниже.
Пока там прописан единственный интерфейс eth0, настроенный на работу по DHCP. К eth0 у нас подключен ADSL модем (или любая сеть провайдера), а eth1 смотрит во внутреннюю сеть. IP адрес на внешнем интерфейсе 192.168.1.2, шлюз (ADSL модем) 192.168.1.1, внутренняя сеть лежит в диапазоне 10.0.0.1 — 254. Тогда настройки будут выглядеть следующим образом:
auto eth0
iface eth0 inet static
address 192.168.1.2
netmask 255.255.255.0
gateway 192.168.1.1auto eth1
iface eth1 inet static
address 10.0.0.1
netmask 255.255.255.0
Сохраняем изменения Ctrl+O и выходим Ctrl+X. Теперь нужно настроить DNS, для этого выполняем:
sudo nano /etc/resolv.conf
В этом файле необходимо указать адреса DNS серверов, лучше всего указать DNS провайдера или, как в нашем случае, OpenDNS.
#OpenDNS Servers
nameserver 208.67.222.222
nameserver 208.67.220.220
Сохраняем. Теперь нужно перезапустить сетевые службы (либо перезагрузиться):
sudo /etc/init.d/networking restart
Собственно сеть настроена, можно переходить к следующему этапу, однако мы рекомендуем установить еще несколько пакетов для удобства администрирования. Сначала обновим список доступных пакетов:
sudo apt-get update
Также рекомендуем обновить версии пакетов до актуальных:
sudo apt-get upgrade
Теперь установим Midnight Commander (mc), файловый менеджер по образу и подобию Norton Commander или Far:
sudo apt-get install mc
Для запуска Midnight Commander достаточно набрать в консоли его краткое имя: mc. Сразу рекомендуем включить встроенный редактор, более удобный чем nano: F9 — Настройки — Конфигурация — Встроенный редактор.
Для удаленного управления сервером (не бегать же к нему каждый раз) установим OpenSSH, что позволит подключаться к нему из любого места, даже из дома, по защищенному протоколу:
sudo apt-get install ssh
Для подключения с Windows станций можно использовать программу PuTTY (скачать), для корректного отображения символов перед подключением необходимо на закладке Window — Translation выбрать кодировку UTF8.
Для ограничения доступа к серверу можно дописать в файл /etc/ssh/sshd_config параметр AllowUsers с указанием пользователя имеющего доступ по SSH, например для пользователя admin:
AllowUsers admin
Также можно разрешить доступ определенной группе пользователей используя параметр AllowGroups, либо запретить доступ определенным пользователям / группам использовав DenyUsers и DenyGroups.
Настраиваем NAT
Для организации общего доступа к интернет необходимо настроить трансляцию сетевых адресов (NAT), что позволит сетевым службам внутренней сети получать доступ к внешней сети. Для этого достаточно выполнить всего одну команду, но есть одна тонкость: все будет работать только для перезагрузки. На настоящий момент в Linux нет механизма, который бы сохранял настойки iptables при перезагрузке сервера или сети. Поэтому мы пойдем другим путем и вынесем эти настройки в отдельный скрипт, запускаемый при загрузке системы. Сначала создадим файл скрипта:
sudo touch /etc/nat
Потом откроем его в редакторе Midnight Commander (F4) и внесем следующий текст:
#!/bin/sh# Включаем форвардинг пакетов
echo 1 > /proc/sys/net/ipv4/ip_forward
# Сбрасываем настройки брандмауэра
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
# Разрешаем доступ из локальной сети
iptables -A INPUT -i eth1 -j ACCEPT
# Разрешаем инициированные нами подключения извне
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# Разрешаем подключения по SSH
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
#Запрещаем входящие извне
iptables -A INPUT -i eth0 -j DROP
# Разрешаем инициированные нами транзитные подключения извне
iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
# Запрещаем транзитный трафик извне
iptables -A FORWARD -i eth0 -o eth1 -j DROP
# Включаем NAT
iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.0/24 -j MASQUERADE
Сохраняем (F2), для автоматического запуска скрипта снова открываем /etc/network/interfaces и в самый конец файла дописываем:
post-up /etc/nat
Также не забываем дать нашему скрипту права на исполнение:
sudo chmod +x /etc/nat
Перезапускаем сеть:
sudo /etc/init.d/networking restart
Если нигде не допущено ошибок все должно работать. Для проверки укажем на машинах внутренней сети в качестве шлюза и DNS адрес нашего роутера: 10.0.0.1 и пропингуем любой внешний адрес, например один из OpenDNS серверов: 208.67.222.222. Но интернет пока работать не будет. Почему? Да потому, что мы указали в качестве DNS сервера наш роутер, который пока таковым не является. Можно конечно явно прописать DNS на клиентской машине,однако, это не наш метод, если вдруг DNS сервера изменятся, нам что, бегать перепрописывать?
Одно из решений: поднять на нашем роутере полноценный DNS сервер, но в большинстве случаев это избыточно, поэтому мы ограничимся простым кеширующим DNS (а также и DHCP) сервером Dnsmasq.
sudo apt-get install dnsmasq
После установки открываем /etc/dnsmasq.conf, находим, раскомментируем и изменяем следующим образом строку, чтобы разрешить серверу принимать DNS запросы из внутренней сети.:
listen-address=127.0.0.1, 10.0.0.1
Перезапускаем DNS сервер:
sudo /etc/init.d/dnsmasq restart
После чего на клиентских машинах должен заработать интернет.
Настраиваем DHCP
Теперь, когда наш сервер работает, нужно настроить клиентские машины. Можно, конечно, прописать все параметры вручную, но как быть если клиентских машин много и расположены они по всему зданию? Здесь нам на выручку приходит протокол DHCP, который позволяет клиентским машинам получать сетевые настройки автоматически. В качестве DHCP сервера выступит уже установленный Dnsmasq. Настроить его не просто, а очень просто, для чего снова открываем /etc/dnsmasq.conf.
Все что нам надо, это задать диапазон выдаваемых адресов (в нашем случае 10.0.0.100-150), сетевую маску и время, на которое выдается IP адрес:
dhcp-range=10.0.0.100,10.0.0.150,255.255.255.0,12h
Адреса DNS сервера и шлюза сервер берет автоматически из системных настроек. Еще раз перезапускаем Dnsmasq:
sudo /etc/init.d/dnsmasq restart
Теперь можно выставить на клиенте автоматическое получение IP адреса и убедиться, что все работает нормально.
Просмотреть выданные адреса можно командой:
cat /var/log/syslog | grep DHCPOFFER
В выдаче будут перечислены выданные IP адреса и MAC адреса которым они выданы.
Настраиваем кеширующий прокси-сервер Squid
В любой большой сети определенная часть трафика повторяется от пользователя к пользователю и порой его доля доходит до 50%. Логично бы было кешировать наиболее повторяющиеся запросы и тем самым снизить нагрузку на канал, сэкономить входящий трафик и ускорить выдачу страниц конечному пользователю. Для этих задач мы используем Squid — кеширующий прокси с широчайшими возможностями.
sudo apt-get install squid
Останавливаем прокси-сервер и приступаем к настройке:
sudo /etc/init.d/squid stop
Открываем /etc/squid/squid.conf, находим и корректируем следующие строки, не забыв их раскомменитровать:
Указываем порт и адрес на котором squid будет принимать соединения:
http_port 10.0.0.1:3128 transparent
Настраиваем кэш:
cache_dir ufs /var/spool/squid 4096 32 256
Указываем внутренние сети, лишние комментируем:
acl localnet src 10.0.0.0/24 # RFC1918 possible internal network
#acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
#acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
Разрешаем доступ из внутренних сетей (найти и раскомменитровать):
http_access allow localnet
Устанавливаем лимит использования памяти:
memory_pools on
memory_pools_limit 50 MB
Задаем язык вывода ошибок для пользователя
error_directory /usr/share/squid/errors/Russian-koi8-r
Важное замечание! В Ubuntu 9.10 эта строка может выглядеть так, рекомендуем проверить правильность пути: error_directory /usr/share/squid/errors/ru
Сохраняем файл конфигурации. Теперь строим кэш и запускаем:
sudo /usr/sbin/squid -z
sudo /etc/init.d/squid start
Для проверки указываем в браузере на клиентской машине использование прокси-сервера с адресом 10.0.0.1 и портом 3128, убеждаемся что все работает. Остается настроить прозрачную работу прокси-сервера, чтобы http трафик заворачивался на Squid автоматически, без прописывания прокси на клиенте. Для этого открываем /etc/nat и дописываем в конец строку:
# Заворачиваем http на прокси
iptables -t nat -A PREROUTING -i eth1 ! -d 10.0.0.0/24 -p tcp --dport 80 -j REDIRECT --to-ports 3128
Перезапускаем сеть:
sudo /etc/init.d/networking restart
Все. В нашем распоряжении рабочий сервер, позволяющий организовать общий доступ к интернет, кешируюший http трафик и DNS запросы, а также умеющий раздавать клиентским машинам необходимые для работы в сети настройки.
Дополнительные материалы:
- Linux. Настройка роутера (NAT + DHCP + Squid)
- Ubuntu Server. Настраиваем роутер NAT + DHCP + Squid3
- Ubuntu Server. Настраиваем контент-фильтр роутера (DansGuardian)
- DansGuardian. Сложности фильтрации русскоязычного контента
- Ubuntu Server. Настраиваем антивирусный фильтр роутера (ClamAV)
- Ubuntu Server. Дополняем контент-фильтр роутера антивирусом (DansGuardian + ClamAV)
- Ubuntu Server. Настраиваем форвардинг портов на роутере
- Ubuntu Server. Настраиваем аутентификацию через Squid
- Ubuntu Server. Ограничиваем скорость клиентов через Squid
- SARG — анализируем логи прокси-севера Squid
- SAMS — веб-интерфейс для управления Squid и не только
- Squid — настраиваем URL-фильтрацию по спискам
- Squid — блокируем потоковое мультимедиа
- Как устроена и работает система контроля доступа в Squid
- Настраиваем Squid для работы с Active Directory. Часть 1 — базовые настройки
- Настраиваем Squid для работы с Active Directory. Часть 2 — Kerberos-аутентификация
- Настраиваем Squid для работы с Active Directory. Часть 3 — Авторизация на основе групп AD
- WPAD или автоматическая настройка параметров прокси
- Устраняем ошибки Windows Update при работе через прокси-сервер Squid
- Настраиваем ограничение скорости для пользователей в Squid
- Сборка Squid 3.5 с поддержкой SSL из исходных кодов для Debian / Ubuntu
- Настраиваем роутер NAT + DHCP + Squid3 с поддержкой фильтрации SSL-трафика
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.