summaryrefslogtreecommitdiffstats
path: root/doc/examples/kea4/shared-network.json
blob: 9f38ee8c87f07da868e30d56ab37e4765042d4d1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
// This is an example configuration file for DHCPv4 server in Kea.
// It demonstrates an advanced feature called shared network. Typically, for
// each physical link there is one IPv4 subnet that the server is expected
// to manage. However, in some cases there is a need to configure more subnets
// in the same physical location. The most common use case is an existing
// subnet that grew past its original assumptions and ran out of addresses,
// so the sysadmin needs to add another subnet on top of existing one.
{
    "Dhcp4": {

        // As with any other configuration, you need to tell Kea the interface
        // names, so it would listen to incoming traffic.
        "interfaces-config": {
            "interfaces": [ "eth0" ]
        },

        // You also need to tell where to store lease information.
        // memfile is the backend that is easiest to set up.
        "lease-database": {
            "type": "memfile",
            "lfc-interval": 3600
        },

        // The shared networks definition starts here. shared-networks can
        // contain a list of shared networks. There are many parameters
        // that can be specified here, so this example may be overwhelming
        // at first, but the only mandatory parameter for each shared
        // network is name. It must be unique. Typically, each shared
        // network also needs to have at least two subnets to be functional,
        // but if you really want to, you can define a degraded shared
        // network that has 1 or even 0 subnets. This may come in handy
        // when migrating between regular subnets and shared networks
        // or when debugging a problem. It is not recommended to use
        // 1 subnet per shared network, as there is extra processing
        // overhead for shared networks.
        "shared-networks": [
        {
            // Name of the shared network. It may be an arbitrary string
            // and it must be unique among all shared networks.
            "name": "frog",

            // You may specify interface name if the shared network is
            // reachable directly from the server.
            "interface": "eth1",

            // You can specify many parameters that are allowed in subnet scope
            // here. It's useful to put them here if they apply to all subnets
            // in this shared network. It's likely that the most common
            // parameter here will be option values defined with option-data.
            "match-client-id": false,
            "option-data": [ ],
            "rebind-timer": 150,
            "authoritative": true,

            // If all the traffic coming from that shared network is reachable
            // via relay and that relay always use the same IP address, you
            // can specify that relay address here. Since this example shows
            // a shared network reachable directly, we put 0.0.0.0 here.
            // It would be better to skip the relay scope altogether, but
            // it was left here for demonstration purposes.
            "relay": {
                "ip-address": "0.0.0.0"
            },

            // Timer values can be overridden here.
            "renew-timer": 100,

            // "reservation-mode": "all",
            // It is replaced by the "reservations-global",
            // "reservations-in-subnet" and "reservations-out-of-pool"
            // parameters.

            // Specify if server should lookup global reservations.
            "reservations-global": false,

            // Specify if server should lookup in-subnet reservations.
            "reservations-in-subnet": true,

            // Specify if server can assume that all reserved addresses
            // are out-of-pool.
            // Ignored when reservations-in-subnet is false.
            // If specified, it is inherited by "subnet4" levels.
            "reservations-out-of-pool": false,

            // This starts a list of subnets allowed in this shared network.
            // In our example, there are two subnets.
            "subnet4": [
                {
                    "id": 1,
                    "match-client-id": true,
                    "next-server": "0.0.0.0",
                    "server-hostname": "",
                    "boot-file-name": "",
                    "option-data": [ ],
                    "pools": [ ],
                    "rebind-timer": 20,

                    // You can override the value inherited from shared-network
                    // here if your relay uses different IP addresses for
                    // each subnet.
                    "relay": {
                        "ip-address": "0.0.0.0"
                    },
                    "renew-timer": 10,
                    // "reservation-mode": "all",
                    // It is replaced by the "reservations-global",
                    // "reservations-in-subnet" and "reservations-out-of-pool"
                    // parameters.
                    // Specify if server should lookup global reservations.
                    "reservations-global": false,
                    // Specify if server should lookup in-subnet reservations.
                    "reservations-in-subnet": true,
                    // Specify if server can assume that all reserved addresses
                    // are out-of-pool.
                    // Ignored when reservations-in-subnet is false.
                    "reservations-out-of-pool": false,
                    "subnet": "10.0.0.0/8",
                    "valid-lifetime": 30
                },
                {
                    "id": 2,
                    "match-client-id": true,
                    "next-server": "0.0.0.0",
                    "server-hostname": "",
                    "boot-file-name": "",
                    "option-data": [ ],
                    "pools": [ ],
                    "rebind-timer": 20,
                    "renew-timer": 10,
                    // "reservation-mode": "all",
                    // It is replaced by the "reservations-global",
                    // "reservations-in-subnet" and "reservations-out-of-pool"
                    // parameters.
                    // Specify if server should lookup global reservations.
                    "reservations-global": false,
                    // Specify if server should lookup in-subnet reservations.
                    "reservations-in-subnet": true,
                    // Specify if server can assume that all reserved addresses
                    // are out-of-pool.
                    // Ignored when reservations-in-subnet is false.
                    "reservations-out-of-pool": false,
                    "subnet": "192.0.2.0/24",
                    "valid-lifetime": 30
                }
            ],
            "valid-lifetime": 200
        } ], // end of shared-networks

        // It is likely that in your network you'll have a mix of regular,
        // "plain" subnets and shared networks. It is perfectly valid to mix
        // them in the same config file.
        //
        // This is regular subnet. It's not part of any shared-network.
        "subnet4": [
            {
                "pools": [ { "pool":  "192.0.3.1 - 192.0.3.200" } ],
                "subnet": "192.0.3.0/24",
                "interface": "eth0",
                "id": 3
            }
        ]

    } // end of Dhcp4
}