Сетевой шлюз на базе Ubuntu 24.04 (Gateway)
Предисловие
После очередного успешного теста на хоть и домашнем, но PRODe Ubuntu 20.04 - он лег далеко и надолго. Бэкапа и точек отката не было, вручную сняв с сервера все данные с жестких дисков и все данные баз данных было решено собрать на том же железе обновленный сервер на Ubuntu 24.04.1 LTS.
Поискав старые заметки на блоге, я понял, что и текстовых бэкапов у меня нет, а значит (пока есть время) открывается новый цикл записей по настройке домашнего мини-сервера на Ubuntu 24.04.1 LTS. Установка описана не будет, но основные этапы настройки с необходимыми конфигами - да.
Для начала думаю стоит посмотреть сюда:
Про сеть
Пример сети, организованной у меня дома. Интернет поступает через оптоволоконный кабель на 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
Пока все.