Домашний интернет-шлюз. Начальная настройка 6-портового мини-компьютера на Ubuntu Server 20.04 LTS


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

Более подробная информация:

Similar posts

AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 48

    0

    Спасибо за рассказ об интересной железке!
    Возможно, Вам будет интересно посмотреть на ней на связку "гипервизор + виртуальный роутер".

      0
      Я на подобной железке с али-экспресса поставил Proxmox, настроил сеть через Open vSwitch с vlan (у OVS есть некоторые преимущества перед linux bridge, но в базовом сценарии использования они не существенны), в качестве VM, гоняющих трафик, попробовал виртуальный роутер VyOS и фаерволл pfSense. Присоединяюсь к рекомендации поставить гипервизор, а уже в нём разворачивать виртуалки с инфраструктурным софтом.
      настройка Dnscrypt-proxy в роли DNS-сервера для локальной сети
      Интереснее было бы почитать про DoH или DoT в домашней сети, он и про Dnscrypt-proxy будет полезно.
        0
        А какие преимущества у Proxmox против XCP-ng/XenServer?
        И что лучше VyOS или pfSense? На чем остановились?
          0
          У ProxMox есть удобная веб-панель управления, которая работает на хосте, а не в отдельной виртуалке. К томуже он базируется на Debian, а значит его значительно проще чинить, оптимизировать и т.д. Да и поддержка железа там лучше (На моём китайце Xen постоянно валился в kernel panic, а VMWare вообще не нашол сеть).

          В качестве роутера ещё можно рассматривать OpenWRT.
            0
            C OpenWRT как раз у меня заморочка, в виртуалке Xen (пробовал и Xen в убунте и в XCP-ng/XenServer) у него почему-то ФС в readonly в результате чего он не инициализируется до конца, не сохраняются конфиги, не ставится софт и тд, хотя если прямо на хост его ставить то все ок (сейчас так и работает хостом, но хотелось бы его виртуализировать), надо тогда Proxmox еще попробовать, может с KVM виртуализацией взлетит.
              +1
              У меня он какраз в ProxMox'е крутится. Работает как часы. Только с WiFi были проблеммы — постоянно зависал до перезагрузки. Пришлось поднимать на хост-системе и заводить в LAN-Bridge/interface.

              Завернул в OpenWRT DNS-Crypt proxy, AD Block, Dyn-DNS client (+собственный костыль для Yandex.dns) и ещё кое-чего по мелочи.
                0
                А какая у вас версия openwrt?
                Я уже не знаю куда думать, в ProxMox'е получил тот же результат что и в ксене: стартует, но все ридонли (маунт в openwrt показывает что все якобы в rw), ставил 19.7. Файл образа диска с правами 666.
                Пару лет назад ставил в hyper-v в одной конторе — там все работало нормально, вечером попробую конечно тот образ скопировать себе, но это какой-то неправильный путь.
                  0
                  OpenWrt 18.06.4 r7808-ef686b7292
                  proxmox-ve: 6.2-1 (running kernel: 5.3.18-3-pve)
                  pve-manager: 6.2-4 (running version: 6.2-4/9824574a)

                  Диск на 1GB в режиме VirtIO SCSI. Правда уже не помню, как ставил — толи просто конвертанул установочный образ с оффсайта и с него и гружусь, толи в самом образе был установочник…
                    0

                    Как говорится "на третьи сутки индеец Зоркий Глаз обнаружил что" он скачал squashfs образ вместо ext4

            0

            XCP-ng/XenServer я не пробовал, а Proxmox очень прост как в установке, так и использовании, особенно в домашнем применении. Разворачивать можно как виртуальные машины KVM, так и контейнеры LXC. Управление как из CLI, так и из WEB-GUI.
            По поводу выбора из виртуальных ротуеров — я пока ни на чём не остановился, так как пока не перевёл маршрутизацию на этот девайс. Но в целом, если сравнивать VyOS и pfSense, то у них немного разное предназначение. Первый — это чисто роутер на основе Debian Linux со своим CLI, второй — файрволл с функциями маршрутизации на базе FreeBSD, с удобным WEB-интерфейсом. В обоих продуктах есть и DHCP-сервер, и DNS, и всё то, что может понадобиться в маленькой не-корпоративной сети. В pfSense я ещё добавил Wireguard сторонним пакетом, и в принципе планирую оставить обе VM, одна маршрутизирует трафик, вторая стоит на границе домашней сети, где будут настраиваться policy, NAT, и подключаться удалённые машины через wireguard.

              0
              А можете кратенько рассказать где брали Wireguard для pFsense и как ставили?
                +1
                Я погуглил и установил пакет pfSense-pkg-wireguard из этого топика. До этого я ни разу сам не ставил FreeBSD`шные пакеты, но получилось всё без подводных камней, после установки пакета появляется новый пункт в WEB-интерфейсе, никакие конфиги в CLI править не надо.
              0
              У VyOS нет веб интерфейса только консоль очень похожая на juniper это по первости может отпугнуть и он только рутер по сути, мне в pfsense нравиться наличие haproxy например, ну и имхо неплохой web-интерфейс. С гипервизором (ESXi) у меня был вообще интересный прикол: у меня были 2 сетевухи realtek и они вообще не могли в L3 routing на гигабите, если ставить pfsense без esxi то все норм, а с esxi дай бог 200 мбит, видимо проблема была в community драйверах для realtek под esxi и TCP Offload Engine, в итоге плюнул и купил intel i350 бушную.
                0
                Добрый.
                Про Proxmox VE, pfsense (есть еще его форк — opnsense) и не только forum.netgate.com/topic/120102/proxmox-ceph-zfs-pfsense-и-все-все-все

                P.s. Дополнительно в вирт. машину тот же Pi-hole установить рекламу (и всякую гадость) по dns резать.
                0
                Два дня погонял виртуализацию роутера и могу сказать что идея с виртуальным роутером работает только если интернет 100Мбит/с и медленнее.
                Из-за виртуализации сетевых интерфейсов на бОльших скоростях сильно растет нагрузка на процессор и скорость упирается в 300/200Мбит/с (300/200 proxmox и 200/300 XCP-ng) против 800/800Мбит/с (800 — ограничение тарифного плана) на голом железе (даже при использовании VirtIO сетевых карт).
                Скриншоты
                image
                Причем непринципиальна система виртуализации, Xen или qemu-kvm, ограничения по скорости примерно одинаковы.
                Наверно пробрасыванием сетевых карт напрямую в виртуалку или используя контейнеры LXC получилось бы добиться скорости близкой к железной версии роутера, но сетевых карт у меня всего две, а найти рабочий темплейт openwrt для Proxmox не удалось.
                (коммент также для Fox_exe и mekhan )
                Так что пока возвращаюсь к виртуализации ОС внутри нативного openwrt (благо в 19.07.3 уже есть qemu-kvm, правда урезанный, без VNC консоли и прочих плюшек)
                  0
                  Что-то у тебя не так, я попробовал на своём не сильно производительном SBC на intel E3845 и результат близок к идеальному (специально вчера поменял тариф на 1Gbit/s, чтобы провести бенчмарки).

                  Web speedtest.net
                  image
                  ПК подключен в гигабитный порт SBC, в Proxmox настроены VLAN через Open vSwitch, маршрутизацией трафика между VLAN занимается VyOS

                  speedtest-cli
                  В панели вверху слева запущен gotop на хостовой ОС, справа htop в VyOS.
                  image
                  Speedtest из CLI делался с соседнего SBC, подключенного в гигабитный порт того же SBC, на котором VyOS. Скорость почему-то всегда не больше 500-600Mbit/s, интересно будет разобраться почему же. Но ещё интереснее то, что с LXC контейнеров speedtest показывает всего 2-3Mbit/s, с хостового Debian тоже такая низкая скорость в того же (а если просто качать файл, то скорость 30Mbit/s). Но это уже наверное лишняя информация. Надо как-нибудь заняться бенчмаркингом, благо есть инструменты, и что потестировать тоже есть.
                  Кстати, если пользоваться только GPON маршрутизатором от МГТС, то download будет не больше 500Mbit/s, а если натить трафик на отдельном маршрутизаторе, хоть и виртуальном, можно добиться максимальной скорости по тарифу.
                    0
                    Спасибо за фидбэк.
                    Интересная загадка, по производительности E3845 примерно равен 1037u и на обоих поддерживается VT-x и не поддерживается VT-d.
                    Пока только мысль что может проблемы в сетевых интерфейсах, у меня в дектопной матери (gigabyte ga-c1037un-eu) встроены дешевые реалтеки (RTL 8168evl/8111evl в кернел логе), а в SBC наверняка что-то более приличное.
                      0
                      Да, возможно из-за адаптеров, я специально выбирал на intel`овском чипе, на этом девайсе стоит 82583V. Из всего этого можно сделать, что не надо хоронить идею виртуализации сети :)
              0
              Спасибо за статью. Некоторое время смотрю на такие пк для DVR на 4-5 ip камер.
              Ищу решения с возможностью загрузки с чего-нибудь быстрого, но с отдельным HD для записи видео. По фото на плате есть что-то вроде mini pcie или m.2. Не тестировали работу?
                0
                Судя по всему (выбор конфигурации для покупки) слот для SSD в режиме sata. Должен работать, правда смущает смещенное крепление для болтика.
                  0
                  Ага, я вот тоже не могу разобраться, хотелось бы уточнить. Возможно, продавец с али ответит.
                    0
                    Там на странице написано:
                    MSATA SSD (поддержка 1x mSATA SSD, 1x2,5 дюйма HDD/SSD)
                  0
                  Советую присмотреться к более производительному mini-pc на Celeron J3160, например вот обзор самой интересной железки на этом процессоре, но портов там на 2 меньше, чем у сабжа, и для подключения накопителя только SATA. Зато 4 ядра и поддержка AES-NI, и TDP 6W против 17W у Celeron 1037U
                    0
                    Отличный обзор, почти идеальный для меня вариант.
                      0

                      По поводу накопителя только я неточно немного написал, там ещё mSATA есть. Впрочем, обзор действительно отличный, из двух частей и с бенчмарками, и там всё подробно расписано.

                    0
                    Здравствуйте! На плате место под mSATA SSD и также присутствует разъем SATA. На корпусе снизу есть отверстия для крепления 2.5". Я использую только SSD
                      0
                      Огромное человеческое спасибо!
                    0
                    Вроде не плохо, жду вторую часть, спасибо!
                      0
                      Лет 10-15 назад я другого кейса для роутера и не представлял: сервер на фряхе или линухе, конфиги и прочее.
                      Но как-то наигрался со всем этим и править эти километровые конфиги нет никакого желания, да и времени жалко.
                      Тоже недавно обновил интернет до 800мбит/с и поскольку микротик на шлюзе был 100мбитный — заменил его на б/у баребон ( celeron j1037u проц, 4GB оперативки + вместо диска usb-флешка 16гб, купил за 2500р) с пассивным охлаждением и двумя гигабитными сетевухами на борту, натянул на него openwrt и вполне доволен результатом: два клика в веб-интерфейсе и порт проброшен, еще несколько кликов и адрес в DHCP уже в static lease.
                      Я это к чему — как лабораторная работа конечно неплохо, но использовать убунту как роутер в быту — просто неудобно.
                        +1
                        Блин! Такой бы, но на Baikal-T1 да как NAS — Вот тогда заживём…
                          0

                          Стало интересно, какие преимущества у Байкала перед процессорами Интел?

                            0
                            10 Gb Ethernet (BASE KR/KX4)
                              0
                              Не слышал до этого про KR/KX4, сейчас почитал про 10GBASE-KR и понял только, что это описание backplane интерфейса. И не понял, как использовать это на практике.
                          +2
                          А зачем на него тянуть голую убунту когда есть pfSense
                            0

                            Тоже не совсем понял. Тем более на голой железе, когда любой гипервизор и снапшот на лету в 100 раз упрощает жизнь.

                            0
                            Железка выглядит интересно. А эти 6 портов Ethernet как реализованы, через свич?
                              0
                              Судя по названиям и количеству интерфейсов, каждый порт — отдельный интерфейс, и связывать их придётся через VLAN.
                                0
                                Это же прекрасно.
                              0
                              Синтаксис конфигурации Netplan очень строгий и лишний пробел или табуляция может вызвать ошибку.

                              Нет там никакого синтаксиса нетплана, это обычный YAML, который внезапно чувствителен к пробелам.
                              Ну и зачем там UFW, если все равно правила iptables пишите?
                                0

                                Файл 50-cloud-init.yaml не для того- это автоматически меняющийся cloudinit'ом файл. Если вам не нужен cloudinit, то лучше деинсталировать его

                                  0
                                  КМК вентилятор именно для спокойствия, на нагрев процессора, установленного на плате внутри корпуса, он никак не повлияет. Если тот же вентилятор поставить внутрь железки (похоже, передняя панель снимается легко и не опломбирована), он, кроме непосредственно обдува процессора и-что-там-ещё-греется, будет перемешивать воздух до равномерно тёплого состояния, что позволит алюминиевому корпусу активнее работать как радиатор.
                                    0
                                    На верхней стороне просверлены мной дырки, так что движение воздуха проходное. Внутри железки места впритык.
                                    0
                                    Так по ссылке на али написано что у них есть версия с кулером и надо просто им указать при заказе. Зачем внешний кулер тогда?
                                      0
                                      Я брал ее год назад и без корпуса, тогда не было версии с кулером. У меня и процессор 1007 еще, а не 1037.
                                      0
                                      Dnscrypt-proxy в роли DNS-сервера для локальной сети.

                                      Dnsmasq лучше для локальной сети, а запросы вовне направлять на DNS с шифрованием на другом порту. Неважно какой — Dnscrypt, DoH или DoT.
                                        +1
                                        Конечно, симпатично выглядит компьютер с интегрированными портами, но, на моей памяти, порты подключенные к провайдеру несколько раз горели. На роутерах и на ПК. На разных провайдерах. Хорошо, на ПК внешняя карточка в PCI слоте была.
                                          0
                                          А почему не Mikrotik, тот же HEX S? Или соизмеримый по стоимости с этой китайской железкой RBMRTGx4?
                                          Сам присматриваю себе решение для частного дома техногиков :-), где нужно будет и честный гигабит внутри сети, и несколько гостевых сетей, и возможность VPN-каналами утилизировать по максимуму WAN-канал, не упираясь в производительность «дохлых» процов в бытовых роутерах, резервный 4G-канал.
                                          Да, когда-то я сам собирал шлюзы из говна и палок, ставил фрю и просиживал часами в консоли, настраивая всякие плюхи. Но сейчас как-то хочется уже более законченного комплексного решения.
                                          Вот и раздумываю, то ли выстраивать связку из микротиков: маршрутизатор — коммутатор — несколько их же точек доступа 802.11AC. Вроде как обещана некая связность всего этого оборудования. Толи городить зоопарк из всякого разного.
                                          Какие преимущества может дать такая железяка в качестве шлюза? Мне в голову разве что прокся приходит, но с современными каналами сильно сомневаюсь в её необходимости.
                                            0
                                            Вопрос не ко мне, но хочется высказаться по поводу Микротика. Я уже много лет использую дома гигабитный MikroTik с WiFi, всё вроде бы хорошо при обычном применении, но, когда пробовал настроить всякие разные VPN и IPSec туннели с линуком на другой стороне, у меня это не выходило. Я не спорю, что он может всё умеет, но RouterOS — своеобразная OS и надо быть специалистом по Микротикам, чтобы там настраивать что-то более-менее сложное. Последней каплей стало то, что потратил день и полночи, чтобы настроить L2 VLAN, и оно так и не заработало, как я это предполагал.
                                            Да и вообще одно другому не мешает, у меня в Микротик приходит пару провайдеров, раздаётся интернет на консьюмерские девайсы дома, и транком прокинуты виланы до подобного сабжу мини-сервера, который является шлюзом для ещё тройки мини-серверов, такая мини-лаборатория, всё на обычном Linux, с виртуализацией.
                                            Если строить домашнюю сеть в частном доме, где нужны несколько точек, то я бы выбрал, конечно, или MikroTik, или UniFi, со своими управлялками и обвязками.

                                          Only users with full accounts can post comments. Log in, please.