
На просторах интернета присутствует бесчисленное количество информации касательно настройки сервера на 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:
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-сервера для локальной сети.
Более подробная информация: