Настройка сети в Ubuntu 18.04 через Network Manager

Утилиты и команды для настройки сети в Ubuntu 18.04. В данном посте я расматриваю способы подключения через Network Manager, Wicd, WPA Supplicant.

Пакеты:

Существует несколько способо управлять сетью в Ubuntu. Через Wicd, Network Manager, WPA Supplicant, ifupdown, ifconfig и т.д. Я рекомендую использовать Wicd. Потому что большинство задач он решает. Особенно для ноутбуков. 

Network Manager может потребоваться, если вы хотите одновременно подключится по wifi и по локальной сети, или раздвать интернет с wifi в локальную сеть. При этом у wicd убрать управление Ethernet и дать это управление Network Manager.

  • Network Manager - пакет, который позволяет подключаться к WiFi и управлять сетевыми подключениями. Он позволяет автоматически выполнять переподключение к WiFi, если сеть недоступна по какой-то причине.
  • nmcli - Команда управления Network Manager
  • nm-tray - Иконка в трее
  • nm-connection-editor - Интерфейс для управлением соединений
  • ifupdown - Стандартный пакет для /etc/network/interfaces
  • Dnsmasq - это кэширующий DNS сервер
  • Resolvconf - программа, которая может обновлять список рекурсивных DNS серверов. При этом она умеет передавать Dnsmasq новые списки через файл /var/run/dnsmasq/resolv.conf

Настройка через Network Manager

Установка:

apt install network-manager network-manager-gnome net-tools dnsutils

Измените файл /etc/NetworkManager/NetworkManager.conf

[main]
plugins=ifupdown,keyfile

[ifupdown]
managed=true

В файле /usr/lib/NetworkManager/conf.d/10-globally-managed-devices.conf пропишите строчку:

[keyfile]
unmanaged-devices=*,except:type:ethernet,except:type:wifi,except:type:gsm,except:type:cdma,interface-name:lxc*,interface-name:docker*,interface-name:virtual*,interface-name:veth*

Этот файл задает какие интерфейсы будут управляться Network Manager. Запрещаем управлять мостами lxc, lxd, docker и virtualbox. Возможно нужно прописать еще. Локальной сетью и wifi разрешаем управлять. Более подробнее о командах здесь

Закоментируйте все строки в файле /etc/network/interfaces кроме строк для loopback интерфейса

#source /etc/network/interfaces.d/*

auto lo
iface lo inet loopback

Отключите управление сетью через systemd

systemctl disable systemd-networkd.socket
systemctl disable systemd-networkd.service
systemctl disable networkd-dispatcher
systemctl disable cloud-init

systemctl stop systemd-networkd.service

apt-get purge ifupdown
apt-get purge cloud-init
rm -rf /etc/cloud/ && sudo rm -rf /var/lib/cloud/

Команды Network Managment

Посмотреть список устройств, которыми можно управлять nmcli d

DEVICE      TYPE      STATE      CONNECTION
wlp3s0      wifi      connected  MyWiFi
enp2s0      ethernet  connected  Eth0
lxcbr0      bridge    unmanaged  --
virtualbox  bridge    unmanaged  --
lo          loopback  unmanaged  --

Если стоит unmanaged, то Network Managment не может управлять устройством.

Посмотреть список соединений nmcli c

NAME     UUID                                  TYPE      DEVICE
MyWiFi   118f13de-b635-4332-9ef4-8151dfb5068f  wifi      wlp3s0
Eth0     f74f8a7a-ca6c-4d94-9c57-0ce7b37fd439  ethernet  enp2s0

Это список соединений, для подключений. Этот список можно расширять через команды консоли, или через интерфейс nm-connection-editor.

Локальная сеть в Network Manager

Чтобы создать новую сеть, выполните команду:

nmcli connection add type ethernet con-name Eth0 ifname enp2s0
nmcli c m Eth0 ipv4.route-metric 100
nmcli c m Eth0 ipv4.dns 8.8.8.8 8.8.4.4
nmcli c m Eth0 ipv4.ignore-auto-dns yes
nmcli c m Eth0 connection.autoconnect-priority 999

Также можно создать файл

nano /etc/NetworkManager/system-connections/Eth0.nmconnection

[connection]
id=Eth0
uuid=311e72ed-fd9b-347d-9400-0e58a7171d73
type=ethernet
autoconnect-priority=-999
interface-name=enp2s0
timestamp=1708765081

[ethernet]

[ipv4]
dns=8.8.8.8;8.8.4.4;
ignore-auto-dns=true
method=auto
route-metric=100

[ipv6]
addr-gen-mode=stable-privacy
method=auto

Обратите внимание на параметр route-metric 100 в конфигах.

Route metric - это приоритет в таблице машрутизации, куда будут отправлены пакеты для выхода в интернет (Маршрутизация по умолчанию). Чем меньше число, тем выше приоритет.

Далее вы можете установить статический IP Адрес

