На просторах интернета присутствует бесчисленное количество информации касательно настройки сервера на Ubuntu, но на каждом шагу можно встретить неочевидные для новичка моменты. Я хочу поделиться своим опытом и, возможно, решить чью-то проблему. В статье будет рассказано, как настроить многопортовый сервер (6 портов): Netplan, DHCP-сервер, UFW(Uncomplicated Firewall). А теперь обо всем по порядку.
Введение
Обновил я интернет до 500 Мбит/с, и пришло время заняться 100 Мбитным сервером, который работал на Pentium 3 и был уже на грани. Выбор пал на китайского зверя. Все, что нужно — имеется, потребление в обычном режиме не превышает 15W, запас производительности для дополнительных задач есть.
Для спокойствия добавил активное охлаждение:
Установку ОС расписывать не буду («ОК — Далее — Далее»), отмечу только, что при установке требуется сконфигурировать хотя бы один сетевой интерфейс для доступа в интернет.
Для удобства я использую Midnight Commander и его текстовый редактор. Работать будем от root-пользователя:
sudo su
Установим MC:
apt-get install mc
Итак, у нас есть установленная Ubuntu Server, начнем с конфигурации остальных сетевых интерфейсов.
Netplan
В последних версиях Ubuntu появилась утилита Netplan, позволяющая настроить сеть в унифицированном формате и выбирать сетевой менеджер для работы. По умолчанию используется Systemd-networkd, я же выбрал NetworkManager, так как установил Web-интерфейс Cockpit, который использует именно NM для отображения части информации.
Синтаксис конфигурации Netplan очень строгий и лишний пробел или табуляция может вызвать ошибку.
Подробнее о функционале уже расписывали habr.com/ru/post/448400, так же различные примеры есть на сайте netplan.io/examples.
Посмотрим названия интерфейсов:
ip a
Перейдем в директорию /etc/netplan и откроем (F4 для МС) файл 50-cloud-init.yaml. Для сетевого интерфейса, который будет использоваться для подключения к интернету, определим получение настроек по dhcp (dhcp4: true). В моем случае это enp6s0. Для остальных укажем false и добавим параметр optional: true, т.к. интерфейс может быть ни к чему не подключен.
Для объединения интерфейсов в локальную сеть я использовал bridge, но, возможно, правильнее было бы использовать vlan. Создадим мост lan-br, зададим общий IP-адрес, DNS-сервер и пропишем объединяемые интерфейсы:
bridges:
lan-br:
dhcp4: false
addresses: [ 192.168.13.1/24 ]
nameservers:
addresses: [ 192.168.13.1 ]
interfaces: [ enp1s0, enp2s0, enp3s0, enp4s0, enp5s0 ]
У меня будет собственный DNS-сервер, поэтому указываю адрес своего сервера в поле nameservers, можно указать например 8.8.8.8 (Google). Указываем версию и менеджер. В итоге должно получиться примерно так:
network:
ethernets:
enp1s0:
dhcp4: false
optional: true
enp2s0:
dhcp4: false
optional: true
enp3s0:
dhcp4: false
optional: true
enp4s0:
dhcp4: false
optional: true
enp5s0:
dhcp4: false
optional: true
enp6s0:
dhcp4: true
nameservers:
addresses:
- 127.0.0.1
- 192.168.13.1
bridges:
lan-br:
dhcp4: false
addresses: [ 192.168.13.1/24 ]
nameservers:
addresses: [ 192.168.13.1 ]
interfaces: [ enp1s0, enp2s0, enp3s0, enp4s0, enp5s0 ]
version: 2
renderer: NetworkManager
Сохраняем файл и проверяем/применяем конфигурацию:
netplan try
Если все сделано правильно, то 'ip a' покажет примерно такую картину:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master lan-br state UP group default qlen 1000
link/ether 0c:e8:2c:68:5b:57 brd ff:ff:ff:ff:ff:ff
3: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master lan-br state UP group default qlen 1000
link/ether 0c:e8:2c:68:5b:58 brd ff:ff:ff:ff:ff:ff
4: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master lan-br state UP group default qlen 1000
link/ether 0c:e8:2c:68:5b:59 brd ff:ff:ff:ff:ff:ff
5: enp4s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
link/ether 0c:e8:2c:68:5b:5a brd ff:ff:ff:ff:ff:ff
6: enp5s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
link/ether 0c:e8:2c:68:5b:5b brd ff:ff:ff:ff:ff:ff
7: enp6s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 0c:e8:2c:68:5b:5c brd ff:ff:ff:ff:ff:ff
inet 188.32.236.197/19 brd 188.32.255.255 scope global dynamic noprefixroute enp6s0
valid_lft 2898sec preferred_lft 2898sec
inet6 fe80::ee8:2cff:fe68:5b5c/64 scope link
valid_lft forever preferred_lft forever
8: lan-br: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 0c:e8:2c:68:5b:57 brd ff:ff:ff:ff:ff:ff
inet 192.168.13.1/24 brd 192.168.13.255 scope global noprefixroute lan-br
valid_lft forever preferred_lft forever
inet6 fe80::ee8:2cff:fe68:5b58/64 scope link
valid_lft forever preferred_lft forever
DHCP-сервер
Настроим DHCP-сервер для того, чтобы клиенты могли получать IP-адреса автоматически.
apt-get install isc-dhcp-server
В файле /etc/default/isc-dhcp-server правим строчку:
INTERFACESv4="lan-br"
Переходим в /etc/dhcp, открываем dhcpd.conf и прописываем настройки:
option domain-name "your-domain-name";
option domain-name-servers 192.168.13.1;
subnet 192.168.13.0 netmask 255.255.255.0 {
range 192.168.13.100 192.168.13.250;
option subnet-mask 255.255.255.0;
option routers 192.168.13.1;
option broadcast-address 192.168.13.255;
}
Перезапустим DHCP-сервер:
service isc-dhcp-server restart
Теперь клиенты должны получать адреса автоматически.
UFW
UFW (Uncomplicated Firewall) — инструмент для более легкой настройки iptables. Настроим фаервол и пересылку пакетов между интерфейсами. Переходим в/etc/ufw и в файле sysctl.conf раскомментируем строку:
net/ipv4/ip_forward=1
Если Вы подключены через ssh перед началом откройте 22 порт:
ufw allow ssh
Включим UFW, проверим состояние:
ufw enable
ufw status verbose
Зададим политики по умолчанию:
ufw default deny incoming
ufw default allow outgoing
ufw default allow routed
Разрешим доступ из локальной сети:
ufw allow in on lan-br to any
Настроим NAT. Откроем файл before.rules и пишем следующее перед блоком *filter:
*nat
:POSTROUTING ACCEPT [0:0]
#local
-A POSTROUTING -s 192.168.13.0/24 -o enp6s0 -j MASQUERADE
COMMIT
Сохраняемся и перезапускаем ufw:
ufw disable
ufw enable
Проверим iptables, должна появиться наша строчка:
iptables -t nat -L -v
На этом базовую настройку сервера можно считать законченной.
Заключение
Я не поднимал вопрос настройки DNS-сервера, так как планирую выпустить вторую часть, где будет изложена настройка Dnscrypt-proxy в роли DNS-сервера для локальной сети.
Более подробная информация:
invite_ciel
Спасибо за рассказ об интересной железке!
Возможно, Вам будет интересно посмотреть на ней на связку "гипервизор + виртуальный роутер".
mekhan
Я на подобной железке с али-экспресса поставил Proxmox, настроил сеть через Open vSwitch с vlan (у OVS есть некоторые преимущества перед linux bridge, но в базовом сценарии использования они не существенны), в качестве VM, гоняющих трафик, попробовал виртуальный роутер VyOS и фаерволл pfSense. Присоединяюсь к рекомендации поставить гипервизор, а уже в нём разворачивать виртуалки с инфраструктурным софтом.
Интереснее было бы почитать про DoH или DoT в домашней сети, он и про Dnscrypt-proxy будет полезно.balamutang
А какие преимущества у Proxmox против XCP-ng/XenServer?
И что лучше VyOS или pfSense? На чем остановились?
Fox_exe
У ProxMox есть удобная веб-панель управления, которая работает на хосте, а не в отдельной виртуалке. К томуже он базируется на Debian, а значит его значительно проще чинить, оптимизировать и т.д. Да и поддержка железа там лучше (На моём китайце Xen постоянно валился в kernel panic, а VMWare вообще не нашол сеть).
В качестве роутера ещё можно рассматривать OpenWRT.
balamutang
C OpenWRT как раз у меня заморочка, в виртуалке Xen (пробовал и Xen в убунте и в XCP-ng/XenServer) у него почему-то ФС в readonly в результате чего он не инициализируется до конца, не сохраняются конфиги, не ставится софт и тд, хотя если прямо на хост его ставить то все ок (сейчас так и работает хостом, но хотелось бы его виртуализировать), надо тогда Proxmox еще попробовать, может с KVM виртуализацией взлетит.
Fox_exe
У меня он какраз в ProxMox'е крутится. Работает как часы. Только с WiFi были проблеммы — постоянно зависал до перезагрузки. Пришлось поднимать на хост-системе и заводить в LAN-Bridge/interface.
Завернул в OpenWRT DNS-Crypt proxy, AD Block, Dyn-DNS client (+собственный костыль для Yandex.dns) и ещё кое-чего по мелочи.
balamutang
А какая у вас версия openwrt?
Я уже не знаю куда думать, в ProxMox'е получил тот же результат что и в ксене: стартует, но все ридонли (маунт в openwrt показывает что все якобы в rw), ставил 19.7. Файл образа диска с правами 666.
Пару лет назад ставил в hyper-v в одной конторе — там все работало нормально, вечером попробую конечно тот образ скопировать себе, но это какой-то неправильный путь.
Fox_exe
Диск на 1GB в режиме VirtIO SCSI. Правда уже не помню, как ставил — толи просто конвертанул установочный образ с оффсайта и с него и гружусь, толи в самом образе был установочник…
balamutang
Как говорится "на третьи сутки индеец Зоркий Глаз обнаружил что" он скачал squashfs образ вместо ext4
mekhan
XCP-ng/XenServer я не пробовал, а Proxmox очень прост как в установке, так и использовании, особенно в домашнем применении. Разворачивать можно как виртуальные машины KVM, так и контейнеры LXC. Управление как из CLI, так и из WEB-GUI.
По поводу выбора из виртуальных ротуеров — я пока ни на чём не остановился, так как пока не перевёл маршрутизацию на этот девайс. Но в целом, если сравнивать VyOS и pfSense, то у них немного разное предназначение. Первый — это чисто роутер на основе Debian Linux со своим CLI, второй — файрволл с функциями маршрутизации на базе FreeBSD, с удобным WEB-интерфейсом. В обоих продуктах есть и DHCP-сервер, и DNS, и всё то, что может понадобиться в маленькой не-корпоративной сети. В pfSense я ещё добавил Wireguard сторонним пакетом, и в принципе планирую оставить обе VM, одна маршрутизирует трафик, вторая стоит на границе домашней сети, где будут настраиваться policy, NAT, и подключаться удалённые машины через wireguard.
TheRaven
А можете кратенько рассказать где брали Wireguard для pFsense и как ставили?
mekhan
Я погуглил и установил пакет pfSense-pkg-wireguard из этого топика. До этого я ни разу сам не ставил FreeBSD`шные пакеты, но получилось всё без подводных камней, после установки пакета появляется новый пункт в WEB-интерфейсе, никакие конфиги в CLI править не надо.
swiing
У VyOS нет веб интерфейса только консоль очень похожая на juniper это по первости может отпугнуть и он только рутер по сути, мне в pfsense нравиться наличие haproxy например, ну и имхо неплохой web-интерфейс. С гипервизором (ESXi) у меня был вообще интересный прикол: у меня были 2 сетевухи realtek и они вообще не могли в L3 routing на гигабите, если ставить pfsense без esxi то все норм, а с esxi дай бог 200 мбит, видимо проблема была в community драйверах для realtek под esxi и TCP Offload Engine, в итоге плюнул и купил intel i350 бушную.
werter78
Добрый.
Про Proxmox VE, pfsense (есть еще его форк — opnsense) и не только forum.netgate.com/topic/120102/proxmox-ceph-zfs-pfsense-и-все-все-все
P.s. Дополнительно в вирт. машину тот же Pi-hole установить рекламу (и всякую гадость) по dns резать.
balamutang
Два дня погонял виртуализацию роутера и могу сказать что идея с виртуальным роутером работает только если интернет 100Мбит/с и медленнее.
Из-за виртуализации сетевых интерфейсов на бОльших скоростях сильно растет нагрузка на процессор и скорость упирается в 300/200Мбит/с (300/200 proxmox и 200/300 XCP-ng) против 800/800Мбит/с (800 — ограничение тарифного плана) на голом железе (даже при использовании VirtIO сетевых карт).
vrangel
Спасибо за статью. Некоторое время смотрю на такие пк для DVR на 4-5 ip камер.
Ищу решения с возможностью загрузки с чего-нибудь быстрого, но с отдельным HD для записи видео. По фото на плате есть что-то вроде mini pcie или m.2. Не тестировали работу?
Dvlbug
Судя по всему (выбор конфигурации для покупки) слот для SSD в режиме sata. Должен работать, правда смущает смещенное крепление для болтика.
vrangel
Ага, я вот тоже не могу разобраться, хотелось бы уточнить. Возможно, продавец с али ответит.
andreili
Там на странице написано:
mekhan
Советую присмотреться к более производительному mini-pc на Celeron J3160, например вот обзор самой интересной железки на этом процессоре, но портов там на 2 меньше, чем у сабжа, и для подключения накопителя только SATA. Зато 4 ядра и поддержка AES-NI, и TDP 6W против 17W у Celeron 1037U
vrangel
Отличный обзор, почти идеальный для меня вариант.
mekhan
По поводу накопителя только я неточно немного написал, там ещё mSATA есть. Впрочем, обзор действительно отличный, из двух частей и с бенчмарками, и там всё подробно расписано.
AlexLegio Автор
Здравствуйте! На плате место под mSATA SSD и также присутствует разъем SATA. На корпусе снизу есть отверстия для крепления 2.5". Я использую только SSD
vrangel
Огромное человеческое спасибо!
Divangog
Вроде не плохо, жду вторую часть, спасибо!
balamutang
Лет 10-15 назад я другого кейса для роутера и не представлял: сервер на фряхе или линухе, конфиги и прочее.
Но как-то наигрался со всем этим и править эти километровые конфиги нет никакого желания, да и времени жалко.
Тоже недавно обновил интернет до 800мбит/с и поскольку микротик на шлюзе был 100мбитный — заменил его на б/у баребон ( celeron j1037u проц, 4GB оперативки + вместо диска usb-флешка 16гб, купил за 2500р) с пассивным охлаждением и двумя гигабитными сетевухами на борту, натянул на него openwrt и вполне доволен результатом: два клика в веб-интерфейсе и порт проброшен, еще несколько кликов и адрес в DHCP уже в static lease.
Я это к чему — как лабораторная работа конечно неплохо, но использовать убунту как роутер в быту — просто неудобно.
xztau
Блин! Такой бы, но на Baikal-T1 да как NAS — Вот тогда заживём…
mekhan
Стало интересно, какие преимущества у Байкала перед процессорами Интел?
gxcreator
10 Gb Ethernet (BASE KR/KX4)
mekhan
Не слышал до этого про KR/KX4, сейчас почитал про 10GBASE-KR и понял только, что это описание backplane интерфейса. И не понял, как использовать это на практике.
Alekseyz
А зачем на него тянуть голую убунту когда есть pfSense
sirota
Тоже не совсем понял. Тем более на голой железе, когда любой гипервизор и снапшот на лету в 100 раз упрощает жизнь.
jacendi
Железка выглядит интересно. А эти 6 портов Ethernet как реализованы, через свич?
dvrpd
Судя по названиям и количеству интерфейсов, каждый порт — отдельный интерфейс, и связывать их придётся через VLAN.
jacendi
Это же прекрасно.
vanyas
Нет там никакого синтаксиса нетплана, это обычный YAML, который внезапно чувствителен к пробелам.
Ну и зачем там UFW, если все равно правила iptables пишите?
Supme
Файл 50-cloud-init.yaml не для того- это автоматически меняющийся cloudinit'ом файл. Если вам не нужен cloudinit, то лучше деинсталировать его
drWhy
КМК вентилятор именно для спокойствия, на нагрев процессора, установленного на плате внутри корпуса, он никак не повлияет. Если тот же вентилятор поставить внутрь железки (похоже, передняя панель снимается легко и не опломбирована), он, кроме непосредственно обдува процессора и-что-там-ещё-греется, будет перемешивать воздух до равномерно тёплого состояния, что позволит алюминиевому корпусу активнее работать как радиатор.
AlexLegio Автор
На верхней стороне просверлены мной дырки, так что движение воздуха проходное. Внутри железки места впритык.
vikarti
Так по ссылке на али написано что у них есть версия с кулером и надо просто им указать при заказе. Зачем внешний кулер тогда?
AlexLegio Автор
Я брал ее год назад и без корпуса, тогда не было версии с кулером. У меня и процессор 1007 еще, а не 1037.
in11w
Dnsmasq лучше для локальной сети, а запросы вовне направлять на DNS с шифрованием на другом порту. Неважно какой — Dnscrypt, DoH или DoT.
in11w
Конечно, симпатично выглядит компьютер с интегрированными портами, но, на моей памяти, порты подключенные к провайдеру несколько раз горели. На роутерах и на ПК. На разных провайдерах. Хорошо, на ПК внешняя карточка в PCI слоте была.
longmaster
А почему не Mikrotik, тот же HEX S? Или соизмеримый по стоимости с этой китайской железкой RBMRTGx4?
Сам присматриваю себе решение для частного дома техногиков :-), где нужно будет и честный гигабит внутри сети, и несколько гостевых сетей, и возможность VPN-каналами утилизировать по максимуму WAN-канал, не упираясь в производительность «дохлых» процов в бытовых роутерах, резервный 4G-канал.
Да, когда-то я сам собирал шлюзы из говна и палок, ставил фрю и просиживал часами в консоли, настраивая всякие плюхи. Но сейчас как-то хочется уже более законченного комплексного решения.
Вот и раздумываю, то ли выстраивать связку из микротиков: маршрутизатор — коммутатор — несколько их же точек доступа 802.11AC. Вроде как обещана некая связность всего этого оборудования. Толи городить зоопарк из всякого разного.
Какие преимущества может дать такая железяка в качестве шлюза? Мне в голову разве что прокся приходит, но с современными каналами сильно сомневаюсь в её необходимости.
mekhan
Вопрос не ко мне, но хочется высказаться по поводу Микротика. Я уже много лет использую дома гигабитный MikroTik с WiFi, всё вроде бы хорошо при обычном применении, но, когда пробовал настроить всякие разные VPN и IPSec туннели с линуком на другой стороне, у меня это не выходило. Я не спорю, что он может всё умеет, но RouterOS — своеобразная OS и надо быть специалистом по Микротикам, чтобы там настраивать что-то более-менее сложное. Последней каплей стало то, что потратил день и полночи, чтобы настроить L2 VLAN, и оно так и не заработало, как я это предполагал.
Да и вообще одно другому не мешает, у меня в Микротик приходит пару провайдеров, раздаётся интернет на консьюмерские девайсы дома, и транком прокинуты виланы до подобного сабжу мини-сервера, который является шлюзом для ещё тройки мини-серверов, такая мини-лаборатория, всё на обычном Linux, с виртуализацией.
Если строить домашнюю сеть в частном доме, где нужны несколько точек, то я бы выбрал, конечно, или MikroTik, или UniFi, со своими управлялками и обвязками.