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

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

auto eth0 #автозапуск интерфейса
iface eth0 inet static
address 192.168.40.62
netmask 255.255.255.0
network 192.168.40.0
broadcast 192.168.40.255

gateway 192.168.40.254
dns-nameservers 192.168.40.52

#либо для DHCP:
auto eth0
iface eth0 inet dhcp

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

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

network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      addresses: [192.168.1.5/24]
      gateway4: 192.168.1.1
      nameservers:
        search: [mydomain, otherdomain]
        addresses: [8.8.8.8,4.4.4.4]
  enp17s10:
     addresses: [192.168.3.10/24]
     routes:
            - to: 192.168.3.0/24
                via: 192.168.3.10
                metric: 100
        nameservers:
           addresses: [192.168.3.10]
Либо для DHCP:
network:
  version: 2
  renderer: networkd
  ethernets:
     eth0:
       dhcp4: true 

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
Вписать:

interface=enp17s10 #имя интерфейса
bind-interfaces
dhcp-range=192.168.3.100-192.168.3.199,255.255.255.0,12h #диапазон, время резерва

#привязка по мак-адресу:
dhcp-host=4C:72:B9:4E:8B:3A,192.168.3.100
#Указать если основной DHCP. Клиент получит ip даже если получал ip c другого DHCP
dhcp-authoritative
log-dhcp
# Для поиска ctrl+W

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

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

Включение 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
#Выше указано системе, что запускается, запускать после всего, на каких уровнях

#переменная с путём к iptables
IPTABLES=/sbin/iptables
# переменные интерфейсов
LAN=enp17s10
WAN=enp0s25
WAN_IP=192.168.2.6
LAN_NET=192.168.3.0/24

# очистка основных цепочек пакетного фильтра
$IPTABLES -F
# очистка таблиц ната
$IPTABLES -t nat -F

# разрешить входящие
$IPTABLES -A INPUT -p tcp -i $WAN -m state --state ESTABLESHED -j ACCEPT
$IPTABLES -A INPUT -p udp -i $WAN -m state --state ESTABLESHED -j ACCEPT

# разрешить icmp (ping)
$IPTABLES -A INPUT -p icmp -j ACCEPT
# разрешить 22 порт на WAN'е для ssh
$IPTABLES -A INPUT -p tcp -i $WAN --dst $WAN_IP --dport 22 -j ACCEPT
# разрешить входящие с локалки
$IPTABLES -A INPUT -i $LAN -j ACCEPT

# nat с маскарадом (подбеной ip на внешний)
$IPTABLES -t nat -A POSTROUTING --src $LAN_NET -j MASQUERADE

# сбрасывать остальные соединения снаружи и логировать
#$IPTABLES -A INPUT -i $WAN -j ULOG --ulog-prefix "IPFW-DENY:"
$IPTABLES -A INPUT -i $WAN -j DROP

# ctrl+o — сохранить

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

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

[Unit]
Description=iptables rules
Requires=network.target
After=network.target

[Service]
Type=oneshot
RemainAfterExit=True
ExecStart=/etc/init.d/firewall

[Install]
WantedBy=multi-user.target

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