Как поднять интерфейс в linux
Настройка сети в Linux через конфиг-файлы, ч.1
Первое моё общение с Линуксом состоялось около шести лет назад. Тогда это был какой-то свежевышедший Red Hat, который мы с другом смогли установить, но при этом войти в него у нас так и не получилось.
Однако статья не об этом. Позже через мои руки и голову прошли почти все семейства дистрибутивов Linux, и везде я замечал свои подходы к автонастройке сети. И в этом цикле статей я постараюсь осветить наиболее популярные из них. Надеюсь, они будут полезны тем пользователям, которые пока ещё нажимают на кнопки и проставляют галочки в графических менеджерах настройки, но уже понимают, что это не true 🙂
Возможно познавательными эти статьи будут и тем, кто (не от большого знания) пишет свои скрипты управления сетью и помещает их в какой-нибудь rc.local
Итак, в первой части речь пойдёт о семействе номер один, одном из самых обширных по числу дистрибутивов, Red Hat based.
DEVICE=lo
IPADDR=127.0.0.1
NETMASK=255.0.0.0
NETWORK=127.0.0.0
BROADCAST=127.255.255.255
ONBOOT=yes
NAME=loopback
Не все параметры, перечисленные здесь являются обязательными. Зачастую чтобы задать интерфейс достаточно указать IPADDR и NETMASK. Параметр DEVICE необходим, если вы хотите, чтобы в имени скрипта после «ifcfg-» стояло не имя интерфейса, а какое-нибудь другое слово. Здесь же можно указывать такие параметры как GATEWAY, BOOTPROTO (static или dhcp), HWADDR (если есть желание изменить mac-адрес интерфейса) и так далее. Полный список возможных параметров зависит от типа поднимаемого интерфейса и дистрибутива. А, учитывая скудность официальной информации, его можно узнать и познать только перелопатив скрипты.
Такими конфиг-файлами можно задавать различные ppp-интерфейсы, ip-туннели, vlan’ы и так далее.
Следующий пример показывает настройку ipip-туннеля (ifcfg-tun0):
DEVICE=tun0
MY_OUTER_IPADDR=172.16.0.2
PEER_OUTER_IPADDR=192.168.0.1
MY_INNER_IPADDR=10.0.0.2
PEER_INNER_IPADDR=10.0.0.1
TYPE=IPIP
TTL=255
В этом примере мы, имея адрес 172.16.0.2, создаём туннель с машиной 192.168.0.1, указывая TTL=255, и присваиваем туннелю адрес 10.0.0.2 peer 10.0.0.1.
Не все знают, что помимо файлов ifcfg-* в этом же каталоге можно помещать соответствующие им файлы rule-* и route-*
Они нужны, соответственно, чтобы прописывать правила маршрутизации и сами маршруты ( ip rule, ip route ), например при использовании source-policy routing.
Для указанного выше туннеля эти файлы могут выглядеть так.
rule-tun0:
from 10.0.0.2 lookup mytable
route-tun0:
default dev tun0 table mytable
192.168.0.0/24 dev tun0
Создав эти файлы мы снимаем с себя головную боль о том, чтобы соответствующие правила и маршруты создавались и удалялись при поднятии и опускании интерфейса соответственно.
Имея сеть, настроенную по этим принципам, вы всегда можете поднять/опустить отдельный интерфейс командой ifup name (ifdown name), где name — это ваш интерфейс. Чтобы перезагрузить всю сеть, достаточно набрать service network reload.
Следующая часть будет посвящена не семейству, а одному дистрибутиву — Alt Linux. Несмотря на его прямые RedHat-корни, разработчики практически полностью заново написали всю систему управления сетью, которая получила имя etcnet и заслужила (на мой взгляд) более пристального внимания 🙂
Настройка сети с помощью утилиты ip в Debian linux
Команда ip используется для назначения адреса сетевому интерфейсу и/или конфигурирования параметров сетевого интерфейса в дистрибутивах Linux. Эта команда заменяет собой старую добрую и ныне устаревшую команду ifconfig в современных дистрибутивах Linux.
Команда ip может использоваться для следующих целей:
Синтаксис
Понимание синтаксиса OBJECTS в комманде ip
OBJECTS может быть одним из следующих и может записываться в полной или сокращенной форме:
Объект | Сокращенная форма | Задача |
---|---|---|
link | l | Сетевое устройство. |
address | a, addr | IP адрес на устройстве. |
addrlabel | addrl | Управление метками для выбора адреса. |
neighbour | n, neigh | Записи для ARP или NDISC кэшей. |
route | r | Управление записямя таблицы маршрутизации. |
rule | ru | Правила в базе политик маршрутизации. |
maddress | m, maddr | Мультикаст адрес. |
mroute | mr | Записи мультикастового кэша маршрутизации. |
tunnel | t | Туннель через IP. |
xfrm | x | Фреймворк для протокола IPsec. |
Чтобы получить информацию о каждом из объектов используйте команду help следующим образом:
Предупреждение : команды описанные ниже должны выполняться с осторожностью, так как ошибка может привести к потере соединения с сервером. Вы должны быть особо аккуратны при работе в удаленной сессии по ssh.
Примеры использования команды ip
Не пугайтесь синтаксиса команды ip. Давайте сразу начнем с примеров.
Показать информацию обо всех сетевых интерфейсах
Введите следующую команду чтобы получить список всех ip адресов назначенных всем сетевым интерфейсам:
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default
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: eth0:
mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:8b:46:9a brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe8b:469a/64 scope link
valid_lft forever preferred_lft forever
Вы можете выбрать между IPv4 и IPv6 используя следующий синтаксис:
Также существует возможность вывести детали только об определенном сетевом интерфейсе:
Назначить интерфейсу IP адрес
Для того чтобы добавить IP адрес используется синтаксис следующего вида:
Чтобы назначить адрес 192.168.1.200/255.255.255.0 на интерфейс eth0, введите:
Добавить широковещательный адрес на интерфейс
По умолчанию, команда ip не задает какой-либо широковещательный адрес до тех пор, пока это будет недвусмысленно указано. Таким образом следующий синтаксис задает широковещательный адрес ADDRESS:
Вы можете задать лупбек адрес на лупбек интерфейсе lo следующим образом:
Удалить IP адрес с интерфейса
Синтаксис для удаления IPv4/IPv6 адреса следующий:
Чтобы удалить 192.168.1.200/24 с интерфейса eth0, введите:
Сбросить ряд IP адресов с интерфейса
Вы можете удалять IP адреса с интерфейса по одному, как показано выше. Однако команда flush может удалить набор адресов с интерфейса по указанному признаку. Например, вы можете удалить все адреса из частной сети 192.168.2.0/24 с помощью команды:
2: eth0 inet 192.168.2.201/24 scope global secondary eth0
2: eth0 inet 192.168.2.200/24 scope global eth0
*** Round 1, deleting 2 addresses ***
*** Flush is complete after 1 round ***
Вы можете выключить IP адрес на всех ppp (Point-to-Point) интерфейсах:
Еще один пример для всех Ethernet интерфейсов:
Как изменить состояние интерфейса на UP или DOWN
К примеру, чтобы положить интерфейс eth1, используйте:
А чтобы поднять этот же интерфейс:
Как изменить txqueuelen устройства
Вы можете установить длину очереди передачи устройства с помощью ifconfig или команды ip следующим образом:
В этом примере изменим txqueuelen со значения по умолчанию, равного 1000, на 10000 для интерфейса 10000:
Как изменить MTU устройства
Для гигабиных сетей вы можете установить максимальный размер блоков передачи (MTU) для лучшей производительности сети. Синтаксис следующий:
Например, установим MTU устройства eth0 на 9000:
2: eth0: mtu 9000 qdisc pfifo_fast state UP qlen 1000
link/ether 00:08:9b:c4:30:30 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.10/24 brd 192.168.1.255 scope global eth1
inet6 fe80::208:9bff:fec4:3030/64 scope link
valid_lft forever preferred_lft forever
Показать соседей (arp кэш)
Пример вывода (часть информации скрыта):
74.xx.yy.zz dev eth1 lladdr 00:30:48:yy:zz:ww REACHABLE
10.10.29.66 dev eth0 lladdr 00:30:48:c6:0a:d8 REACHABLE
74.ww.yyy.xxx dev eth1 lladdr 00:1a:30:yy:zz:ww REACHABLE
10.10.29.68 dev eth0 lladdr 00:30:48:33:bc:32 REACHABLE
74.fff.uu.cc dev eth1 lladdr 00:30:48:yy:zz:ww STALE
74.rr.ww.fff dev eth1 lladdr 00:30:48:yy:zz:ww DELAY
10.10.29.65 dev eth0 lladdr 00:1a:30:38:a8:00 REACHABLE
10.10.29.74 dev eth0 lladdr 00:30:48:8e:31:ac REACHABLE
Последнее поле показывает состояние системы «определения недоступности соседа»:
Добавить новую ARP запись
Например, добавить постоянную ARP запись для соседа 192.168.1.5 на устройстве eth0:
Состояние соседа | Значение |
---|---|
permanent | Состояние соседа занято навсегда и может быть удалено только администратором. |
noarp | Состояние соседа валидно. Попыток проверить состояние не будет, но может быть удалено, когда закончится время жизни. |
stale | Состояние соседа валидно, но подозрительно. Эта опция для ip neigh не меняет состояние соседа, если оно было валидно и адрес не был изменен этой командой. |
reachable | Состояние соседа валидно до окончания таймаута доступности. |
Удалить ARP запись
Удалить запись для соседа 192.168.1.5 на интерфейсе eth1:
Изменить состояние на reachable для соседа 192.168.1.100 на устройстве eth1:
Очистить ARP запись
Команда flush или f очищает таблицы соседей или arp таблицы. Синтаксис:
ip route: команды управления таблицей маршрутизации
Используйте следующие команды для управления таблицей маршрутизации ядра.
Показать таблицу маршрутизации
Посмотреть таблицу маршрутизации:
Показать роутинг для 192.168.1.0/24:
192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.10
Добавить новый маршрут
Добавить статический маршрут в сеть 192.168.1.0/24 через шлюз 192.168.1.254:
Чтобы маршрутизировать весь трафик через шлюз 192.168.1.254 подключенный через сетевой интерфейс eth0:
Удалить маршрут
Команда чтобы удалить маршрут по умолчанию:
В этом примере удалим маршрут созданный в предыдущем блоке:
Настройка локальной сети вручную в Ubuntu
Принцип устройства сети.
IP-адрес:
Компьютер в сети, должен быть уникальным.
Уникальность ему предоставляет IP-адрес. IP-адрес — это последовательность единиц и нолей, равная 32 знакам (1100100111. ) — страшно и непонятно :).
Для наглядности и удобства эту последовательность разбили на 4 равные части и перевели в десятичную систему исчисления.
Что получилось? 32 знака (единицы и ноли) = 8 знаков * 4 группы = 255.255.255.255 (8 знаков = 2 в 8-й степени — 1 = 256 — 1 = 255).
То есть максимально возможная группа цифр — это 255.255.255.255.
Маска подсети:
Что такое маска подсети? А это часть ip-адреса. IP-адрес поделили на две неравные части. Первые 24 знака (бита) — маска, а остальные 8 — адрес хоста в подсети.
Маска подсети нужна для определения того, является ли компьютер которому отправляется пакет, компьютером той же подсети, что и наш. Если маска у нас одна, тогда шлем напрямки к компу-получателю, если же нет, то шлем пакет шлюзу (шлюз — это комп, маршрутизатор или программа для сопряжения компьютерных сетей, использующих разные протоколы).
Как работает сеть? Если сказать просто, то так: компьютер отсылает пакет абы куда :), но в пакете есть информация в которой записано кому он предназначен — информация о получателе. Пакет может прийти хосту, для которого он не предназначен. Хост проверит по записанной ключевой информации принадлежность пакета, убедится, что пакет не для него, и выбросит его как ненужный. И так происходит пока пакет не придет к получателю.
Что за информация записана в пакете, по которой хосты определяют принадлежность пакета получателю?
Записаны
MAC-адрес получателя и ip-адрес получателя. MAC-адрес вещь уникальная, в пределах земного шара :).
При тривиальных условиях, то есть когда компьютеры в одной подсети, записывается MAC-адрес получателя и ip-адрес получателя, а когда пакет шлем через шлюз, то в пакете указывается MAC-адрес шлюза (его мы узнаем из ip-адреса шлюза с помощью ARP-запроса) и ip-адрес компьютера-получателя.
DNS-сервер — это компьютер, который знают всё про всех :). Это глобальное определение.
Пример: Есть желание попасть на http://yandex.ru. Наш компьютер формирует запрос для сервера — это компьютер на котором размещена страничка http://www.yandex.ru :). Для того, чтобы узнать адрес этого сервера, ему нужно, сначала, посмотреть файл hosts (в windows — C:/windows/system32/drivers/etc/hosts, в linux — /etc/hosts) и, если в нём нет записи с этим именем, то послать запрос DNS-серверу, в котором прописаны символы — «yandex.ru». DNS-сервер посмотрит в таблицах соответствий имён ip-адресам, и найдет ip-адрес сервера. Этот 32-битный адрес он вернёт нам. Используя этот ip-адрес мы преспокойненько попадаем на нужную нам страничку.
Если же DNS-сервер не отвечает, то мы отправляем запрос второму DNS-серверу.
Если у вас не работает интернет, проверьте, может быть не прописаны или прописаны но неправильно DNS-серверы.
Проверить это можно «попинговав» сначала yandex.ru, а потом его ip-адрес: 77.88.21.11.
IP-адреса есть уникальные (белые, реальные, внешние) и неуникальные (серые, внутренние).
Адреса, относящиеся к подсетям, представленным ниже, не используются в интернете в качестве реальных адресов.
Это «серые», «внутренние» адреса. Они используются в локальных компьютерных сетях, которые если и имеют выход в интернет, то только через шлюз, у которого есть внешний ip-адрес. Если у этого шлюза вторая сеть — интернет, и адрес внешний, то необходимо настроить на нем технологию транслирования сетевых адресов (network address translation, NAT). Это делается для того, чтобы сетевые пакеты из локальной сети, прошедшие через него в интернет, не имели серого адреса-отправителя, т.к. в этом случае сервер, для которого предназначен пакет, не поймет, кому именно из миллионов локальных сетей возвращать ответный пакет. При использовании NAT, шлюз меняет адрес отправителя на свой внешний адрес, а у себя записывает, что «ответные пакеты с этого сервера перенаправлять такому-то компьютеру. ».
В этом случае используется SNAT (source network address translation).
Если же нам необходимо изменять адрес получателя (например, в нашей локальной сети есть сервер терминалов с серым адресом, а мы бы хотели иметь к нему доступ из интернета), то можно использовать на нашем шлюзе DNAT (destination network address translation) — «проброс портов».
То есть мы указываем в правилах файервола, что пакеты, предназначенные нам и пришедшие на порт 3160, перенаправлять на внутренний серый адрес сервера терминалов.
Определение состояния сетевых устройств и средств.
Если рассматривать самое простое соединение, т.е. компьютер в локальной сети и получает настройки автоматически, то необходимо выполнить команду:
Далее, для изменения настроек нам понадобятся права суперпользователя, по этому будем использовать программу sudo.
sudo dhclient eth0
(команду dhclient надо запускать с правами суперпользователя).
Команда ifconfig (без параметров), отображает информацию только об активных сетевых интерфейсах.
В Ubuntu имена сетевых устройств имеют вид ethN, где N — число, означающее номер устройства связи в системе.
Нумерация устройств начинается с нуля. Если в компьютере две сетевых карты, то они будут с идентификаторами eth0 и eth1. Если в сетевую карту ethN вставлен сетевой провод, идущий в модем, роутер или свитч, будет написано «RUNNING», на первом рисунке это видно.
Интерфейс eth0 — это карта Ethernet, к которой можно подключить сетевой кабель. В текущий момент сетевой кабель подключен, поэтому интерфейс активен, и для него отображаются ip-адрес, широковещательный адрес и маска подсети:
Интерфейс eth0 — карта Ethernet. Сетевой кабель подлючен, интерфейс активен, присвоен ip(192.168.1.254) и маска подсети(255.255.255.0):
Интерфейс lo — интерфейс обратной петли и позволяет компьютеру обращатся к самому себе. Интерфейс имеет ip-адрес 127.0.0.1 и необходим для нормальной работы системы:
Еще один интересный адрес, который можно увидеть у сетевой карты — параметр HWaddr (Hardware Address, аппаратный адрес). Это mac-адрес (Media Access Control, управление доступом к среде). Это 48-разрядный серийный номер сетевого адаптера, присваиваемый производителем. Так как lo создан программно, у него не может быть аппаратного адреса.
Настройка сетевого интерфейса при помощи ifconfig
Команда ifconfig позволяет конфигурировать сетевой интерфейс по вашему усмотрению и предлагает широкие возможности для этого.
Чтобы получить подробную информацию по команде, пишем в терминале:
man ifconfig
Если компьютер со статическим ip-адресом и не имеет доступа ни к другим сетям ни к интернету, то команда настройки сетевого интерфейса будет такой:
sudo ifconfig eth0 192.168.1.2 netmask 255.255.255.0 up
eth0 — идентификатор сетевого оборудования (сетевая карта).
192.168.1.2 — присваеваемый ip-адрес.
netmask 255.255.255.0 — присваеваемая маска подсети.
up — поднять интерфейс (то есть применить изменения, начать работу сетевой карте).
down — остановить интерфейс.
Команда: sudo ifconfig eth0 down Т.е. остановить работу сетевой карты с eth0 идентификатором.
Бывает так, что провайдер интернет привязывает mac-адрес сетевой карты к учётке клиента. При замене сетевой карты или же компьютера, мы получим отсутствие интернета на нашей стороне. Как временное решение может подойти подмена реального mac-адреса, mac-адресом который был зарегистрирован у провайдера. Почему временное? Потому, что описанная ниже команда делает изменения которые удалятся, при перезагрузке компьютера.
Сначала выясняем наш старый mac-адрес, выполняем команду ifconfig без параметров.
Допустим он у нас такой: 00:00:00:00:00:01.
Производим следующие действия, то есть выполняем последовательность команд:
1) Отключаем интерфейс: ifconfig eth0 down
2) Изменяем MAC: ifconfig eth0 hw ether 00:00:00:00:00:01
3) Включаем интерфейс: ifconfig eth0 up
Все действия можно выполнить одной командой:
sudo ifconfig eth0 down && ifconfig eth0 hw ether 00:00:00:00:00:01 up
&& — означает, выполнить следующую команду при успешном выполнении предыдущей команды.
Как я писал выше, все эти настройки действительны лишь до перезагрузки системы. Сделаем их постоянными следующим образом:
Редактируем файл /etc/network/interfaces
Теперь приступим к редактированю файла настройки сетевых интерфейсов. Вот эти настройки и будут долговременными :), пока мы их не поменяем в файле снова.
На скриншоте вы видите три устройства:
еth0 — первая сетевая карта.
lo — локальная петля.
Локальная сеть подключена к сетевой карте eth0.
Почти вся информация о настройках сети и методах ее активации, хранится в файле /etc/network/interfaces, именно с ним мы и будем работать, используя редактор.
sudo gedit /etc/network/interfaces
auto lo — говорит о том, что интерфейс lo поднимается автоматически при загрузке системы.
Добавьте в файл строки:
auto eth0 iface eth0 inet static address 192.168.1.254 netmask 255.255.255.0 gateway 192.168.1.1
auto eth0 — сетевая карта eth0 поднимается автоматически во время загрузки системы.
iface eth0 inet static — указывает, что интерфейс (iface) сетевой карты (eth0) находится в диапазоне адресов ipv4 (inet) со статическим ip (static).
address 192.168.1.254 — статический ip адрес, тут пишем свой ip-адрес.
netmask — стандартная маска сети.
gateway — ip-адрес основного шлюза.
Редактирование закончено. Сохраняем и закрываем файл.
Запросите у вашего провайдера услуг Интернет (Internet Service Provider, ISP) адреса основного и вспомогательного серверов DNS и опишите их в файле /etc/resolv.conf.
На примере я укажу адрес DNS-сервер своего провайдера, вы должны ввести свои данные.
Откройте файл для редактирования:
sudo gedit /etc/resolv.conf
Вставьте свои данные:
nameserver 192.168.1.1 nameserver 172.16.0.1
Сохраните и закройте файл.
Для настройки DHCP и получения сетевых параметров автоматически, нужно добавить две строчки (пусть у меня так поднимется карта eth1).
sudo gedit /etc/network/interfaces
Вставьте строчки следующего содержания:
auto eth1 iface eth1 inet dhcp
Ваш файл будет выглядеть так:
auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 192.168.1.254 netmask 255.255.255.0 gateway 192.168.1.1 auto eth1 iface eth0 inet dhcp
Если по каким-либо причинам вы хотите чтобы при загрузке у сетевой карты eth0 был другой mac-адрес, для этого нужно дописать строчку hwaddress ether 00:00:00:00:00:01:
auto eth0 iface eth0 inet static address 192.168.1.254 netmask 255.255.255.0 gateway 192.168.1.1 hwaddress ether 00:00:00:00:00:01
Несколько IP-адресов на одной сетевой карте
На одной сетевой карте может быть несколько ip-адресов, это бывает необходимо, если в коммутатор идут два провода от разных сетей и один от компьютера. В этом случае можно настроить на компьютере адреса обоих сетей без использования дополнительной сетевой карты. Для этого необходимо идентифицировать так называемый алиас (alias) к определенному сетевому интерфейсу, и выглядеть это будет так: сетевой_интерфейс:1 или сетевой_интерфейс:2, т.е. eth0:1 или eth1:2. Идентифицировать его можно следующим образом:
ifconfig eth0:1 192.168.0.5 netmask 255.255.255.0 up
Интересно то, что можно настроить основной интерфейс через dhcp (автоматически) dhclient eth0, а алиас eth0:1 в статику, чего я в альтернативных операционных системах не нашел.
Настройка сети в Linux
Рассмотрим настройку сети в Linux Ubuntu.
Приведу пример команд просмотра информации о сетевых интерфейсах:
Пример включения/отключения сетевых интерфейсов:
Если имя сетевого интерфейса неизвестно, то смотрим его в logical name набрав команду:
Чтобы единоразово запросить IP адрес по DHCP выполним команду:
Ручное назначение настроек (сбрасываются после перезагрузки):
Удалить все IP с интерфейса eth0 можно так:
Чтобы настройки не сбрасывались их необходимо прописать в конфигурационный файл:
Приведу пример содержания:
В редакторе nano комбинация клавиш Ctrl+O служит для сохранения изменений, Ctrl+X для выхода.
Замечу что в новых версиях Linux сеть настраивается через Netplan.
DNS адреса добавляются в конфигурационный файл /etc/resolv.conf и директорию /etc/resolvconf/, каждый с новой строки, таким образом:
Посмотреть/добавить/удалить маршрут по умолчанию можно так:
Посмотреть таблицу маршрутизации так:
Просмотр IPv6 маршрутов:
Пример добавления маршрутов для сети через шлюз, сетевой интерфейс и маршрут для конкретного адреса через шлюз:
Например с указанным маршрутом можно удалять пакеты:
Можно добавить маршруты в отдельную таблицу, например мы добавим маршрут по умолчанию всем, а адресу 192.168.5.12 указали свой маршрут по умолчанию:
Перезапуск сетевых служб:
Либо перезапуск сервера:
В случае потерь пакетов при большом трафике или если неправильно работает шейпер, то можно попробовать отключить offload:
Посмотрим какие offload активированы, например generic-segmentation-offload — это сокращено «gso»:
Посмотреть правильно ли распределены прерывания сетевой платы по ядрам процессора можно командой:
Пример просмотра ARP таблицы (-d для удаления записи):