Linux: работа с интерфейсами (ifconfig, ip, ethtool, interfaces – lspci network, lshw network)

BASIC
  • veth – virtual eth

ip link или ifconfig -a – показывает все интерфейсы. В том числе те, которые не подняты. Мне помогло при дебаге неподнимания secondary ipif на виртуалке VirtualBox. Косяк оказался в том, что я неправильно в конфиге /etc/network/interfaces указал название интерфейса 🙂

ip a add 1.1.1.1/32 dev enp2s0 или ifconfig eth1 1.1.1.1/32 up – конфигурируем IP на интерфейсе. Можно и secondary.

# IPv4
ip addr add 172.17.0.2/24 dev enp3s0
ip addr del 172.17.0.2/24 dev enp3s0
ip link set enp3s0 up
ip link show enp3s0
ifconfig eth1 172.17.0.2/24 up

# IPv6
ip -6 addr add 2001:0db8:0:f101::2/64 dev enp3s0
ifconfig eth0 inet6 add 2001:0db8:0:f101::2/64

# SUBINT
ip a addr 172.17.0.2/24 dev enp3s0:1
ifconfig eth1:1 172.20.0.3/24 up

Включаем интерфейс, для работы ifup с enp интерфейсами нужно их переименовывать.

ifup eth0
ifconfig eth0 up
ip link set eth0 up

ifup and ifdown doesn’t supporting the latest interface device enpXXX names.

 

MTU
# ifconfig enp8s0
enp8s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

# ifconfig enp8s0 mtu 9000

# ifconfig enp8s0
enp8s0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 9000
PROMISCUOUS

ip link set enp2s0 promisc on # для работы сетевых утилит типа tcpdump, tcpreplay, wireshark, tshark зачастую нужно включение promiscuous режима (чаще всего включается утилитой автоматически перед стартом сбора сетевого трафика)

Tcpdump start/stop
[ 1691.019004] device eth0 entered promiscuous mode
[ 1699.783211] device eth0 left promiscuous mode
Переименование интерфейсов

Временное (до перезагрузки)

ip link set enp5s0f0 name eth0
ip link set enp5s0f1 name eth1

Сохраняется и после перезагрузки

sudo touch /etc/udev/rules.d/70-persistent-net.rules
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="smsc95xx", ATTR{address}=="*", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
IP multicast
-bash-4.4# ip m
1:      lo
       inet  224.0.0.1
4:      eth0
       link  01:00:5e:00:00:01
       inet  224.0.0.1
5:      eth1
       link  01:00:5e:00:00:01
       inet  224.0.0.1
6:      eth2
       link  01:00:5e:00:00:01
        inet  224.0.0.1
Static настройка интерфейса через файл /etc/network/interfaces

Если на сервере нет vim (есть только vi), возможно есть vim.tiny (на примере Debian).

vim.tiny /etc/network/interfaces

Пример настроек:

# общие опции: автоматически выполнять перезапуск интерфейса при его падении, поднимать интерфейс автоматически при старте системы. Наличие hotplug не требует auto.
allow-hotplug eth0 auto eth0
# primary interface + dhcp
auto eth0
iface eth0 inet dhcp

# subinterface + dhcp
auto eth0:1 iface eth0:1 inet dhcp
# статический адрес, маска, шлюз
auto eht1
iface eth1 inet static
address 192.168.0.1
netmask 255.255.255.0
gateway 192.168.0.254

Пример файла с настройками интерфейса + статическими (permanent) маршрутами через файл interfaces.

$ cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# internal
auto eth1
iface eth1 inet static
address 172.17.0.2
netmask 255.255.0.0
post-up ip route add default via 172.17.0.1

# management
auto eth2
iface eth2 inet static
address 172.55.1.101
netmask 255.255.255.0
post-up ip route add 11.0.0.0/16 via 172.55.1.1

 

Рестарт

Для применения настроек через файл не обязательно перезагружать сервер. Можно за-флашить настройки (если интерфейсы уже есть в системе – иначе просто перезапустить), а потом перезапустить networking.service. Перезапускать службу в целом и flash’ить интерфейс по которому мы подключены при удаленном подключении обязательно одновременно с рестартом – иначе доступ потеряется.

# пока не пропишешь интерфейсы/адреса в файле /etc/network/interfaces - утилита ifup не найдет их, а в ethtool интерфейс будет в DOWN!