nmcli c m Eth0 ipv4.method manual
nmcli c m Eth0 ipv4.address1 192.168.1.5/24,192.168.1.1

Подключиться к определенной сети:

nmcli c up Eth0

Отключиться от сети;

nmcli c down Eth0

Если по какой то причине локальная сеть не работает попробуйте сделать:

[ifupdown]
managed=true

А затем:

systemctl restart NetworkManager

Рекомендуется также создать файл /usr/lib/NetworkManager/conf.d/10-globally-managed-devices.conf если его нет.

Список комманд:

Установка статического IP адреса

nmcli c m Eth0 ipv4.addresses "192.168.1.25/24"
nmcli c m Eth0 ipv4.gateway "192.168.1.1"
nmcli c m Eth0 ipv4.method manual

Файл nano /etc/NetworkManager/system-connections/Eth0.nmconnection 

[connection]
id=Eth0
uuid=311e72ed-fd9b-347d-9400-0e58a7171d73
type=ethernet
autoconnect-priority=-999
interface-name=enp2s0
timestamp=1708765081

[ethernet]

[ipv4]
address1=192.168.1.25/24,192.168.1.1
dns=8.8.8.8;8.8.4.4;
method=manual
route-metric=100

[ipv6]
addr-gen-mode=stable-privacy
method=auto

[proxy]

Установка статического адреса через команду ip

Этот способ использовать, если NetworkManger не работает.

Откройте файл командой

nano /etc/rc.local

Добавьте строчки в конец файла

ip addr add 192.168.1.25/24 dev eth0
ip route add 192.168.1.0/24 dev eth0 metric 100
ip route add default via 192.168.1.1 dev eth0 metric 10

Настройка dnsmasq

Установите

apt install dnsmasq

Пропишите в NetworkManager.conf

[main]
#auth-polkit=false
plugins=ifupdown,keyfile
systemd-resolved=false
dns=none

[ifupdown]
managed=false

[device]
wifi.scan-rand-mac-address=no

Отключите системный DNS.

systemctl disable systemd-resolved

Удалите пакет resolvconf

apt-get purge resolvconf

Поменяйте файл /etc/resolv.conf

rm -f /etc/resolv.conf
echo "nameserver 127.0.0.1" > /etc/resolv.conf

Скопируйте конфиг:

cp /etc/dnsmasq.conf /etc/dnsmasq.conf.example
echo "" > /etc/dnsmasq.conf

 Создайте файл /etc/resolv.dnsmasq

nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 1.1.1.1

В /etc/dnsmasq.conf пропишите:

port=53
#listen-address=0.0.0.0
no-dhcp-interface=
bind-interfaces
expand-hosts
local-ttl=1
no-negcache

# Динамические настройки DNS
resolv-file=/run/NetworkManager/resolv.conf

# Настройки DNS по умолчанию
#resolv-file=/etc/resolv.dnsmasq

conf-dir=/etc/dnsmasq.d
cache-size=150
max-cache-ttl=600
min-cache-ttl=60

# Одновременный запрос ко всем DNS серверам
# all-servers

# Запрещаем резолвить домены без точки (нужно для Docker Swarm)
domain-needed

# Для отладки
#log-queries

 Создайте файл /etc/NetworkManager/dispatcher.d/99-dnsmasq

#!/bin/bash

if [[ "$2" = "up" || "$2" = "down" ]]; then
    kill -9 `cat /var/run/dnsmasq/dnsmasq.pid`
    systemctl start dnsmasq
fi

Раскоментируйте строку в файле /etc/default/dnsmasq

IGNORE_RESOLVCONF=yes

Выключите резолвер из внешней сети интернет. Создайте файл /etc/dnsmasq.d/disable-external-network

bind-interfaces
except-interface=eth*
except-interface=enp*
except-interface=wlan*
except-interface=wlp*

Если вы хотите прописать свои хосты в системе, вы можете использовать файл /etc/hosts или создать новый файл в папке /etc/dnsmasq.d/examle.domain со следующим содержанием:

# Example
address=/.example/127.0.0.2
address=/ns.example/127.0.0.1
address=/test.example/127.0.0.5

Данный файл говорит dnsmasq резолвить домен .examle, учитывая wildcard запросы.

Также dnsmasq переодически будет проверять файл /var/run/NetworkManager/resolv.conf на наличие новых записей. Network Manager будут помещать туда DNS сервера при подключении к сети.

Также есть инструкция для настройки dnsmaq для Docker swarm.

Подключение по WiFi через Network Manager

Включите WiFi:

nmcli radio wifi on

Просмотрите список доступных WiFi сетей:

nmcli device wifi list

Подключитесь к сети, используя логин и пароль:

nmcli device wifi connect "YourWifiNetwork" password "YourWifiPassword"

Установите параметры подключения

