Сетевой шлюз на базе Ubuntu 24.04 (Gateway)

Сетевой шлюз на базе Ubuntu 24.04 (Gateway)
Photo by Gabriel Heinzer / Unsplash

Предисловие

После очередного успешного теста на хоть и домашнем, но PRODe Ubuntu 20.04 - он лег далеко и надолго. Бэкапа и точек отката не было, вручную сняв с сервера все данные с жестких дисков и все данные баз данных было решено собрать на том же железе обновленный сервер на Ubuntu 24.04.1 LTS.

Поискав старые заметки на блоге, я понял, что и текстовых бэкапов у меня нет, а значит (пока есть время) открывается новый цикл записей по настройке домашнего мини-сервера на Ubuntu 24.04.1 LTS. Установка описана не будет, но основные этапы настройки с необходимыми конфигами - да.

Для начала думаю стоит посмотреть сюда:

Первоочередная защита ssh Ubuntu сервера
Заметка для настроек нового VDS. Создаем НЕ Root пользователя Создаем нерутового пользователя, для интерактивного ввода используем команду adduser adduser <username> Добавляем пользователя в группу sudo: usermod -aG sudo <username> Редактируем ssd_config Я не правлю дефолтовую конфигурацию, а создаю отдельный файл следующего содержания (не забудь изменить значения <port> и <username>: #Локальная конфигурация SSHd # What</username></port></username></username>

Про сеть

Пример домашней сети

Пример сети, организованной у меня дома. Интернет поступает через оптоволоконный кабель на Wi-Fi роутер провайдера, оттуда интернет раздается в локальную сеть через Wi-Fi и по проводам, адреса клиентов отдает DHCP, настроенный на роутере. Все работает отлично. В эту сеть добавляется новое звено, MiniPC с 2-я интерфейсами, один из них смотрит в Wi-Fi роутер, второй в локальную сеть (некоторые уже заметили, что сеть образует кольцо, что для дома абсолютно не критично и даже удобно, как я считаю, имхо), его задача - сменить адресацию сети, стать приоритетным DHCP сервером, держать на себе некоторые сервисы + стать шлюзом и продолжать обеспечивать клиентов локальной сети доступом в интернет, прекрасно для всего этого подходит установка Ubuntu 24.04.1 LTS.

Конкретно здесь будет заметка о настройке Ubuntu 24.04.1 LTS как сетевого шлюза для обеспечения клиентов локальной сети доступом в интернет.

Редактируем сетевые интерфейсы

Основной утилитой конфигурирования сетевых интерфейсов в Ubuntu уже давно является Netplan, поэтому работать будем с ним.

Обычно, при установке системы, по прохождению этапа конфигурации интерфейсов создается файл настройки /etc/netplan/50-cloud-init.yaml , можно отредактировать его, но необходимо предварительно создать файл /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg с текстом network: {config: disabled} для отключения возможности конфигурации сети cloud-init. Я просто удалил данный файл и создал новый /etc/netplan/01-netcfg.yaml со следующим содержимым:

network:
    version: 2
    renderer: networkd
    ethernets:
        enp1s0:
            dhcp4: no
            dhcp6: no
            addresses:
            - 192.168.0.100/24
            nameservers:
                addresses:
                - 8.8.8.8
                - 8.8.4.4
                - 1.1.1.1
                - 1.0.0.1
                - 77.88.8.8
                - 77.88.8.1
                - 192.168.0.1
            routes:
            -   to: default
                via: 192.168.0.1
        enp3s0:
            dhcp4: no
            dhcp6: no
            addresses:
            - 192.168.1.1/24

enp1s0 - интерфейс, подключенный к источнику интернета, т.е. к Wi-Fi роутеру с адресом 192.168.0.1, на что указывает секция routes, в блоке nameservers перечислены адреса dns серверов Google, Cloudflare, Yandex.

enp3s0 - интерфейс, обращенный в локальную сеть, имеющий только начальный адрес.

UFW Masquerading и проброс пакетов

Включаем проброс пакетов на уровне ядра, для этого создаем файл:

sudo nano /etc/sysctl.d/50-gateway.conf

Добавляем туда пару строк (одна для проброса пакетов IPv4, вторая для IPv6 (не используется, закомментирована)):

net.ipv4.ip_forward=1
#net.ipv6.conf.all.forwarding=1

Сохраняем, выходим (Ctrl + X, Y, Enter).

Применяем настройки файла:

sudo sysctl -p /etc/sysctl.d/50-gateway.conf

Результатом выполнения команды должен стать вывод незакомментированной строки net.ipv4.ip_forward = 1.

Теперь проверяем, что в файле /etc/default/ufw параметру DEFAULT_FORWARD_POLICY присвоено значение "ACCEPT":

DEFAULT_FORWARD_POLICY="ACCEPT"

Далее необходимо в начало файла (после начальных комментариев) /etc/ufw/before.rules добавить правила (где 192.168.1.0/24 - диапазон адресов локальной сети, а enp1s0 - интерфейс с выходом в интернет:

# nat Table rules
*nat
:POSTROUTING ACCEPT [0:0]

# Forward traffic from enp3s0 through enp1s0.
-A POSTROUTING -s 192.168.1.0/24 -o enp1s0 -j MASQUERADE

# don't delete the 'COMMIT' line or these nat table rules won't be processed
COMMIT

Пока все.