ip link set enp2s0 up

root@debian:~# ifup eth-0
Ignoring unknown interface eth-0=eth-0.
root@debian:~# ifup eth0
Ignoring unknown interface eth0=eth0.

ip addr flush eth4 && systemctl restart networking.service && ifup eth4 # после flash и restart чаще всего перестраховаться с ifup управляющего интерфейса

service networking restart # альтернатива systemctl

 

NETWORK INTERFACE CARD info (lshw, lspci)

lshw -class network # полный вывод

lshw -c network -short -numeric # вывод в виде удобной таблички (short – краткий, numeric – добавляем адрес PCI)

Если девайс в списке есть, но без logical name, перезагрузить сервер или рестартовать службу командой выше. Если состояние DISABLED, то интерфейс нужно включить (ifup/ifconfig/ip link – выше примеры).

~$ sudo lshw -class network
*-network
description: Ethernet interface
product: VMXNET3 Ethernet Controller
vendor: VMware
physical id: 0
bus info: pci@0000:0b:00.0
logical name: eth0
version: 01
serial: 00:50:56:b6:78:b5
capacity: 1Gbit/s
width: 32 bits
clock: 33MHz
capabilities: pm pciexpress msi msix bus_master cap_list rom ethernet physical logical tp 1000bt-fd
configuration: autonegotiation=off broadcast=yes driver=vmxnet3 driverversion=1.4.14.0-k-NAPI duplex=full ip=78.107.63.120 latency=0 link=yes multicast=yes port=twisted pair
resources: irq:19 memory:fd4fb000-fd4fbfff memory:fd4fc000-fd4fcfff memory:fd4fe000-fd4fffff ioport:5000(size=16) memory:fd400000-fd40ffff

*-network
description: Ethernet interface
product: VMXNET3 Ethernet Controller
vendor: VMware
physical id: 0
bus info: pci@0000:13:00.0
logical name: eth1
version: 01
serial: 00:50:56:b6:7d:ab
capacity: 1Gbit/s
width: 32 bits
clock: 33MHz
capabilities: pm pciexpress msi msix bus_master cap_list rom ethernet physical logical tp 1000bt-fd
configuration: autonegotiation=off broadcast=yes driver=vmxnet3 driverversion=1.4.14.0-k-NAPI duplex=full ip=192.168.149.78 latency=0 link=yes multicast=yes port=twisted pair
resources: irq:16 memory:fd3fb000-fd3fbfff memory:fd3fc000-fd3fcfff memory:fd3fe000-fd3fffff ioport:6000(size=16) memory:fd300000-fd30ffff

Если в выводе Unclaimed – вероятнее всего нужно обновлять операционную систему для обновления драйверов.

*-network:0 UNCLAIMED
description: Ethernet controller

lspci | egrep -i –color ‘network|ethernet’

~$ lspci | egrep -i --color 'network|ethernet'
0b:00.0 Ethernet controller: VMware VMXNET3 Ethernet Controller (rev 01)
13:00.0 Ethernet controller: VMware VMXNET3 Ethernet Controller (rev 01)

lspci -knn | grep “Net\|Eth” -A2

ETHTOOL

ethtool –a ethX – смотрим данные по физ. интерфейсу.

~$ ethtool eth0
Settings for eth0:
Supported ports: [ TP ]
Supported link modes: 1000baseT/Full
10000baseT/Full
Supported pause frame use: No
Supports auto-negotiation: No
Advertised link modes: Not reported
Advertised pause frame use: No
Advertised auto-negotiation: No
Speed: 10000Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
Auto-negotiation: off
MDI-X: Unknown
Cannot get wake-on-lan settings: Operation not permitted
Link detected: yes

~$ ethtool eth1
Settings for eth0:
Supported ports: [ FIBRE ]
Supported link modes: 1000baseT/Full
10000baseT/Full
Supported pause frame use: Symmetric Receive-only
Supports auto-negotiation: No
Advertised link modes: 10000baseT/Full
Advertised pause frame use: No
Advertised auto-negotiation: No
Speed: Unknown!
Duplex: Unknown! (255)
Port: FIBRE
PHYAD: 1
Transceiver: internal
Auto-negotiation: off
Supports Wake-on: g
Wake-on: g
Current message level: 0x00000000 (0)

Link detected: no

ethtool -p – blink.