nmcli c m YourWifiNetwork ipv4.route-metric 10
nmcli c m YourWifiNetwork ipv4.ignore-auto-dns yes
nmcli c m YourWifiNetwork ipv4.dns 8.8.8.8 8.8.4.4

Количество попыток подключения к wifi если он не доступен:

nmcli c m YourWifiNetwork connection.autoconnect-retries 3
nmcli c m YourWifiNetwork connection.autoconnect-priority 0

Подключение к wifi через это соединение выполняется командой:

nmcli c up YourWifiNetwork

После этой команды, соединение будет автоматически подниматься, после появления WiFi сети

Графический интерфейс

Чтобы настраивать network manager мышкой, установите два пакета:

apt install network-manager-gnome

Управление через WiFi Wicd

Установка:

apt install wicd resolvconf

Wicd управляет WiFi. В принципе этого достаточно для ноутбука.

После его установки нужно запретить Network Manager управлять WiFi.

Для этого в файле /usr/lib/NetworkManager/conf.d/10-globally-managed-devices.conf нужно дописать вконце type:wifi и убрать except:type:wifi вначале.

Пример:

[keyfile]
unmanaged-devices=*,except:type:gsm,except:type:cdma,except:type:ethernet,interface-name:lxc*,interface-name:docker*,interface-name:virtual*,interface-name:veth*,type:wifi

Также нужно включить resolvconf в NetworkManager в файле /etc/NetworkManager/NetworkManager.conf

[main]
plugins=ifupdown,keyfile
systemd-resolved=false
rc-manager=resolvconf
dns=default

[ifupdown]
managed=false

в /etc/dnsmasq.conf нужно поменять файл DNS

resolv-file=/var/run/dnsmasq/resolv.conf

Очистите файл original.resolvconf

echo "" > /etc/resolvconf/resolv.conf.d/original
rm /var/run/resolvconf/interface/original.resolvconf

пересоздайте файл resolv.conf

rm -f /etc/resolv.conf
echo "nameserver 127.0.0.1" > /etc/resolv.conf

и перезапустить Network Manager и dnsmasq

service NetworkManager restart
service dnsmasq restart

Если все сделано правильно, то через команду

resolvconf -l
service dnsmasq status

Будут показаны текущие ДНС

Добавьте Wicd в автозапуск. Создайте файл nano ~/.config/autostart/wicd-tray.desktop

[Desktop Entry]
Categories=Application;Network;
Comment=Display network connection status in the system tray
Comment[en_US]=Display network connection status in the system tray
Comment[he]=הצגת מצב חיבור רשת במגש מערכת
Exec=wicd-gtk --tray
GenericName=Network Manager
Icon=wicd-gtk
Icon[en_US]=wicd-gtk
Name=Wicd Network Manager Tray
Name[en_US]=Wicd Network Manager Tray
Terminal=false
Type=Application
Version=1.0
X-GNOME-Autostart-enabled=true
X-KDE-autostart-after=panel

Подключение к WiFi через WPA Supplicant

Создайте файл:

touch /root/wifi.sh
chmod +x /root/wifi.sh

Посмотрите название вашего Wi Fi модуля:

ip a

Он может называться как wlp3s0 или wlan0.

Измените содержимое файла /root/wifi.sh и укажите в нем название вашего Wi Fi модуля. Вместо mynetwork и passphrase укажите свои данные.

wpa_passphrase mynetwork passphrase > /root/wifi.conf
wpa_supplicant -i wlan0 -c /root/wifi.conf &
sleep 10

ip addr add 192.168.1.150/24 dev wlan0
ip route add 192.168.1.0/24 dev wlan0 metric 100
ip route add default via 192.168.1.1 dev wlan0 metric 10

echo "nameserver 8.8.8.8" > /etc/resolv.conf
echo "Connected"

Подключитесь к Wi Fi:

/root/wifi.sh

Проверьте интернет:

ping ya.ru

Старый способ создания сети через interfaces

Данный способ не рекомендуется использовать. У меня не работал.

Установите пакет:

apt install ifupdown

Пропишите в /etc/network/interfaces настройте Localhost и Ethernet соединение

# ifupdown has been replaced by netplan(5) on this system.  See
# /etc/netplan for current configuration.
# To re-enable ifupdown on this system, you can run:
#    sudo apt install ifupdown

# Localhost
auto lo
iface lo inet loopback

# Ethernet
#allow-hotplug enp2s0
auto enp2s0
iface enp2s0 inet dhcp
    metric 100

allow-hotplug - Позволяет перезапускать интерфейс, если он упадет
auto enp2s0 - Автоматическое подключение интерфейса при старте системы

Отключите systemd network daemon

systemctl stop systemd-networkd.socket systemd-networkd networkd-dispatcher systemd-networkd-wait-online
systemctl disable systemd-networkd.socket systemd-netword networkd-dispatcher systemd-networkd-wait-online

Запустите networking

systemctl enable networking
systemctl restart networking