239 lines
5.6 KiB
Markdown
239 lines
5.6 KiB
Markdown
Ansible Role: systemd\_networkd
|
|
===============================
|
|
|
|
Ansible role to configure systemd-networkd.
|
|
|
|
Role Variables
|
|
--------------
|
|
|
|
```yaml
|
|
# links
|
|
systemd_networkd_link: {}
|
|
|
|
# netdevs
|
|
systemd_networkd_netdev: {}
|
|
|
|
# networks
|
|
systemd_networkd_network: {}
|
|
|
|
# does the role have to restart systemd-networkd to apply the new configuration?
|
|
systemd_networkd_apply_config: false
|
|
|
|
# enable or not systemd_resolved
|
|
systemd_networkd_enable_resolved: true
|
|
|
|
# remove configuration files matching a prefix
|
|
systemd_networkd_cleanup: false
|
|
systemd_networkd_cleanup_prefix: ''
|
|
systemd_networkd_cleanup_prefix_is_regex: false
|
|
```
|
|
|
|
Dependencies
|
|
------------
|
|
|
|
None
|
|
|
|
Example Playbook
|
|
-------------------------
|
|
|
|
1) Configure a network interface
|
|
|
|
```yaml
|
|
systemd_networkd_network:
|
|
eth0:
|
|
- Match:
|
|
- Name: "eth0"
|
|
- Network:
|
|
- DHCP: "no"
|
|
- IPv6AcceptRouterAdvertisements: "no"
|
|
- DNS: 8.8.8.8
|
|
- DNS: 8.8.4.4
|
|
- Domains: "your.tld"
|
|
|
|
- Address: "192.0.2.176/24"
|
|
- Gateway: "192.0.2.1"
|
|
|
|
- Address: "2001:db8::302/64"
|
|
- Address: "fc00:0:0:103::302/64"
|
|
- Gateway: "2001:db8::1"
|
|
```
|
|
|
|
It will create a `eth0.network` file in `/etc/systemd/network/`, and enable
|
|
`systemd-networkd` and `systemd-resolved`.
|
|
|
|
Every key under `systemd_networkd_*` corresponds to the file name to create
|
|
(`.network` in `systemd_networkd_network`, `.link` in systemd_networkd_link,
|
|
etc…). Then every key under the file name is a section documented in
|
|
systemd-networkd, which contains the couples of `option: value` pairs. Each
|
|
couple is then converted to the format `option=value`.
|
|
|
|
2) Configure a bonding interface
|
|
|
|
```yaml
|
|
systemd_networkd_netdev:
|
|
bond0:
|
|
- NetDev:
|
|
- Name: "bond0"
|
|
- Kind: "bond"
|
|
- Bond:
|
|
- Mode: "802.3ad"
|
|
- LACPTransmitRate: "fast"
|
|
|
|
systemd_networkd_network:
|
|
bond0:
|
|
- Match:
|
|
- Name: "eth*"
|
|
- Network:
|
|
- DHCP: "yes"
|
|
- Bond: "bond0"
|
|
```
|
|
|
|
What will create an LACP bond interface `bond0`, containing all interfaces
|
|
starting by `eth`.
|
|
|
|
3) Configure interface based routing
|
|
|
|
```yaml
|
|
systemd_networkd_conf:
|
|
route_tables:
|
|
- Network:
|
|
- RouteTable: "rtvlan10:10"
|
|
- RouteTable: "rtvlan11:11"
|
|
|
|
systemd_networkd_netdev:
|
|
netdev_bond0:
|
|
- NetDev:
|
|
- Name: bond0
|
|
- Kind: bond
|
|
|
|
- Bond:
|
|
- Mode: active-backup
|
|
- MIIMonitorSec: 0.1
|
|
- UpDelaySec: 0.2
|
|
- DownDelaySec: 0.2
|
|
- LACPTransmitRate: fast
|
|
- TransmitHashPolicy: layer2+3
|
|
|
|
netdev_vlan10:
|
|
- NetDev:
|
|
- Name: netdev_vlan10
|
|
- Kind: vlan
|
|
- VLAN:
|
|
- Id: 10
|
|
|
|
netdev_vlan11:
|
|
- NetDev:
|
|
- Name: netdev_vlan11
|
|
- Kind: vlan
|
|
- VLAN:
|
|
- Id: 11
|
|
|
|
netdev_bridge_vm_vlan10:
|
|
- NetDev:
|
|
- Name: netdev_bridge_vlan10
|
|
- Kind: bridge
|
|
|
|
netdev_bridge_vm_vlan11:
|
|
- NetDev:
|
|
- Name: netdev_bridge_vlan11
|
|
- Kind: bridge
|
|
|
|
systemd_networkd_network:
|
|
# Physical interfaces
|
|
eno3:
|
|
- Match:
|
|
- Name: eno3
|
|
- Network:
|
|
- Bond: bond0
|
|
eno4:
|
|
- Match:
|
|
- Name: eno4
|
|
- Network:
|
|
- Bond: bond0
|
|
|
|
bond0:
|
|
- Match:
|
|
- Name: bond0
|
|
- Network:
|
|
- Description: "Static/Unconfigured bond, for eno3 & eno4"
|
|
|
|
# We don't want any IP "on" the bond itself
|
|
- LinkLocalAddressing: "no"
|
|
- LLDP: "no"
|
|
- EmitLLDP: "no"
|
|
- IPv6AcceptRA: "no"
|
|
- IPv6SendRA: "no"
|
|
|
|
- VLAN: netdev_vlan10
|
|
- VLAN: netdev_vlan11
|
|
|
|
network_interface_vlan10:
|
|
- Match:
|
|
- Name: netdev_vlan10
|
|
- Type: vlan
|
|
- Network:
|
|
- Description: "Network interface on vlan10, connected to netdev_bridge_vm_vlan10"
|
|
- Bridge: "netdev_bridge_vm_vlan10"
|
|
- DHCP: "no"
|
|
- DNS: &gw_vlan10 "10.0.10.1"
|
|
|
|
- Address: "10.0.10.161/24"
|
|
- DNS: *gw_vlan10
|
|
- Gateway: *gw_vlan10
|
|
|
|
network_interface_vlan11:
|
|
- Match:
|
|
- Name: netdev_vlan11
|
|
- Type: vlan
|
|
- Network:
|
|
- Description: "Network interface on vlan11, connected to netdev_bridge_vm_vlan11"
|
|
- Bridge: "netdev_bridge_vm_vlan11"
|
|
- DHCP: "no"
|
|
- DNS: &gw_vlan11 "10.0.11.1"
|
|
|
|
- Address: "10.0.11.161/24"
|
|
- DNS: *gw_vlan11
|
|
- Gateway: *gw_vlan11
|
|
|
|
systemd_networkd_rt_tables:
|
|
- id: 11
|
|
name: rtvlan11
|
|
- id: 20
|
|
name: rtvlan20
|
|
```
|
|
|
|
systemd-resolved
|
|
----------------
|
|
|
|
By default this role manages `/etc/resolv.conf` and `/etc/nsswitch.conf` to use
|
|
the DNS stub resolver and NSS modules provided by `systemd-resolved`.
|
|
|
|
This behaviour can either be disabled by setting
|
|
`systemd_networkd_symlink_resolv_conf` and
|
|
`systemd_networkd_manage_nsswitch_config` to `false` or the resolution order can
|
|
be changed. The default configuration uses the default `files` database and
|
|
systemd modules where approriate:
|
|
|
|
```yaml
|
|
systemd_networkd_nsswitch_passwd: "files systemd"
|
|
systemd_networkd_nsswitch_group: "files systemd"
|
|
systemd_networkd_nsswitch_shadow: "files systemd"
|
|
systemd_networkd_nsswitch_gshadow: "files systemd"
|
|
systemd_networkd_nsswitch_hosts: "files resolve [!UNAVAIL=return] myhostname dns"
|
|
systemd_networkd_nsswitch_networks: "files dns"
|
|
systemd_networkd_nsswitch_protocols: "files"
|
|
systemd_networkd_nsswitch_services: "files"
|
|
systemd_networkd_nsswitch_ethers: "files"
|
|
systemd_networkd_nsswitch_rpc: "files"
|
|
systemd_networkd_nsswitch_netgroup: "nis"
|
|
systemd_networkd_nsswitch_automount: "files"
|
|
systemd_networkd_nsswitch_aliases: "files"
|
|
systemd_networkd_nsswitch_publickey: "files"
|
|
```
|
|
|
|
License
|
|
-------
|
|
|
|
Tool under the BSD license. Do not hesitate to report bugs, ask me some
|
|
questions or do some pull request if you want to!
|