Initiates adapter-specific action intended to enable an operator to easily identify the adapter by sight. Typically this involves blinking one or more LEDs on the specific network port.

ethtool –a ethX –  можно посмотреть параметры flow control.

ethtool –A ethX [autoneg on|off] [rx on|off] [tx on|off] –  можно изменить параметры flow control.

ethtool -C ethX [adaptive-rx on|off] [adaptive-tx on|off] [rx-usecs N] [rx-frames N] [rx-usecs-irq N] [rx-frames-irq N] [tx-usecs N] [tx-frames N] [tx-usecs-irq N] [tx-frames-irq N] [stats-block-usecs N] [pkt-rate-low N] [rx-usecs-low N] [rx-frames-low N] [tx-usecs-low N] [tx-frames-low N] [pkt-rate-high N] [rx-usecs-high N] [rx-frames-high N] [tx-usecs-high N] [tx-frames-high N] [sample-interval N] – позволяет изменить большое количество различных параметров.

ETHTOOL: RSS (HASH)

С помощью ethtool можно настроить перераспределение трафика к CPU на основе hash от каких-то данных на базе RSS. По умолчанию Linux делает hash SRC & DST IP для UDP трафика и hash SRC & DST IP and PORTs для TCP трафика. Перераспределение может происходить к процессам ksoftirqd (из еще надо настроить, напр, с использованием qdisc).

# BASIC SCRIPTS
for proto in tcp4 udp4 tcp6 udp6; do
   echo "/usr/local/sbin/ethtool -N eth1 rx-flow-hash $proto sdfn"
   /usr/local/sbin/ethtool -N eth1 rx-flow-hash $proto sdfn
done

# COMMANDS
# ethtool -n enp3s0f0 rx-flow-hash udp4
UDP over IPV4 flows use these fields for computing Hash flow key:
IP SA
IP DA

# ethtool -N enp5s0f0 rx-flow-hash udp4
UDP over IPV4 flows use these fields for computing Hash flow key:
IP SA
IP DA
L4 bytes 0 & 1 [TCP/UDP src port]
L4 bytes 2 & 3 [TCP/UDP dst port]

# ethtool -n enp5s0f0 rx-flow-hash tcp4
TCP over IPV4 flows use these fields for computing Hash flow key:
IP SA
IP DA
L4 bytes 0 & 1 [TCP/UDP src port]
L4 bytes 2 & 3 [TCP/UDP dst port]


# SHOW          
rx-flow-hash tcp4|udp4|ah4|esp4|sctp4|tcp6|udp6|ah6|esp6|sctp6
          m|v|t|s|d|f|n|r...
          s   Hash on the IP source address of the rx packet.
          d   Hash on the IP destination address of the rx packet.
          f   Hash on bytes 0 and 1 of the Layer 4 header of the rx packet.
          n   Hash on bytes 2 and 3 of the Layer 4 header of the rx packet.

ETHTOOL: QUEUES

Set

/sbin/ethtool -L enp5s0f0 combined 8
/sbin/ethtool -G enp5s0f0 rx 4078 tx 4078

Show

    root@DMG:/opt/trex/v2.82# /sbin/ethtool -l enp5s0f0
   Channel parameters for enp5s0f0:
   Pre-set maximums:
   RX:             0
   TX:             0
   Other:          0
   Combined:       30
   Current hardware settings:
   RX:             0
   TX:             0
   Other:          0
   Combined:       8
ethtool: Offload

Вообще offload технологии на сетевых картах призваны уменьшить количество прерываний и обработок CPU приходящих сетевых пакетов за счет склеивания этих данных при отправке или приеме. Пример технологий offload – LSO, LRO, TSO, GSO:

  • Large Send Offload (LSO),
  • Large Receive Offload (LRO),
  • TCP segmentation offload (TSO),
  • generic segmentation offload (GSO)
LSO (Large Send Offload) and LRO (Large Receive Offload) are techniques to increase egress and ingress throughput in high-bandwidth network connections by reducing CPU overheard. These are generally accomplished using multipacket buffering. LSO is also known as TCP segmentation offload (TSO) when applied to TCP, or generic segmentation offload (GSO).

При их использовании можно увидеть разные “аномалии” в трафике:

  • Общее количество пакетов в дампе будет меньше, чем по факту было в сети
  • Максимальный размер сегмента в снятом дампе трафика может быть значительно более согласованного MSS из-за включенного TCP offload на сетевой карте в виде .
  • Так же из-за включенного offload в дампе могут быть некокорректные TCP checksum, хотя с фактическим трафиком в сети такой проблемы нет.
