В старых версиях ядер Linux (2.4 и ниже) существовали инструменты настройки сети из пакета net-tools, которые включали в себя такие команды, как ifconfig - для управления сетевыми интерфейсами, route - управление таблицей маршрутизации, arp - управление таблицей разрешения имен, netstat - сетевая статистика, mii-tool - статус сетевых устройств и др. В дистрибутивах, использующих современные ядра внедряется пакет iproute2 (иногда называется iproute) и net-tools оставлен, возможно, для совместимости. В пакет iproute2 входят 3 основных утилиты: ip - команда для просмотра параметров и настройки сетевых интерфейсов, IP-адресов, таблиц маршрутизации, правил маршрутизации, таблиц ARP преобразования, IP-туннелей и т.д. tc (traffic control) - команда для просмотра и настройки параметров управления трафиком (классификация трафика, дисциплины управления очереди для различных классов трафика), ss - команда для просмотра текущих соединений и открытых портов (аналог netstat).
Сетевые интерфейсы в линух представляют собой физические устройства, которые взаимодействуют с ядром и с пользователем через соответствующий драйвер (например Ethernet-драйвера именуют интерфейсы как eth0, eth1 ...). Чтобы сетевой интерфейс функционировал, на нем нужно задать настройки какого-либо протокола сетевого уровня (IP, IPX или др.). В современных сетях используется протокол IP. Для управления сетью используется команда ip.
Команда ifconfig - команда ip с параметром link управляет свойствами сетевого интерфейса:
[proxy ~]# ip link show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000 link/ether 00:1d:72:01:ab:93 brd ff:ff:ff:ff:ff:ff 3: irda0: <NOARP> mtu 2048 qdisc noop state DOWN qlen 8 link/irda 00:00:00:00 brd ff:ff:ff:ff 4: vboxnet0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000 link/ether 0a:00:27:00:00:00 brd ff:ff:ff:ff:ff:ff 5: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1400 qdisc pfifo_fast state UNKNOWN qlen 3 link/ppp
Вывод данной команды содержит пронумерованный список интерфейсов, присутствующих в системе. Информация об интерфейсе содержит две строки: в первой указывается имя интерфейса (lo, eth0 и др.), установленные флаги состояния (в фигурных скобках < и >), MTU (Maximum Transmission Unit, максимально допустимый размер фрейма в байтах), тип и размер очереди фреймов; во второй строке — тип соединения, MAC-адрес, широковещательный адрес и т. п.
Некоторые флаги состояния:
UP — устройство подключено и готово принимать и отправлять фреймы;
LOOPBACK — интерфейс является локальным и не может взаимодействовать с другими узлами в сети;
BROADCAST - устройство способно отправлять широковещательные фреймы;
POINTTOPOINT — соединение типа "точка-точка"
PROMISC — устройство находится в режиме "прослушивания" и принимает все фреймы.
NOARP — отключена поддержка разрешения имен сетевого уровня.
ALLMULTI — устройство принимает все групповые пакеты.
NO-CARRIER — нет связи (не подключен кабель).
DOWN — устройство отключено.
Можно также вывести информацию о выбранном интерфейсе, задав его имя в параметре dev:
[proxy ~]# ip link show dev eth0
или просто:
[proxy ~]# ip link show eth0
Команда ip link также позволяет изменять свойства сетевого интерфейса. Для этого используется параметр set:
iproute:~# ip link show dev eth2
3: eth2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
link/ether 08:00:27:c9:00:f0 brd ff:ff:ff:ff:ff:ff
iproute:~# # установка значения MTU
iproute:~# ip link set mtu 1400 eth2
iproute:~# # установка MAC адреса
iproute:~# ip link set address 00:11:11:12:FE:09 eth2
iproute:~# # "поднятие" интерфейса
iproute:~# ip link set up eth2
iproute:~# ip link show dev eth2
3: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1400 qdisc pfifo_fast state UP qlen 1000
link/ether 00:11:11:12:fe:09 brd ff:ff:ff:ff:ff:ff
iproute:~# # отключение интерфейса
iproute:~# ip link set down eth2
iproute:~# ip link show dev eth2
3: eth2: <BROADCAST,MULTICAST> mtu 1400 qdisc pfifo_fast state DOWN qlen 1000
link/ether 00:11:11:12:fe:09 brd ff:ff:ff:ff:ff:ff
Указанные тут команды являются аналогами "классических" команд из пакета net-tools:
# ifconfig eth2 mtu 1400 # ifconfig eth2 hw ether 00:11:12:13:14:15 # ifconfig eth2 up # ifconfig eth2 down
Физические параметры (скорость, технология Ethernet, тип дуплекса) сетевого подключения зависят от используемого оборудования и обычно настраиваются автоматически при подключении компьютера к сети. Но иногда из-за несогласованной работы оборудования и драйверов адаптера параметры необходимо выставить вручную, используя утилиту ethtool. Пример использования утилиты:
iproute:~# ethtool eth2
Settings for eth2:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised pause frame use: No
Advertised auto-negotiation: Yes
Speed: 1000Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
MDI-X: Unknown
Supports Wake-on: umbg
Wake-on: d
Current message level: 0x00000007 (7)
Link detected: no
iproute:~# ethtool -i eth2
driver: e1000
version: 7.3.21-k5-NAPI
firmware-version: N/A
bus-info: 0000:00:08.0
Протокол IP является маршрутизируемым протоколом без установления соединения. IP адрес представляет собой комбинацию номера сети и номера узла в данной сети. Количество бит, используемых для номера сети определяется по классу адреса или задается маской подсети. Итого, чтобы сетевой интерфейс начал функционировать в соответствии со своим прямым назначением, необходимо на нем задать параметры соответствующего сетевого протокола. Для протокола IP минимально необходимые параметры - это IP адрес и маска подсети. Для настройки параметров протокола IP на сетевом интерфейсе с помощью командной строки необходимо использовать команду ip address (она же ip addr).
user@nout:~$ ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
link/ether 90:e6:ba:2f:c1:d4 brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
link/ether 00:25:d3:3f:3e:87 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.148/24 brd 192.168.1.255 scope global wlan0
inet6 fe80::225:d3ff:fe3f:3e87/64 scope link
valid_lft forever preferred_lft forever
Параметр show отображает текущую конфигурацию. Каждая запись о сетевом адресе может содержать информацию о типе адреса (inet — адрес IPv4, inet6 — IPv6 и т. д.), непосредственно адрес, маску подсети (количество сетевых бит), широковещательный адрес данной сети, область видимости (scope global — действителен везде, scope link — только для данного устройства, scope host — для данного узла, доступные области приведены в /etc/iproute2/rt_scopes) и имя логического интерфейса.
user@nout:~$ # добавление адреса выполняется параметром add
user@nout:~$ # при этом необходимо задать широковещательный адреc
user@nout:~$ # (параметр brd + задает автоматический рассчет широковещательного адреса)
user@nout:~$ # данная операция требует прав суперпользователя
user@nout:~$ ip address add 192.168.1.3/25 brd + dev eth0
RTNETLINK answers: Operation not permitted
user@nout:~$ sudo -s
[sudo] password for user:
nout:~# ip address add 192.168.1.3/25 brd + dev eth0
nout:~# ip address show dev eth0
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
link/ether 90:e6:ba:2f:c1:d4 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.3/25 brd 192.168.1.127 scope global eth0
nout:~# # удаление адреса производится параметром del
nout:~# ip address del 192.168.1.3/25 dev eth0
nout:~# ip address show dev eth0
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
link/ether 90:e6:ba:2f:c1:d4 brd ff:ff:ff:ff:ff:ff
C помощью ip можно задать несколько IP адресов на одном интерфейсе:
nout:~# ip address add 192.168.1.11/25 brd + dev eth0
nout:~# ip address add 192.168.1.12/25 brd + dev eth0
nout:~# ip address show dev eth0
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
link/ether 90:e6:ba:2f:c1:d4 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.11/25 brd 192.168.1.127 scope global eth0
inet 192.168.1.12/25 brd 192.168.1.127 scope global secondary eth0
nout:~# ip address del 192.168.1.11/25 dev eth0
nout:~# ip address show dev eth0
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
link/ether 90:e6:ba:2f:c1:d4 brd ff:ff:ff:ff:ff:ff
nout:~# ip address add 192.168.1.12/25 brd + dev eth0
nout:~# ip address add 192.168.1.212/25 brd + dev eth0
nout:~# ip address show dev eth0
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
link/ether 90:e6:ba:2f:c1:d4 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.12/25 brd 192.168.1.127 scope global eth0
inet 192.168.1.212/25 brd 192.168.1.255 scope global eth0
При добавлении адреса из той же сети, что и существующий, новый адрес становится дополнительным к существующему (secondary), и если удалить основной адрес, то будет удален и дополнительный. При этом, команда ifconfig не умеет отображать второй Ip:
nout:~# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 90:e6:ba:2f:c1:d4
inet addr:192.168.1.12 Bcast:192.168.1.127 Mask:255.255.255.128
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:1
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:43
Возможно создать ifconfig - совместимую реализацию способа использования нескольких IP-адресов на одном сетевом интерфейсе. Для этого следует в команде ip addr add использовать параметр label:
nout:~# ip address add 192.168.12.212/25 brd + dev eth0 label eth0:newdev
nout:~# ifconfig
eth0 Link encap:Ethernet HWaddr 90:e6:ba:2f:c1:d4
inet addr:192.168.1.12 Bcast:192.168.1.127 Mask:255.255.255.128
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:1
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:43
eth0:newdev Link encap:Ethernet HWaddr 90:e6:ba:2f:c1:d4
inet addr:192.168.12.212 Bcast:192.168.12.255 Mask:255.255.255.128
UP BROADCAST MULTICAST MTU:1500 Metric:1
Interrupt:43
nout:~# ip address show dev eth0
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
link/ether 90:e6:ba:2f:c1:d4 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.12/25 brd 192.168.1.127 scope global eth0
inet 192.168.1.212/25 brd 192.168.1.255 scope global eth0
inet 192.168.12.212/25 brd 192.168.12.255 scope global eth0:newdev
nout:~# ip address flush dev eth0
nout:~# ip address show dev eth0
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
link/ether 90:e6:ba:2f:c1:d4 brd ff:ff:ff:ff:ff:ff
Как видно, параметр flush очищает все установленные на интерфейсе IP адреса.
В локальной сети текущий хост для определения физических адресов (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 пакет, то сетевая подсистема ядра использует таблицу маршрутизации. Если пакет отправляется в ту же подсеть, которой принадлежит хост, то с помощью ARP определяется физический адрес хоста назначения и пакет отправляется напрямую хосту назначения. Если адрес назначения принадлежит не "локальной сети", то пакет отправляется на шлюз (читай - направляется по маршруту), который указан в таблице маршрутизации для сети, которой принадлежит хост назначения. При этом, выбирается та сеть, в которой адрес сети наиболее заполнен (читай - меньше хостов в подсети). Если для хоста назначения не найден маршрут, то пакет отправляется на "шлюз по умолчанию". Все шлюзы должны находиться в той же подсети, что и исходный хост.
Допустим, в локальной сети есть некоторый хост с адресом 192.168.1.100/24, а так же есть хост 192.168.1.1, который является шлюзом в глобальную сеть, а так же есть хост с адресом 192.168.1.2, который является связующим маршрутизатором с сетью 192.168.24.0/24 (то есть имеет еще один интерфейс в сеть 192.168.24.0/24 и на нем включен форвардинг). Для того, чтобы хост с адресом 192.168.1.100/24 имел доступ в сеть Интернет и к локальной сети 192.168.24.0/24, необходимо внести в таблицу маршрутизации соответствующие записи, например с помощью команды ip route add:
# ip route add default via 192.168.1.1 # ip route add 192.168.24.0/24 via 192.168.1.2 # ip route show 192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.100 192.168.24.0/24 via 192.168.1.2 dev eth1 default via 192.168.1.1 dev eth
Первая команда добавляет маршрут по умолчанию (default) через узел 192.168.1.1 (параметр via). Вторая команда устанавливает маршрут на сеть 192.168.24.0/24 через узел 192.168.1.2.
Для вывода на экран содержимого таблицы маршрутизации используется команда ip route show. В данном случае в таблице маршрутизации три записи: первая о том, что сеть 192.168.1.0/24 доступна непосредственно на интерфейсе eth1 (запись добавляется автоматически), и две записи, добавленные пользователем: альтернативный маршрут и маршрут по умолчанию.
С помощью файла /etc/network/interfaces есть возможность задать постоянные маршрута при поднятии интерфейса и удаление маршрута при выключении интерфейса. Это делается с помощью параметра up и down соответственно. Нижеприведенная конфигурация позволяет задать маршрут до сети 192.168.100.0/24 через шлюз 192.168.1.1:
iface eth1 inet static
address 192.168.1.100
netmask 255.255.255.0
up ip route add 192.168.100.0/24 via 192.168.1.1
down ip route del 192.168.100.0/24
gateway 192.168.1.3Для управления физическими интерфейсами применяется команда ip link из пакета iproute. Для настройки свойств физического подключения (скорость, технология, тип дуплекса используется команда ethtool. Для того, чтобы хост мог взаимодействовать с другими узлами подсети в рамках локального сегмента (широковещательного домена) на нем должен быть установлен IP-адрес и определена маска подсети. Для управления IP-адресами в Linux можно использовать команду ip addr. В локальной сети данный узел для определения физических адресов(MAC) по IP - адресам других узлов использует протокол ARP и локальный ARP-кэш (таблица). Управление ARP -таблицей осуществляется командой ip neigh. Для взаимодействия с удаленными подсетями на данном узле необходимо определить шлюз по умолчанию или/и альтернативные шлюзы. Все шлюзы должны находиться в той же подсети, что и исходный узел. Управление таблицей маршрутизации на узле может осуществляться командой ip route. У параметров команд пакета iproute2 есть сокращенный синтаксис, например, ip link show eth0 можно записать как ip l sh eth0.