So kann die IPv4 Konfiguration auf Hetzner VMs aussehen:
[Match]
Name=e*
Type=ether
[Network]
DHCP=ipv4
Diese Datei will ich jetzt um die IPv6 Konfiguration ergänzen. Auf VMs von Hetzner liegt folgende Datei:
{
"base64_encoded_keys": [
"merged_cfg/random_seed/data"
],
"ds": {
"_doc": "EXPERIMENTAL: The structure and format of content scoped under the 'ds' key may change in subsequent releases of cloud-init.",
"meta_data": {
"instance-id": xxxxxx,
"local-hostname": "xxxxxxx",
"network-config": {
"config": [
{
"mac_address": "aa:bb:cc:dd:ee:ff",
"name": "eth0",
"subnets": [
{
"dns_nameservers": [
"213.133.99.99",
"213.133.98.98",
"213.133.100.100"
],
"ipv4": true,
"type": "dhcp"
},
{
"address": "2a01:4f8:xxxx:xxxx::1/64",
"gateway": "fe80::1",
"ipv6": true,
"type": "static"
}
],
"type": "physical"
}
],
"version": 1
},
…
Da möchte ich die für systemd-networkd relevanten Daten raus extrahieren und IPv6 Adresse sowie Gateway an die /etc/systemd/network/eth0.network anhängen:
jq -r '.ds.meta_data."network-config".config[].subnets[] | select(.ipv6 == true) | "Address=\(.address)\nGateway=\(.gateway)"' /run/cloud-init/instance-data.json >> /run/cloud-init/instance-data.json >> /etc/systemd/network/eth0.network