Настройка сетевого интерфейса Linux
1. Синтаксис и опции ethtool
Синтаксис ethtool довольно простой, утилите достаточно передать опции и имя сетевого интерфейса, с которым вы хотите работать:
$ ethtool опции интерфейс параметры
Вот основные опции утилиты, которые мы будем использовать в этой статье:
- —version — выводит версию утилиты;
- -g, —show-ring — позволяет посмотреть информацию о буфере RX и TX пакетов;
- -G, —set-ring — позволяет установить размер буфера RX и TX пакетов, работает только для беспроводного интерфейса;
- -i, —driver — выводит имя используемого драйвера;
- -P, —show-permaddr — выводит постоянный MAC адрес устройства;
- -r, —negotiate — выполняет повторное согласование скорости передачи данных, если включено автоматическое согласование;
- -S, —statistics — выводит статистику;
- -s, —change — позволяет менять настройки сетевого интерфейса;
- -k, —show-offload — позволяет посмотреть какие технологии offload включены;
- —reset — позволяет сбросить настройки различных компонентов сетевой карты, для сброса всех настроек используйте значение параметра all;
Это далеко не все опции программы, все вы можете посмотреть выполнив такую команду в терминале, если программа установлена:
2. Установка ethtool
Обычно, утилита не поставляется по умолчанию вместе с дистрибутивом, но она есть в официальных репозиториях. Для установки утилиты в Ubuntu или Debian выполните:
Для установки ethtool linux в Fedora, CentOS или REHL выполните:
А для OpenSUSE команда будет выглядеть вот так:
3. Информация про сетевые интерфейсы
Сначала надо посмотреть список сетевых интерфейсов в системе. Для этого выполните такую команду:
В данном примере, я использовал фильтр egrep чтобы отсеять все интерфейсы, созданные контейнерами Docker, вам этого делать не обязательно. Здесь enp24s0 — это сетевой интерфейс Ethernet, который мы и будем использовать дальше. Выполнив утилиту ethtool без опций можно посмотреть текущие настройки сетевого интерфейса:
Обратите внимание на пункт Supported link modes, здесь перечислены поддерживаемые скорости передачи данных и режимы дуплекса для них. Скорость измеряется в мегабитах и обычно доступны значения 10, 100 и 1000
Режим дуплекса, выводимый в параметре Duplex отвечает за приём и передачу данных. При значении full сетевая карта может одновременно принимать и отправлять данные, а режиме half только принимать или отправлять данные. Текущая скорость передачи данных выводится немного ниже параметра Duplex.
Ещё есть параметр Advertised auto negotiation. Он отвечает за то будет ли скорость передачи данных и режим дуплекса настраиваться автоматически в зависимости от возможностей обоих соединённых устройств. По умолчанию этот параметр включён и рекомендуется его таким и оставить.
4. Изменение настроек интерфейса
Менять все эти настройки и многие другие можно с помощью опции -s. Например чтобы отключить автоматическое согласование параметров работы выполните:
Затем можно вручную установить скорость передачи данных:
А режим дуплекса в half:
Всё это можно объединить в одну команду:
После изменения скорости передачи данных надо снова поднять сетевой интерфейс:
Теперь при просмотре настроек сетевой карты вы увидите новые значения:
Чтобы посмотреть используемый драйвер используйте опцию -i:
6. Статистика интерфейса
Посмотреть статистику по переданных и полученных данных можно с помощью опции -S:
Сбросить эту статистику можно только выгрузив драйвер ядра, который используется для сетевой карты. Для этого сначала отключите сетевой интерфейс:
Затем выгрузите модуль ядра с драйвером:
Верните драйвер обратно и запустите устройство:
После этого статистика будет сброшена:
7. Управление светодиодом
Если в вашем компьютере установлено несколько сетевых карт и вам надо определить какой их них принадлежит то или иное имя в системе, можно использовать опцию -p. Ей надо передать количество секунд на протяжении которых светодиод на разъёме должен гореть:
Таким образом вы можете подсветить интерфейс ethtool.
8. Сохранение настроек
Все выполненные с помощью ethtool настройки актуальны только до перезагрузки. Чтобы их сохранить после перезагрузки надо создать скрипт, выполняющий нужные команды после старта системы или же использовать возможности network-scripts. Например в Ubuntu или Debian можно добавить команду, которая выполняет нужные настройки в файл /etc/network/if-pre-up.d/ethtool. Например:
Для CentOS следует добавить параметр ETHTOOL_OPTS в файл настройки сетевого интерфейса, Например:
Управление ARP-таблицей
В локальной сети текущий хост для определения физических адресов (MAC-адресов) по IP-адресам удаленных узлов использует протокол ARP и локальный ARP -кэш (ARP-таблицу). Управление ARP-таблицей осуществляется командой ip neigh. Каждый узел локальной сети (в том числе и хабы/свичи) содержат свою локальную ARP-таблицу (кэш), которая устанавливает соответствие между IP и MAC-адресами узлов подсетей, в которые входит данную сеть. В ARP-таблице имеются два вида записей:
- Динамические записи, которые периодически обновляются с использованием протокола ARP (если запись «устаревает», то она удаляется).
- Статические записи, которые создаются пользователем с помощью соответствующих команд и существуют до тех пор, пока текущий узел не будет выключен/перезагружен.
nout:~# # отображение содержимого таблицы ARP nout:~# ip neigh show 192.168.1.1 dev wlan0 lladdr bc:ae:c5:c3:c9:31 REACHABLE nout:~# # добавление статической записи в ARP таблицу nout:~# ip neigh add 192.168.1.100 lladdr 00:00:00:11:00:22 dev wlan0 nout:~# ip neigh show 192.168.1.100 dev wlan0 lladdr 00:00:00:11:00:22 PERMANENT 192.168.1.1 dev wlan0 lladdr bc:ae:c5:c3:c9:31 REACHABLE nout:~# # удаление записи nout:~# ip neigh del 192.168.1.100 dev wlan0 nout:~# ip neigh show 192.168.1.1 dev wlan0 lladdr bc:ae:c5:c3:c9:31 REACHABLE
Несколько IP-адресов на одной сетевой карте
На одной сетевой карте может быть несколько ip-адресов, это бывает необходимо, если в коммутатор идут два провода от разных сетей и один от компьютера. В этом случае можно настроить на компьютере адреса обоих сетей без использования дополнительной сетевой карты. Для этого необходимо идентифицировать так называемый алиас (alias) к определенному сетевому интерфейсу, и выглядеть это будет так: сетевой_интерфейс:1 или сетевой_интерфейс:2, т.е. eth0:1 или eth1:2. Идентифицировать его можно следующим образом:
Интересно то, что можно настроить основной интерфейс через dhcp (автоматически) dhclient eth0, а алиас eth0:1 в статику, чего я в альтернативных операционных системах не нашел.
Все это хорошо, но после перезагрузки все настройки слетают. В Ubuntu есть файл /etc/network/interfaces. В него можно прописать опции сетевых карт, которые будут устанавливаться при загрузке системы (благодаря скрипту /etc/init.d/networking, запускающемуся автоматически).
Откройте файл для редактирования:
Синтаксис простой:
22 января 2012, 00:39
Александр
Linux
23960
Из этой категории
- Opera не показывает некоторые видео в linuxАвтоматическая смена MAC-адреса в LinuxНастройка принтера HP LaserJet 1018 в Debian 10Установка LAMP-сервера и phpMyAdmin в Debian 10Установка XAMPP в Debian 10 (Ubuntu) LinuxОтключить пароль SUDO в LinuxBash-команды для экономии времениУстанавливаем Brackets в Debian 10Работа с пакетами при помощи dpkgНастройка Linux Debian 10
— Настройка сетевого интерфейса через графический интерфейс [GUI]
Первым делом нам нужно попасть в «Центр управления сетями и общим доступом».
Первый способ: Заходим в «Панель управления» -> «Центр управления сетями и общим доступом».(Рис.1.1)
Рис.1.1 — «Панель управления» — «Центр управления сетями и общим доступом».
Второй способ: через «Выполнить»:
Заходим в «Выполнить» -> Вводим команду приведённую ниже и жмём — «OK».(Рис.1.2)
control.exe /name Microsoft.NetworkandSharingCenter
Рис.1.2 — Запуск «Центра управления сетями и общим доступом» через «Выполнить».
И так, перед нами «Центр управления сетями и общим доступом». В разделе «Просмотр активных сетей» мы видим сети, к которым подключен наш ПК…
На данный момент мой ПК подключен к одной сети. Для того чтобы перейти к параметрам соединения, в строке «Подключение:» нажмите на тип подключения, в моём случае это «Ethernet» При подключении по Wi-FI надпись будет — «Беспроводное сетевое соединение (название сети)»(Рис.1.3)
Рис.1.3 — Центр управления сетями и общим доступом.
Откроется окно — «Состояние — Ethernet», показывающее состояние подключения к сети. Нас интересует кнопка «Свойства», нажимаем её -> открывается окно «Ethernet: свойства» в списке компонентов выбираем «IP версии 4 (TCP/IPv4)» и опять же жмём кнопку «Свойства».(Рис.1.4)
Откроется окно — «Свойства: IP версии 4 (TCP/IPv4)», оно то нам и нужно.(Рис.1.5)
Рис.1.4 — «Состояние — Ethernet» и «Ethernet: свойства».
1.1. — GUI — Получение динамического IP-адреса
Перед нами окно — «Свойства: IP версии 4 (TCP/IPv4)».(Рис.1.5)
Для того чтобы получить динамические автоматически по DHCP] настройки сети, а именно — IP-адрес, Маску подсети, Основной шлюз и DNS-серверы, нужно переключить радиокнопки в положения:
- Получить IP-адрес, автоматически
- Получить адрес DNS-сервера автоматически
В окне «Свойства: IP версии 4 (TCP/IPv4)» нажимаем «ОК».
Рис.1.5 — Положения радиокнопок для получения сетевых настроек автоматически.
В окне «Ethernet: свойства» тоже нажимаем «ОК».(Рис.1.6)
Рис.1.6 — «Ethernet: свойства».
Перед нами окно «Состояние — Ethernet» -> нажимаем кнопку «Сведения…» -> откроется окно «Сведения о сетевом подключении», в котором мы можем посмотреть настройки сети.(Рис.1.7)
И так мы видим:
- DHCP включен: Да
- Адрес IPv4: 10.0.0.50
- Маска подсети IPv4: 255.255.255.0
- Шлюз по умолчанию IP: 10.0.0.1
- DHCP-сервер IPv4: 10.0.0.1
- DNS-серверы IPv4: 8.8.8.8, 8.8.4.4
Настройки по DHCP получены, всё правильно, на этом с получением динамических сетевых настроек заканчиваем.
Рис.1.7 — Просматриваем настройки сети полученные по DHCP.
1.2. — GUI — Задать/Изменить статический IP-адрес
Статические настройки сети задаются вручную пользователем. Они прописываются в настройках сетевого подключения и жестко закрепляется за данным устройством.
В этом разделе, для моего ПК я пропишу статический IP-адрес — 10.0.0.10
Перед нами окно — «Свойства: IP версии 4 (TCP/IPv4)».(Рис.1.8)
Для того чтобы задать/изменить статические настройки сети , нужно переключить радиокнопки в положения:
- Использовать следующий IP-адрес
- Использовать следующие адреса DNS-серверов
И ввожу:
- IP-адрес: 10.0.0.10
- Маска подсети: 255.255.255.0
- Основной шлюз: 10.0.0.1
- Предпочитаемый DNS-сервер: 10.0.0.1
- Альтернативный DNS-сервер: оставляю пустым
Для сохранения нажимаем «ОК».
Рис.1.8 — Вводим сетевые настройки вручную.
В окне «Ethernet: свойства» тоже нажимаем «ОК».(Рис.1.9)
Рис.1.9 — «Ethernet: свойства».
Перед нами окно «Состояние — Ethernet»(Рис.1.10) -> нажимаем кнопку «Сведения…» откроется окно «Сведения о сетевом подключении», в котором мы можем посмотреть настройки сети.
И так мы видим:
- DHCP включен: Нет
- Адрес IPv4: 10.0.0.10
- Маска подсети IPv4: 255.255.255.0
- Шлюз по умолчанию IP: 10.0.0.1
- DNS-серверы IPv4: 10.0.0.1
Нужные нам сетевые настройки применились. Всё отлично.
Рис.1.10 — Просматриваем настройки сети введенные вручную.
На этом с настройкой сети через графический интерфейс[GUI заканчиваем.
Настройка сети через файл конфигурации.
Для настройки статического или динамического IP адреса нам надо отредактировать файл конфигурации сетевых интерфейсов — /etc/network/interfaces мы будем редактировать его с помощью текстового редактора nano.(Рис.5) Сразу скажу что для того чтобы сохранить документ в nano надо нажать «Ctrl+o», а чтобы закрыть «Ctrl+x».
nano /etc/network/interfaces
Если вы авторизованы не под root, не забудьте добавить sudo и ввести пароль суперпользователя, а то не получится сохранить измененный файл interfaces.
sudo nano /etc/network/interfaces
Рис.5 — Команда для редактирования файла /etc/network/interfaces.
Получение настроек сети по DHCP.
Для получения настроек сети по DHCP, в файле /etc/network/interfaces достаточно указать всего две строки.(Рис.6)
auto ens33 iface ens33 inet dhcp
Лично у меня они были написаны по умолчанию, так как сеть была настроена при установке. Пояснения в пункте .
Если у вас не запущен DHCP клиент, то запустить его можно командой dclient с указанием интерфейса ens33.
dclient ens33
Рис.6 — Файл конфигурации /etc/network/interfaces для получения настроек сети по DHCP.
Указание настроек сети вручную.
Пишем конфигурацию интерфейса для статичного IP адреса.(Рис.7)
auto ens33 iface ens33 inet static address 192.168.3.209 netmask 255.255.255.0 gateway 192.168.3.1 dns-nameservers 8.8.8.8 192.168.3.1 dns-search itdeer.loc itdeer.ru
Пояснения в пункте .
Рис.7 — Файл конфигурации /etc/network/interfaces для указания настроек сети вручную..
Описание опций.
Рассмотрим описание опций, для того чтоб вы понимали что написано в пунктах Получение настроек по DHCP и Указание настроек сети вручную.
- auto ens33 — означает что наш интерфейс «ens33» будет автоматически подключен при загрузке системы.
- iface ens33 inet static — указывается семейство протоколов tcp/ip(inet или inet6) и способ получения адреса(static или dhcp).
- address 192.168.3.209 — указываем IP адрес.
- netmask 255.255.255.0 — указываем маску сети.
- gateway 192.168.3.1 — указываем основной шлюз.
- dns-nameservers 8.8.8.8 192.168.3.1 — указываем DNS сервера можно указать несколько через пробел.
- dns-search itdeer.loc itdeer.ru — указываем DNS суффиксы, через пробел, допустим если у нас существует домен itdeer.ru то мы можем обратиться к компьютеру внесённому в этот домен, к примеру controller тогда ubuntu попытается разрешить имя controller.itdeer.ru.
- dns-domain itdeer.ru — альтернатива dns-search, но указывается только один суффикс (название домена).
После редактирования файла /etc/network/interfaces, применить изменения можно двумя способами:
Первый — Перезагрузить систему.
reboot
или
init 6
Второй — Если же вы не хотите перезагружать систему, то нужно сначала отчистить конфигурацию интерфейса,
ip addr flush ens33
а после перезапустить службу сети.
service networking restart
Если вы сменили только шлюз по умолчанию, настройки DNS серверов или суффиксов, то достаточно просто перезапустить сетевую службу.
service networking restart
Далее смотрите вывод команды ifconfig, изменения должны должны быть применены.
Несколько IP-адресов
IPv4
Чтобы назначить дополнительные IPv4-адреса на тот же самый интерфейс, необходимо создать виртуальный интерфейс в виде имя_интерфейса:номер, например .
В остальном интерфейс настраивается аналогично физическому.
CentOS
$ cat /etc/sysconfig/network-scripts/ifcfg-eth1:0 DEVICE=eth1:0 ONBOOT=yes BOOTPROTO=static IPADDR=192.168.0.1 NETMASK=255.255.255.0
Debian/Ubuntu
$ cat /etc/network/interfaces source /etc/network/interfaces.d/* auto eth0 iface ens6 inet static address 192.168.0.1 netmask 255.255.255.0 auto eth0:0 iface ens6:0 inet static address 192.168.1.1 netmask 255.255.255.0
Ubuntu 16.04 LTS
Для данной ОС не требуется создавать виртуальный интерфейс, достаточно добавить второй IP-адрес на уже существующий, например:
$ cat /etc/network/interfaces source /etc/network/interfaces.d/* auto ens6 iface ens6 inet static address 192.168.0.1 netmask 255.255.255.0 iface ens6 inet static address 192.168.1.1
Ubuntu 18.04 LTS с netplan
В интерфейсе описываются необходимые адреса, роутинг происходит через директиву routes.
$cat /etc/netplan/50-cloud-init.yaml network: version: 2 ethernets: ens3: addresses: - 185.185.68.210/22 - 141.8.198.107/22 gateway4: 185.185.68.1 nameservers: addresses: - 141.8.194.254 - 141.8.197.254 routes: - to: 185.185.68.210/22 via: 185.185.68.1 - to: 141.8.198.107/22 via: 141.8.198.1
IPv6
Несколько IPv6-адресов можно назначать на один интерфейс без создания виртуального. При этом gateway указывается только один раз. Например:
CentOS
$ cat /etc/sysconfig/network-scripts/ifcfg-eth0 IPV6INIT=yes IPV6ADDR=2a0a:2b40::4:1701/64 IPV6ADDR_SECONDARIES="2a0a:2b40::4:1702/64 2a0a:2b40::4:1703/64"
Debian/Ubuntu
$ cat /etc/network/interfaces iface eth0 inet6 static address 2a0a:2b40::4:16d1 netmask 64 gateway 2a0a:2b40::1 iface eth0 inet6 static address 2a0a:2b40::4:16d2 netmask 64
Ubuntu 16.04 LTS
$ cat /etc/network/interfaces iface ens3 inet6 static address 2a0a:2b40::4:16d1 netmask 64 gateway 2a0a:2b40::1 iface ens3 inet6 static address 2a0a:2b40::4:16d2 netmask 64
Настройка проводной сети
Настройка IP-адреса, шлюза по умолчанию, маски подсети
Отредактируйте файл конфигурации , например так:
$ sudo nano /etc/network/interfaces
И допишите в него:
Для статического IP:
iface eth0 inet static address 192.168.0.1 netmask 255.255.255.0 gateway 192.168.0.254 dns-nameservers 192.168.0.254 8.8.8.8 auto eth0
Где:
- — указывает что IP адрес (address) нашей сетевой карты 192.168.0.1;
- — указывает что наша маска подсети (netmask) имеет значение 255.255.255.0;
- — адрес шлюза () по умолчанию 192.168.0.254;
- — адреса DNS серверов (о ниж мы расскажем позже)
- — указывет системе что интерфейс необходимо включать автоматически при загрузке системы с вышеуказанными параметрами.
eth0 — имя подключаемого своего интерфейса. Список интерфейсов можно посмотреть набрав:
$ ip addr
В итоге файл должен выглядеть примерно так:
(для одного проводного соединения со статическим IP)
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # Моя проводная сеть. iface eth0 inet static address 192.168.0.1 netmask 255.255.255.0 gateway 192.168.0.254 dns-nameservers 192.168.0.254 8.8.8.8 auto eth0
Сохраните файл и закройте редактор. В данном примере (редактор nano) — нажмите Ctrl+X, затем Y, убедитесь, что «Имя файла для записи» — /etc/network/interfaces и нажмите Enter.
Пример конфигурации для динамического IP:
iface eth0 inet dhcp auto eth0
Временная настройка IP-адреса и маски подсети
При необходимости задать пробные настройки, выполните:
$ sudo ip addr add 192.168.0.1/24 dev eth0
Где 192.168.0.1 — наш IP-адрес, /24 — число бит в префиксной части адреса (соответствует маске подсети 255.255.255.0). eth0 — подключаемый сетевой интерфейс.
Данные настройки пропадут после перезагрузки системы и не повлияют на файл
Сетевые интерфейсы в статичных сетях
Полное описание синтаксиса файла настроек интерфейсов /etc/network/interfaces доступно по команде
man interfaces
Основные опции настройки:
Опция |
Значение |
---|---|
auto <Имя_интерфейса> |
Автоматический запуск указанного интерфейса при запуске системы |
allow-auto <Имя_интерфейса> |
Автоматический запуск указанного интерфейса при запуске системы |
allow-hotplug <Имя_интерфейса> |
Автоматический запуск указанного интерфейса при обнаружении ядром события подключения к этому интерфейсу |
Опции, начинающиеся с «iface <config_name> …» |
Определяют сетевую конфигурацию <config_name> и имеют следующий синтаксис: iface <config_name> <address_family> <method_name><option1> <value1><option2> <value2>… |
Опции, начинающиеся с «mapping <interface_name_glob>» |
Определяют соответствие значения <config_name> и <interface_name>.Для простых конфигураций не применяются. |
Опции, начинающиеся с симовола «#» |
Игнорируются, как комментарии. Комментарии, начинающиеся не с начала строки не поддерживаются. |
Опции, заканчивающиеся символом «\» | Продолжение опции в следующей строке |
Интерфейс локальная петля (loopback)
Автоматическое включение интерфейса локальной петли при запуске системы задаётся в /etc/network/interfaces следующими командами:
Этот интерфейс всегда присутствует в стандартном файле /etc/network/interfaces.
Интерфейс со статическим адресом
В примере подразумевается следующее:
- Диапазон IP-аресов локальной сети: 192.168.11.0 — 192.168.11.255
- IP-адрес шлюза: 192.168.11.1
- Собственный IP-адрес интерфейса 192.168.11.100
- The resolvconf package: installed
- Имя домена: «example.com» (используется пакетом resolvconf)
- IP-адрес сервера DNS: 192.168.11.1 (используется пакетом resolvconf)
При этом, если не используется пакет resolvconf, соответствующая настройка параметров DNS должна быть выполнена вручную в файле /etc/resolv.conf:
Systemd-networkd / systemd-resolved
Для использования служб systemd-networkd / systemd-resolved во избежание конфликтов следует отключить, остановить и заблокировать все остальные службы управления сетевыми интерфейсами:
sudo systemctl —now mask NetworkManagersudo systemctl —now mask networkingsudo systemctl —now mask resolvconf
И разблокировать и запустить systemd-networkd / systemd-resolved:
sudo systemctl unmask systemd-networkdsudo systemctl enable systemd-networkdsudo systemctl start systemd-networkdsudo systemctl unmask systemd-resolvedsudo systemctl enable systemd-resolvedsudo systemctl start systemd-resolved
Конфигурациионные файлы сетевых служб systemd хранятся в каталоге /etc/systemd/network. Доступны следующие типы конфигурационных файлов:
- .link – описывают физические параметры каждого интерфейса: имя, MAC, MTU и другие
- .network – описывают параметры сети: IP, маршруты, DNS и другие
- .netdev – описывают виртуальные интерфейсы, мосты
Описания содержимого конфигурационных файлов доступны в общей системе документации:
man systemd-networkdman systemd.linkman systemd.networkman systemd.netdevman systemd-resolved
Мобильный режим
В мобильном режиме используется сетевой менеджер connman, а файл /etc/resolv.conf заменяется на ссылку на файл /var/run/connman/resolv.conf.
Сетевой менеджер connman поддерживает собственный интерфейс командной строки connmanctl.Описание команд commanctl доступно в системе документации:
man connmanctl
Графический интерфейс для работы с connman доступен в мобильной версии ОС Astra Linux.
Настройка маршрутов на основе политик
В основе маршрутизации на основе политик лежат таблицы. Для каждой таблицы настраиваются свои маршруты и политики. Проверим наличие в системе пакета iproute2. Если его нет, произведите его установку.
Откройте файл с таблицами маршрутизации
И добавьте в его конец количество таблиц, соответствующее количеству настраиваемых интерфейсов:
Формат записи: приоритет (число) пробел название таблицы (число).
Теперь откройте файл Netplan с настройками сетевых интерфейсов. Он расположен по пути /etc/netplan/ и имеет расширение .yaml. В моём случае путь такой:
Каждый интерфейс имеет в данном файле блок настроек. В конец данного блока мы и будем добавлять настройки политик и правил маршрутизации для интерфейса
В данном файле важно соблюсти количество пробелов перед каждым параметром и значением, а также не использовать табуляции вместо пробелов. Ориентируйтесь на отступы в уже имеющихся записях и добавляйте по аналогии
Для каждого сетевого интерфейса добавляем блоки routes и routing-policy. Итоговая запись для 1 интерфейса будет выглядеть так:
network: version: 2 ethernets: enp0s5: addresses: - 78.89.90.12/24 gateway4: 78.89.90.1 match: macaddress: 54:43:32:21:10:09 mtu: 1500 nameservers: addresses: - 8.8.8.8 - 1.1.1.1 - 8.8.4.4 search: [] set-name: enp0s5 routes: - to: 0.0.0.0/0 via: 78.89.90.1 table: 700 routing-policy: - from: 78.89.90.12 table: 700 priority: 300
Для других интерфейсов запись будет аналогична, начиная с имени интерфейса (enp0s5), но у других должен отсутствовать параметр gateway4, т.к. шлюз по умолчанию должен быть один. Настройки routes и routing-policy:
- to — адрес назначения пакета. Для наших целей — любой (0.0.0.0/0)
- via — адрес шлюза для данного интерфейса
- table — имя таблицы маршрутизации. Должны быть указаны одинаковые значения в routes и routing-policy для одного интерфейса, но быть различными от интерфейса к интерфейсу. Данные таблицы мы создали в файле rt_tables
- from — адрес источника пакета. Для целей данного руководства — это IP адрес интерфейса
- priority — обязательное числовое значение
После внесения настроек и сохранения файла проверим конфигурацию на ошибки:
Подобный вывод укажет на ошибку при их наличии (в данном случае пропущен пробел):
/etc/netplan/50-cloud-init.yaml:23:12: Invalid YAML: inconsistent indentation: routes: ^
Если конфиг составлен верно, то вывод будет отсутствовать. Это значит, что пора применить изменения:
После применения изменений настроенные таким образом сетевые интерфейсы станут доступны извне по своим публичным IP адресам.
191028
Санкт-Петербург
Литейный пр., д. 26, Лит. А
+7 (812) 403-06-99
700
300
ООО «ИТГЛОБАЛКОМ ЛАБС»
700
300
Настройка маршрутизации, firewall и nat
Первым делом включим маршрутизацию пакетов между сетевыми интерфейсами. Для этого редактируем конфиг /etc/sysctl.conf:
# mcedit /etc/sysctl.conf net.ipv4.ip_forward=1
Либо раскомментируйте эту строку, либо добавьте, если ее нет. Но она по-умолчанию быть должна, закомментированная со значением 1. Применяем эту настройку:
# sysctl -p
На выходе работы команды в консоли будет выведен измененный параметр со значением 1.
Теперь приступаем к самому главному — настройке фаервола iptables и nat в нем для обеспечения выхода в интернет из локальной сети. Я очень подробно рассмотрел эту тему в отдельной статье. Хотя там речь идет о другом дистрибутиве, сами правила iptables абсолютно одинаковые с точностью до строчки, за исключением маленького нюанса, связанного с тем, что правила нужно сохранять в другой файл для применения их после перезагрузки.
Я приведу здесь сразу готовый вариант файла с правилами iptables, необходимых для работы интернет шлюза в debian. В файле даны подробные комментарии ко всем значениям, так что вы без проблем разберетесь и закомментируете или наоборот раскомментируете необходимые вам значения. Качаем скрипт правил iptables — iptables-debian.sh
Копируем содержимое файла и создаем скрипт с правилами на сервере:
# mcedit /etc/iptables.sh
Вставляем в редактор правила. Редактируем их под свои нужды, обязательно заменяя переменные WAN и LAN на свои. Сохраняем файл.
Прежде чем двигаться дальше предупреждаю, что все работы по настройке фаервола должны производиться только если у вас есть доступ к консоли сервера, чтобы в случае ошибки и потери удаленного доступа вы смогли откатить изменения. Даже если вы абсолютно уверены в своих знаниях, вас может подвести банальная ошибка или опечатка. Я сам, к сожалению, сталкивался с такими ситуациями, поэтому считаю необходимым предупредить об этом вас.
Делаем файл с правилами исполняемым:
# chmod 0740 /etc/iptables.sh
Прежде чем применить новые правила, посмотрим на текущие:
# iptables -L -v -n
Видим, что на настраиваемом роутере firewall полностью открыт. Теперь применим новые правила и посмотрим на результат:
# /etc/iptables.sh
Все в порядке, правила применились, доступ к серверу я не потерял. Теперь сделаем так, чтобы новые правила применялись после перезагрузки. В последней строчке скрипта есть команда:
/sbin/iptables-save > /etc/iptables.rules
С ее помощью готовый набор правил iptables выгружаются в файл. Нам нужно сделать так, чтобы эти правила применялись при включении сетевого интерфейса во время загрузки сервера. Для этого открываем файл interfaces на редактирование и добавляем в самый конец строчку:
# mcedit /etc/network/interfaces post-up iptables-restore < /etc/iptables.rules
Для проверки перезагружаем шлюз и проверяем, все ли в порядке. По сути основная настройка программного роутера на debian завершена. Осталось сделать небольшое дополнение и настроить dhcp и dns сервер в локальной сети. Я для этих целей использую простой и легкий в настройке dnsmasq.