Контроль пропускной способности в Ubuntu с помощью Traffic Control

htb — корневой способ фильтрации с идентификатором 1. Не классифицированный траффик отнести к классу 1:15 (удалить — delete вместо add):

создать родительский класс (для расширения канала, когда остальные не заняты):

создать подкласс подсети 30MBit (ceil — расширение канала):

создать подкласс подсети 20MBit (без расширения):

40MBit для всех остальных:

Подключить способ фильтрации «sfq» вместо «FIFO», для равномерного распределения:

Фильтры, по подсетям (для «всех остальных» уже всё задано):

Всем 4, когда не занято, а кое-кому 100 (рабочий вариант):

При ограничении трафика на внутреннем интерфейсе, он скапливается на внешнем, по этому нужно использовать псевдо устройство IFB (ingress) на внешнем и классифицировать от него.

Добавление сетевой карты в Ubuntu

Воткнули сетевую карту, сигналов нет..
lshw -c network — узнать logical name (в примере enp17s10)
Добавление сетевой карты в Ubuntu
До версии 18:
nano /etc/network/interfaces — вписать в файл, например статический ip
(сохранить — ctrl+o):

sudo service networking restart — перезапуск сети

После версии 18:
sudo su — root
netplan generate — создать файл настроек (если ещё не создан)
nano /etc/netplan/01-netcfg.yaml
(имя файла может быть другим, отступы пробелами обязательны, внести настройки, добавить новый сетевой интерфейс):

netplan apply — применить и проверить.
sudo service networking restart — перезапуск сети

Проверка сети:
sudo ethtool enp17s10 — сведения, есть ли link
ip link set enp0s3 up — включить, если нет
mtr yandex.ru — трассеровка

Настройка DHCP и DNS в Linux Ubuntu с помощью dnsmasq:
apt-get install dnsmasq — установка
nano /etc/dnsmasq.conf
Вписать:

service dnsmasq restart — перезапуск службы

Настройка сети в Linux Ubuntu

ifconfig -a — посмотреть интерфейсы (в примере eth0)
До версии 18:
sudo nano /etc/network/interfaces — вписать в файл
(сохранить — ctrl+o)

sudo service networking restart — перезапуск сети

После версии 18:
sudo su — root
netplan generate — создать файл настроек
nano /etc/netplan/01-netcfg.yaml
(имя файла может быть другим, отступы пробелами обязательны, внести настройки):

Если нужно прокси — вписать в файле
nano /etc/environment:

http_proxy=http://192.168.1.101
https_proxy=http://192.168.1.101

Для apt-get вписать в
nano /etc/apt/apt.conf:

Acquire::http::proxy "http://логин:пароль@ip_прокси:порт_прокси/";
Acquire::https::proxy "https://логин:пароль@ip_прокси:порт_прокси/"
;

netplan apply — применить конфигурацию
service networking restart — перезапуск сети

Проверка сети:
sudo ethtool eth0 — сведения, есть ли link
mtr yandex.ru — трассеровка

Настройка DHCP и DNS в Linux Ubuntu с помощью dnsmasq:
apt-get install dnsmasq — установка
nano /etc/dnsmasq.conf
Вписать:

service dnsmasq restart — перезапуск службы
Если фейлит при запуске (unknown interface) в файле nano /etc/init.d/dnsmasq
сделать значение Required-Start: $all — загружаться после всего

Настройка NAT и Masquarade

Возможно, нужно отключить firewalld
Включение IP-forwarding (для перемещения трафика между интерфейсами)
cat /proc/sys/net/ipv4/ip_forward — включён ли ip forwarding (0 — выключен)
nano /etc/sysctL.conf — задать net.ipv4.ip_forward=1
Создать bash файл c настройками nat и masquerade в init скриптах для iptables:
nano /etc/init.d/firewall

#!/bin/bash
### BEGIN INIT INFO
# Provides: firewall
# Required-Start: $all
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: adds iptables rules
### END INIT INFO
#Выше указано системе, что запускается, запускать после всего, на каких уровнях

До Ubuntu 15:
chmod +x /etc/init.d/firewall — сделать файл исполняемым
update-rc.d firewall defaults — запускать по умолчанию (remove — удалить)

После Ubuntu 15, запускать как службу, и чтобы запускать файл после сети:
nano /etc/systemd/system/firewall.service — создать systemd unit файл

systemctl  enable firewall — запускать автоматически
Если не работает при включении, или выдаёт Default-Start contains no runlevels (Default-Start не содержит уровней запуска, прерывания), нужно добавить BEGIN INIT INFO (как выше).