We count the number of LRO packets with NICs that support that, this number could be significantly smaller than the real number of packets (from TRex manual).

Рекомендации snort по отключению offload:

http://c-sec.ru/snort/Snort-Part-2-Installing-Snort/
Согласно рекомендациям из руководства Snort следует убедиться, что сетевая карта не обрезает слишком большие пакеты (в сетях Ethernet длина которых превышает 1518 байт). Для этого произведём оптимизацию сетевых интерфейсов с помощью утилиты ethtool. Если нужно, устанавливаем ethtool (sudo apt-get -y install ethtool) и для настройки параметров выполняет в терминале следующие команды

ethtool –show-offload ethX/enpX – смотрим какие offload включены

ethtool -k ethX/enpX – смотрим какие offload включены

# ethtool -k eth6
Features for eth6:
rx-checksumming: on
tx-checksumming: on
        tx-checksum-ipv4: on
        tx-checksum-ip-generic: off [fixed]
        tx-checksum-ipv6: on
        tx-checksum-fcoe-crc: off [fixed]
        tx-checksum-sctp: off [fixed]
scatter-gather: off
        tx-scatter-gather: off
        tx-scatter-gather-fraglist: off [fixed]
tcp-segmentation-offload: off
        tx-tcp-segmentation: off
        tx-tcp-ecn-segmentation: off
        tx-tcp6-segmentation: off
udp-fragmentation-offload: off [fixed]
generic-segmentation-offload: off
generic-receive-offload: off
large-receive-offload: off
rx-vlan-offload: on [fixed]
tx-vlan-offload: on
ntuple-filters: off [fixed]
receive-hashing: on
highdma: on [fixed]
rx-vlan-filter: on
vlan-challenged: off [fixed]
tx-lockless: off [fixed]
netns-local: off [fixed]
tx-gso-robust: off [fixed]
tx-fcoe-segmentation: off [fixed]
tx-gre-segmentation: on
tx-ipip-segmentation: on
tx-sit-segmentation: on
tx-udp_tnl-segmentation: on
fcoe-mtu: off [fixed]
tx-nocache-copy: off
loopback: off
rx-fcs: off [fixed]
rx-all: off [fixed]
tx-vlan-stag-hw-insert: off [fixed]
rx-vlan-stag-hw-parse: off [fixed]
rx-vlan-stag-filter: off [fixed]
l2-fwd-offload: off [fixed]
busy-poll: on [fixed]

ethtool -K ethX/enpX rx/tx off – освобождение ОС от расчёт контрольных суммы TCP/IP (rx-checksumming) для входящих/исходящих пакетов, можно так же использовать ключ –offload вместо -k.

ethtool -K ethX/enpX gso off – отключение функции (tcp-segmentation-offload) сборки сегментов без участия CPU;

tcp-segmentation-offload: off
       tx-tcp-segmentation: off
       tx-tcp-ecn-segmentation: off
       tx-tcp-mangleid-segmentation: off
        tx-tcp6-segmentation: off

ethtool -K ethX/enpX gso off – отключение функции (generic-segmentation-offload) фрагментации пакетов без участия CPU;

ethtool -K ethX/enpX gro off – отключение функции (generic-receive-offload) сборки пакетов сетевым интерфейсом без участия CPU;

ethtool -K ethX/enpX lro off – отключение функции (large-receive-offload) сборки пакетов сетевым интерфейсом без участия CPU.

ethtool: Ошибки

Для VM ethtool может быть крайне урезан, вплоть до полной нефункциональности.

~$ sudo ethtool eth0
Settings for eth0:
Link detected: yes

~$ sudo ethtool -c eth0
Coalesce parameters for eth0:
Cannot get device coalesce settings: Operation not supported

~$ sudo ethtool -A eth0
Cannot get device pause settings: Operation not supported

 

Wi-Fi

iwconfig – wireless interfaces config

kali@kali:~$ sudo iwconfig
lo no wireless extensions.

eth0 no wireless extensions.

wlan0 IEEE 802.11 ESSID:off/any
Mode:Managed Access Point: Not-Associated Tx-Power=20 dBm
Retry short limit:7 RTS thr:off Fragment thr:off
Encryption key:off
Power Management:off

Leave a Reply