Рубрики
network \ сеть

systemd-networkd / bond / ovs / wi-fi wpa_supplicant / apipa v4 v6 / tun / tap / dummy / bond / batman-adv

ссылки:

https://wiki.archlinux.org/title/Systemd-networkd
https://wiki.archlinux.org/title/systemd-networkd_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)
https://wiki.archlinux.org/title/systemd-networkd
openvswitch / ovs / bond0

wpa_supplicant

wpa_supplicant -B -b br0 -i wlan0 -c wpa.conf -Dwext

wpa_supplicant - Wi-Fi Protected Access client and IEEE 802.1X supplicant

-B Run daemon in the background.
-b br_ifname Optional bridge interface name. (Per interface)
-i ifname Interface to listen on
-c filename Path to configuration file.
wpa.conf - wpa_supplicant config file example:

network={
    ssid="MYSSID"
    psk="passphrase"
}

Enable 4-address mode when creating an interface.
Wireless chip needs support it. (aka AP-to-Sta WDS).
iw dev wlan0 set 4addr on

Add interface to bridge:
brctl addif br0 wlan0

wi-fi wpa_supplicant

0. Генерируем параметры подключения 
wpa_passphrase MYSSID passphrase - генерация подключения к SSID + PASSWORD
--------------------------------
выхлопа:
network={
ssid="MYSSID"
psk="passphrase"
psk=59e0d07fa4c7741797a4e394f38a5c321e3bed51d54ad5fcbd3f84bc7415d73d
}
--------------------------------

1.Создаем файл /etc/wpa_supplicant/example.conf
# wpa_passphrase MYSSID passphrase >> /etc/wpa_supplicant/example.conf
vim /etc/wpa_supplicant/example.conf
------------------------------------
ctrl_interface=/run/wpa_supplicant
eapol_version=1
ap_scan=1
fast_reauth=1


network={
ssid="MYSSID"
psk="passphrase"
psk=59e0d07fa4c7741797a4e394f38a5c321e3bed51d54ad5fcbd3f84bc7415d73d
}
------------------------------------


2. Проверяем что подключение работает
wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/example.conf

3. Если все ок Переименовываем файл example.conf в wpa_supplicant-wlan0.conf
systemctl enable wpa_supplicant@wlan0
systemctl start wpa_supplicant@wlan0

bond средствами systemd

0. Переходим в катало  /etc/systemd/network и создаем файлы конфигурации
cd /etc/systemd/network 


0. создаем устройство bond0 / wi-fi + wired
vim  30-bond0.netdev 
--------------------
[NetDev]
Name=bond0
Kind=bond

[Bond]
Mode=active-backup
PrimaryReselectPolicy=always
MIIMonitorSec=1s
--------------------

1. Настраиваем проводной интерфейс
vim 30-ethernet-bond0.network
----------------------------- 
[Match]
Name=enp2s0

[Network]
Bond=bond0
PrimarySlave=true
----------------------------- 

2. Настраиваем без проводной интерфейс
vim 30-wifi-bond.network 
------------------------
[Match]
#Name=wlan0
MACAddress=d4:1b:81:03:25:03
#MACAddress=MAC_address_of_the_WiFi_card

[Network]
Bond=bond0
------------------------

3. Настраиваем получение IP на bond0
vim 30-bond0.network 
----------------
[Match]
Name=bond0
[Network]
DHCP=ipv4
#Address=10.1.10.9/24
#Gateway=10.1.10.1
#DNS=10.1.10.1
----------------

4. Перезапускаем systemd и проверяем настройки
systemctl restart systemd-networkd.service
networkctl

bond openvswitch / ovs

### !!1 с wi-fi не работает
ovs-vsctl add-br ovsbr1 
ovs-vsctl add-bond ovsbr1 bond0 eth1 eth3
# режим бонада должно уметь оборудование 
ovs-vsctl set port bond0 lacp=active
ovs-vsctl add-bond ovsbr0 bond0 eth1 eth2 bond_mode=active-backup
# info
ovs-appctl bond/show bond0 - показать информацию о bond
ovs-appctl lacp/show bond0 - показать информацию о lacp
ovs-vsctl list port bond0

P.S

