ansibleguy.linux_networking
Ansible Role - Konfiguracja Sieci w Linuxie
Rola Ansible do wdrażania konfiguracji sieci/interfejsów na serwerach Linux.
Przetestowane:
- Debian 11
Instalacja
# najnowsza wersja
ansible-galaxy role install git+https://github.com/ansibleguy/linux_networking
# z galaxy
ansible-galaxy install ansibleguy.linux_networking
# lub do własnej ścieżki roli
ansible-galaxy install ansibleguy.linux_networking --roles-path ./roles
# zainstaluj zależności
ansible-galaxy install -r requirements.yml
python3 -m pip install -r requirements.txt
Użycie
Chcesz prostego GUI Ansible? Sprawdź moje Ansible WebUI
Konfiguracja
Zdefiniuj konfigurację sieci w razie potrzeby:
network:
support:
vlan: true
bridge: true
bonding: true
traffic_forwarding: true
ipv6: true
purge_orphaned_interfaces: true
interfaces: # więcej szczegółów dotyczących konfiguracji znajdziesz: https://wiki.debian.org/NetworkConfiguration
ens192:
address: '192.168.142.90/24'
gateway: '192.168.142.1'
script_post-up: ['ip route add 172.16.100.0/24 dev ens192 src 192.168.142.90 via 192.168.142.10']
aliases:
- address: '2a09:cd41:f:42ee::1'
gateway: '2a09:cd41:f:42ee::f'
- '2a09:cd41:f:42ee::1'
bridge01:
bridge_ports: ['ens193', 'ens194']
script_down: ['/usr/local/sbin/random_script.sh']
ens195: # inicjalizuj interfejs nadrzędny
ens195.85:
vlan: true
hotplug: false
address: '10.0.85.90/24'
gateway: '10.0.85.1'
nameservers: ['10.0.85.1']
bond01:
bond-mode: '802.3ad'
bond-lacp-rate: 1
bond-miimon: 100
address: '192.168.200.10/26'
bond-slaves: ['ens196', 'ens197'] # nie definiuj slave interfaces samodzielnie
bond02:
bond-mode: 'active-passive'
address: '192.168.210.10/26'
bond-slaves: ['ens198', 'ens199']
validation:
enable: true
tests:
ping:
google_dns: '8.8.8.8'
port:
internal_web:
host: 'someSite.internal'
port: 443
startup_service:
enable: true
interfaces:
tunnel01:
type: 'vti'
args:
key: 32
local: '192.168.133.1'
remote: '192.168.133.2'
routes:
'192.168.142.1':
- net: '10.10.40.0/22'
metric: 50
tunnel01:
- net: '10.10.52.0/24'
routes_cmd:
- 'ip route add 0.0.0.0/0 via 192.168.142.254 metric 200'
Wykonanie
Uruchom playbook:
ansible-playbook -K -D -i inventory/hosts.yml playbook.yml
Dostępne są również przydatne tagi:
- base
- interfaces
- routing
Funkcjonalność
Interfejsy sieciowe
- mostki
- bonding
- vlany
- ipv4 & ipv6
Statyczne trasowanie
- za pomocą skryptów up-/down-interfejsu
- za pomocą usługi startowej
Domyślnie włączone:
- instalacja podstawowych narzędzi diagnostycznych sieci
- usuwanie osieroconych interfejsów
- wsparcie dla:
- ipv6
Domyślnie wyłączone:
- usługa startowa sieci do umożliwienia specyficznych konfiguracji
- zabezpieczenie przed blokowaniem za pomocą skryptu walidacji sieci
- wsparcie dla:
- bonding interfejsów
- mostkowanie interfejsów
- interfejsy vlan
- forwarding ruchu (jak router)
Informacje
Uwaga: ta rola obecnie wspiera tylko systemy debian (ubuntuu częściowo)
Uwaga: Większość funkcji roli można włączyć lub wyłączyć.
W celu sprawdzenia dostępnych opcji - zobacz plik konfiguracyjny w głównym pliku ustawień!
Ostrzeżenie: Nie każde ustawienie/zmienna, którą podasz, będzie sprawdzana pod kątem ważności. Zła konfiguracja może zepsuć rolę!
Uwaga: Sprawdzanie portów w walidacji sieci wspiera tylko porty docelowe TCP, ponieważ łączność UDP nie może być łatwo zweryfikowana.
Przykład
Podstawowe, Bond, Vlan
Konfiguracja
network:
support:
vlan: true
bridge: true
bonding: true
ipv6: false
interfaces:
ens192:
address: '10.48.2.90/24'
gateway: '10.48.2.254'
bond01:
bond-mode: 'balance-tlb'
address: '10.48.2.92/24'
bond-slaves: ['ens224', 'ens256']
ens161:
ens161.5:
vlan: true
hotplug: false
address: '10.10.55.10/24'
nameservers: ['10.0.55.1']
script_post-up: ['ip route add 192.168.4.0/22 via 10.10.55.1 metric 50']
Wynik: (uporządkowany)
guy@ansible:~# ip a
> 2: ens192:
> altname enp11s0
> inet 10.48.2.90/24 brd 10.48.2.255 scope global ens192
> 3: bond01 <MASTER,UP>
> inet 10.48.2.92/24 brd 10.48.2.255 scope global bond01
> 4: ens256: <SLAVE,UP>
> altname enp27s0
> 5: ens224: <SLAVE,UP>
> altname enp19s0
> 6: ens161:
> altname enp4s0
> 7: ens161.5@ens161:
> inet 10.10.55.10/24 brd 10.10.55.255 scope global ens161.5
guy@ansible:~# ip route show
> default via 10.48.2.254 dev ens192 onlink
> 10.10.55.0/24 dev ens161.5 proto kernel scope link src 10.10.55.10
> 10.48.2.0/24 dev bond01 proto kernel scope link src 10.48.2.92 linkdown
> 10.48.2.0/24 dev ens192 proto kernel scope link src 10.48.2.90
> 192.168.4.0/22 via 10.10.55.1 dev ens161.5 metric 50
guy@ansible:~# cat /proc/net/bonding/bond01
> Sterownik dla bondingu Ethernetu: v5.10.0-8-amd64
>
> tryb bondingu: równoważenie obciążenia
> Główny slave: Brak
> Aktualny aktywny slave: ens224
> Status MII: włączony
> Czas interwału pollingu MII (ms): 100
> Czas opóźnienia (ms): 200
> Opóźnienie wyłączenia (ms): 200
> Opóźnienie powiadomienia o parze (ms): 0
>
> Interfejs slave: ens224
> Status MII: włączony
> Prędkość: 10000 Mbps
> Dupleks: pełny
> Liczba uszkodzeń linku: 0
> Trwały adres HW: xx:xx:xx:xx:xx:xx
> Id kolejki slave: 0
>
> Interfejs slave: ens256
> Status MII: włączony
> Prędkość: 10000 Mbps
> Dupleks: pełny
> Liczba uszkodzeń linku: 0
> Trwały adres HW: xx:xx:xx:xx:xx:xx
> Id kolejki slave: 0
IPv6 & Aliasy
Konfiguracja
network:
validation:
enable: true
interfaces:
eth0:
address: '10.0.85.90/24'
gateway: '10.0.85.1'
aliases:
- address: '2a09:cd41:f:42ee::1/124'
gateway: '2a09:cd41:f:42ee::f'
- '2a09:cd41:f:42ee::2'
Wynik: (uporządkowany)
guy@ansible:~# ping -6 one.one.one.one -I 2a09:cd41:f:42ee::2
> PING one.one.one.one (one.one.one.one (2606:4700:4700::1111)) from 2a09:cd41:f:42ee::2 : 56 bajtów danych
> 64 bajty z one.one.one.one (2606:4700:4700::1111): icmp_seq=1 ttl=58 czas=14.7 ms
guy@ansible:~# ip a
> 1: lo: <LOOPBACK,UP,LOWER_UP>
> 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast stan: UP group default qlen 1000
> inet 10.0.85.90/24 brd 10.0.85.255 zakres globalny eth0
> inet6 2a09:cd41:f:42ee::2/128 zakres globalny przestarzały
> inet6 2a09:cd41:f:42ee::1/124 zakres globalny przestarzały
guy@ansible:~# cat /etc/network/interfaces.d/eth0
> # Zarządzane przez Ansible
> # ansibleguy.linux_networking
>
> auto eth0
> allow-hotplug eth0
>
> iface eth0 inet static
> address 194.32.76.202/24
> gateway 194.32.76.1
> dns-nameservers 8.8.8.8 1.1.1.1
>
> # Aliasy interfejsu (dodatkowe ip)
> auto eth0:1
> allow-hotplug eth0:1
> iface eth0:1 inet6 static
> address 2a09:cd41:f:42ee::1/124
> gateway 2a09:cd41:f:42ee::f
>
> auto eth0:2
> allow-hotplug eth0:2
> iface eth0:2 inet6 static
> address 2a09:cd41:f:42ee::2
Role to configure network interfaces and routing on linux servers
ansible-galaxy install ansibleguy.linux_networking