Бонидинг средствами systemd работает прекрасно с eth+wifi. (если делать по этой вот статье https://wiki.archlinux.org/title/Systemd-networkd)
Бондинг средствами ovs на виртуальных проводных интерфейсах в виртуальной машине, работает. 
Бондинг средствами systemd на виртуальных проводных интерфейсах в виртуальной машине, работает. 
Если интерфейс bond(созданный с помощью systemd) всунуть в ovs то бондинг не работает. (в случае поломки не переключается на исправный, хотя в инфо показывает что переключение случилось )


Своя генерация linklocal ipv4 / APIPA

APIPA = 169.254.0.0/16


vim /etc/systemd/network/ens6.network
------------------------
[Match]
Name=ens6

[Network]
DHCP=ipv4
LinkLocalAddressing=ipv4
IPv6AcceptRA=no
IPv4LLStartAddress=169.254.55.55

[DHCP]
MaxAttempts=3
RouteMetric=10
ClientIdentifier=mac
------------------------

Что то похожие на APIPA IPV6

vim /etc/systemd/network/ens6.network
-------------------------------------
[Match]
Name=ens6

[Network]
IPv6AcceptRA=no
IPv6PrivacyExtensions=prefer-public

[DHCP]
MaxAttempts=3
RouteMetric=10
ClientIdentifier=mac
-------------------------------------

APIPA IPV4 + IPV6


cat > /etc/systemd/network/50_ens6.network << "EOF"
[Match]
Name=ens6

[Network]
LinkLocalAddressing=yes
IPv4LLStartAddress=169.254.55.55
IPv6AcceptRA=no
IPv6PrivacyExtensions=prefer-public

[DHCP]
MaxAttempts=3
RouteMetric=10
ClientIdentifier=mac

EOF


Виртуальных интерфейсы: tun, tap и dummy

Отличие интерфейсов tun и tap заключается в том, что tap старается больше походить на реальный сетевой интерфейс, а именно он позволяет себе принимать и отправлять ARP запросы, 
обладает MAC адресом и может являться одним из интерфейсов сетевого моста, так как он обладает полной поддержкой ethernet - протокола канального уровня (уровень 2).
Интерфейс tun этой поддержки лишен, поэтому он может принимать и отправлять только IP пакеты и никак не ethernet кадры.
Он не обладает MAC-адресом и не может быть добавлен в бридж. 
Зато он более легкий и быстрый за счет отсутствия дополнительной инкапсуляции и прекрасно подходит для тестирования сетевого стека или построения виртуальных частных сетей (VPN). 
Виртуальный интерфейс типа dummy очень похож на tap, разница лишь в том, что он реализуется другим модулем ядра.

Создаем интерфейс типа tun вручную и на время(жить будет до перезагрузки):
ip tuntap add dev tun0 mode tun
ip address add 10.0.0.1/30 dev tun0
ip address show tun0
!!! Внимание tun интерфейс невозможно добавить в бриджи (так как он не имеет MAC)
Собственно при попытки добавить tun в бридж будет ошибка:
ip link set dev tun0 master br0
RTNETLINK answers: Invalid argument


Создаем интерфейс типа tap вручную и на время(жить будет до перезагрузки):
ip tuntap add dev tap0 mode tap
ip address add 10.0.0.5/30 dev tap0
ip address show tap0
В бридж tap добавляется без проблем:
ip link set dev tap0 master br0

Создаем интерфейс типа dumm вручную и на время(жить будет до перезагрузки):
ip link add dev dum0 type dummy
ip address add 10.0.0.7/30 dev dum0
ip address show dum0
В бридж dumm добавляется без проблем:
ip link set dev dum0 master br0


Примеры конфигов для systemd:
TUN:
vim /etc/systemd/network/tun0.netdev
------------------------------------
[NetDev]
Name=tun0
Kind=tun
------------------------------------

vim /etc/systemd/network/tun0.netdev
------------------------------------
[Match]
Name=tun0
[Network]
Address=10.0.0.1/30
------------------------------------

TAP:
vim /etc/systemd/network/tap0.netdev
------------------------------------
[NetDev]
Name=tap0
Kind=tap
------------------------------------
vim /etc/systemd/network/tap0.network
-------------------------------------
[Match]
Name=tap0
[Network]
Address=10.0.0.5/30
-------------------------------------

DUMMY:
vim /etc/systemd/network/dum0.netdev
------------------------------------
[NetDev]
Name=dum0
Kind=dummy
------------------------------------
vim /etc/systemd/network/dum0.network
-------------------------------------
[Match]
Name=dum0
[Network]
Address=10.0.0.7/30
-------------------------------------


P.S.
Стоит отметить, что если вы планируете маршрутизировать траффик через виртуальные интерфейсы 
( а, используя их для цели создания виртуальных частных сетей (VPN), вы точно этого хотите), 
то в конфигурационный файл в секции "Network" следует добавить диррективу "IPForward=yes".

B.A.T.M.A.N

cat /etc/systemd/network# cat 10_fm1-mac10.network
[Match]
Name=fm1-mac10

[Network]
BatmanAdvanced=bat0

cat /etc/systemd/network# cat 20_wlP2p1s0f1.network
[Match]
Name=wlP2p1s0f1

[Network]
BatmanAdvanced=bat0

cat /etc/systemd/network# cat bat0.netdev 
[NetDev]
Name=bat0
Kind=batadv

[BatmanAdvanced]
GatewayMode=server
RoutingAlgorithm=batman-v
OriginatorIntervalSec=5

Примеры конфигов batman-adv / bridge / vlan


cat  > /etc/systemd/network/ens4.network << "EOF"
[Match]
Name=ens4

[Network]
Bridge=br0
EOF

cat  > /etc/systemd/network/ens5.network << "EOF"
[Match]
Name=ens5

[Network]
BatmanAdvanced=bat0
EOF


cat  > /etc/systemd/network/ens6.network << "EOF"
[Match]
Name=ens6

[Network]
BatmanAdvanced=bat0
EOF


cat >  /etc/systemd/network/bat0.netdev << "EOF"
[NetDev]
Name=bat0
Kind=batadv

[BatmanAdvanced]
#GatewayMode=server
RoutingAlgorithm=batman-v
OriginatorIntervalSec=5
EOF

cat  > /etc/systemd/network/bat0.network << "EOF"
[Match]
Name=bat0

[Network]
Address=10.0.0.12/24
Bridge=br0
EOF


cat > /etc/systemd/network/br0.netdev << "EOF"
[NetDev]
Name=br0
Kind=bridge
EOF




br0 / mac / tap

Без ovs на brctl будет так выглядеть

cat  > /etc/systemd/network/tap0.network << "EOF"
[Match]
Name=tap0
 
[Network]
Bridge=br0
EOF
 
cat  > /etc/systemd/network/tap1.network << "EOF"
[Match]
Name=tap1
 
[Network]
Bridge=br0
EOF

cat  > /etc/systemd/network/ens3.network << "EOF"
[Match]
Name=ens3
 
[Network]
Bridge=br0
EOF


cat > /etc/systemd/network/br0.netdev << "EOF"
[NetDev]
Name=br0
Kind=bridge
EOF



для смены маков вот так вот
cat > /etc/systemd/network/40-tap0.link << "EOF"
[Match]
OriginalName=tap0

[Link]
Name=tap0
MACAddress=02:DB:32:8F:B1:02
EOF


Ну а остальные ip можно доверить на br развесить netplan
Ну или запилить дальше в systemd



cat > /etc/systemd/network/br0.network << "EOF"
[Match]
Name=br0
[Network]
Address=10.0.0.5/30
Address=10.0.1.10/24
EOF






MTU + br0

cat 10-fm1-mac10.network
------------------------
[Match]
Name=fm1-mac10
[Network]
Bridge=br0
[Link]
MTUBytes=4000
------------------------

MTU + br0 + speed

https://www.freedesktop.org/software/systemd/man/latest/systemd.link.html#BitsPerSecond=

cat 10-fm1-mac10.network
------------------------
[Match]
Name=fm1-mac10
[Network]
Bridge=br0
[Link]
MTUBytes=4000
AutoNegotiation=yes
Advertise=10baset-full
Advertise=100baset-half
Advertise=1000baset-full
Advertise=10000baset-full
Advertise=100000basedr-full
------------------------



/etc/systemd/network/10-enp9s0.link
-----------------------------------
[Match]
Name=enp9s0

[Link]
AutoNegotiation=no
Speed=100Mbps
Duplex=full
-----------------------------------

Пример демона для снижения скорости:

.0 
/etc/systemd/system/ethtool-enp9s0.service
------------------------------------------
[Unit]
Description=Configure enp9s0 speed and duplex
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/sbin/ethtool -s enp9s0 speed 100 duplex full autoneg off

[Install]
WantedBy=multi-user.target
------------------------------------------

1.
sudo systemctl daemon-reload
sudo systemctl enable ethtool-enp9s0.service
sudo systemctl start ethtool-enp9s0.service
sudo systemctl status ethtool-enp9s0.service

Пример с файлом /etc/network/interfaces

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

# Loopback network interface
auto lo
iface lo inet loopback

# Primary network interface
auto enp9s0
iface enp9s0 inet dhcp
    up /sbin/ethtool -s enp9s0 speed 100 duplex full autoneg off
/etc/network/interfaces
-----------------------