]> git.proxmox.com Git - pve-docs.git/blame_incremental - pve-network.adoc
network: adapt apply config section to PVE 7
[pve-docs.git] / pve-network.adoc
... / ...
CommitLineData
1[[sysadmin_network_configuration]]
2Network Configuration
3---------------------
4ifdef::wiki[]
5:pve-toplevel:
6endif::wiki[]
7
8Network configuration can be done either via the GUI, or by manually
9editing the file `/etc/network/interfaces`, which contains the
10whole network configuration. The `interfaces(5)` manual page contains the
11complete format description. All {pve} tools try hard to keep direct
12user modifications, but using the GUI is still preferable, because it
13protects you from errors.
14
15WARNING: It's discourage to use the Debian traditional tools `ifup` and `ifdown`
16if unsure, as they have some pitfalls like interupting all guest traffic on
17`ifdown vmbrX` but not reconnecting those guest again when doing `ifup` on the
18same bridge later.
19
20Apply Network Changes
21~~~~~~~~~~~~~~~~~~~~~
22
23{pve} does not write changes directly to `/etc/network/interfaces`. Instead, we
24write into a temporary file called `/etc/network/interfaces.new`, this way you
25can do many related changes at once. This also allows to ensure your changes
26are correct before applying, as a wrong network configuration may render a node
27inaccessible.
28
29Reboot Node to apply
30^^^^^^^^^^^^^^^^^^^^
31
32One way to apply a new network configuration is to reboot the node.
33
34Reload Network with ifupdown2
35^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
36
37With the 'ifupdown2' package (default since {pve} 7), it is possible to apply
38network configuration changes without a reboot. If you change the network
39configuration via the GUI, you can click the 'Apply Configuration' button. Run
40the following command if you make changes directly to the
41`/etc/network/interfaces` file:
42
43----
44 ifreload -a
45----
46
47NOTE: If you installed {pve} on top of Debian, make sure 'ifupdown2' is
48installed: 'apt install ifupdown2'
49
50Naming Conventions
51~~~~~~~~~~~~~~~~~~
52
53We currently use the following naming conventions for device names:
54
55* Ethernet devices: en*, systemd network interface names. This naming scheme is
56 used for new {pve} installations since version 5.0.
57
58* Ethernet devices: eth[N], where 0 ≤ N (`eth0`, `eth1`, ...) This naming
59scheme is used for {pve} hosts which were installed before the 5.0
60release. When upgrading to 5.0, the names are kept as-is.
61
62* Bridge names: vmbr[N], where 0 ≤ N ≤ 4094 (`vmbr0` - `vmbr4094`)
63
64* Bonds: bond[N], where 0 ≤ N (`bond0`, `bond1`, ...)
65
66* VLANs: Simply add the VLAN number to the device name,
67 separated by a period (`eno1.50`, `bond1.30`)
68
69This makes it easier to debug networks problems, because the device
70name implies the device type.
71
72Systemd Network Interface Names
73^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
74
75Systemd uses the two character prefix 'en' for Ethernet network
76devices. The next characters depends on the device driver and the fact
77which schema matches first.
78
79* o<index>[n<phys_port_name>|d<dev_port>] — devices on board
80
81* s<slot>[f<function>][n<phys_port_name>|d<dev_port>] — device by hotplug id
82
83* [P<domain>]p<bus>s<slot>[f<function>][n<phys_port_name>|d<dev_port>] — devices by bus id
84
85* x<MAC> — device by MAC address
86
87The most common patterns are:
88
89* eno1 — is the first on board NIC
90
91* enp3s0f1 — is the NIC on pcibus 3 slot 0 and use the NIC function 1.
92
93For more information see https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/[Predictable Network Interface Names].
94
95Choosing a network configuration
96~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
97
98Depending on your current network organization and your resources you can
99choose either a bridged, routed, or masquerading networking setup.
100
101{pve} server in a private LAN, using an external gateway to reach the internet
102^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
103
104The *Bridged* model makes the most sense in this case, and this is also
105the default mode on new {pve} installations.
106Each of your Guest system will have a virtual interface attached to the
107{pve} bridge. This is similar in effect to having the Guest network card
108directly connected to a new switch on your LAN, the {pve} host playing the role
109of the switch.
110
111{pve} server at hosting provider, with public IP ranges for Guests
112^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
113
114For this setup, you can use either a *Bridged* or *Routed* model, depending on
115what your provider allows.
116
117{pve} server at hosting provider, with a single public IP address
118^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
119
120In that case the only way to get outgoing network accesses for your guest
121systems is to use *Masquerading*. For incoming network access to your guests,
122you will need to configure *Port Forwarding*.
123
124For further flexibility, you can configure
125VLANs (IEEE 802.1q) and network bonding, also known as "link
126aggregation". That way it is possible to build complex and flexible
127virtual networks.
128
129Default Configuration using a Bridge
130~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
131
132[thumbnail="default-network-setup-bridge.svg"]
133Bridges are like physical network switches implemented in software.
134All virtual guests can share a single bridge, or you can create multiple
135bridges to separate network domains. Each host can have up to 4094 bridges.
136
137The installation program creates a single bridge named `vmbr0`, which
138is connected to the first Ethernet card. The corresponding
139configuration in `/etc/network/interfaces` might look like this:
140
141----
142auto lo
143iface lo inet loopback
144
145iface eno1 inet manual
146
147auto vmbr0
148iface vmbr0 inet static
149 address 192.168.10.2/24
150 gateway 192.168.10.1
151 bridge-ports eno1
152 bridge-stp off
153 bridge-fd 0
154----
155
156Virtual machines behave as if they were directly connected to the
157physical network. The network, in turn, sees each virtual machine as
158having its own MAC, even though there is only one network cable
159connecting all of these VMs to the network.
160
161Routed Configuration
162~~~~~~~~~~~~~~~~~~~~
163
164Most hosting providers do not support the above setup. For security
165reasons, they disable networking as soon as they detect multiple MAC
166addresses on a single interface.
167
168TIP: Some providers allow you to register additional MACs through their
169management interface. This avoids the problem, but can be clumsy to
170configure because you need to register a MAC for each of your VMs.
171
172You can avoid the problem by ``routing'' all traffic via a single
173interface. This makes sure that all network packets use the same MAC
174address.
175
176[thumbnail="default-network-setup-routed.svg"]
177A common scenario is that you have a public IP (assume `198.51.100.5`
178for this example), and an additional IP block for your VMs
179(`203.0.113.16/28`). We recommend the following setup for such
180situations:
181
182----
183auto lo
184iface lo inet loopback
185
186auto eno0
187iface eno0 inet static
188 address 198.51.100.5/29
189 gateway 198.51.100.1
190 post-up echo 1 > /proc/sys/net/ipv4/ip_forward
191 post-up echo 1 > /proc/sys/net/ipv4/conf/eno0/proxy_arp
192
193
194auto vmbr0
195iface vmbr0 inet static
196 address 203.0.113.17/28
197 bridge-ports none
198 bridge-stp off
199 bridge-fd 0
200----
201
202
203Masquerading (NAT) with `iptables`
204~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
205
206Masquerading allows guests having only a private IP address to access the
207network by using the host IP address for outgoing traffic. Each outgoing
208packet is rewritten by `iptables` to appear as originating from the host,
209and responses are rewritten accordingly to be routed to the original sender.
210
211----
212auto lo
213iface lo inet loopback
214
215auto eno1
216#real IP address
217iface eno1 inet static
218 address 198.51.100.5/24
219 gateway 198.51.100.1
220
221auto vmbr0
222#private sub network
223iface vmbr0 inet static
224 address 10.10.10.1/24
225 bridge-ports none
226 bridge-stp off
227 bridge-fd 0
228
229 post-up echo 1 > /proc/sys/net/ipv4/ip_forward
230 post-up iptables -t nat -A POSTROUTING -s '10.10.10.0/24' -o eno1 -j MASQUERADE
231 post-down iptables -t nat -D POSTROUTING -s '10.10.10.0/24' -o eno1 -j MASQUERADE
232----
233
234NOTE: In some masquerade setups with firewall enabled, conntrack zones might be
235needed for outgoing connections. Otherwise the firewall could block outgoing
236connections since they will prefer the `POSTROUTING` of the VM bridge (and not
237`MASQUERADE`).
238
239Adding these lines in the `/etc/network/interfaces` can fix this problem:
240
241----
242post-up iptables -t raw -I PREROUTING -i fwbr+ -j CT --zone 1
243post-down iptables -t raw -D PREROUTING -i fwbr+ -j CT --zone 1
244----
245
246For more information about this, refer to the following links:
247
248https://commons.wikimedia.org/wiki/File:Netfilter-packet-flow.svg[Netfilter Packet Flow]
249
250https://lwn.net/Articles/370152/[Patch on netdev-list introducing conntrack zones]
251
252https://blog.lobraun.de/2019/05/19/prox/[Blog post with a good explanation by using TRACE in the raw table]
253
254
255
256Linux Bond
257~~~~~~~~~~
258
259Bonding (also called NIC teaming or Link Aggregation) is a technique
260for binding multiple NIC's to a single network device. It is possible
261to achieve different goals, like make the network fault-tolerant,
262increase the performance or both together.
263
264High-speed hardware like Fibre Channel and the associated switching
265hardware can be quite expensive. By doing link aggregation, two NICs
266can appear as one logical interface, resulting in double speed. This
267is a native Linux kernel feature that is supported by most
268switches. If your nodes have multiple Ethernet ports, you can
269distribute your points of failure by running network cables to
270different switches and the bonded connection will failover to one
271cable or the other in case of network trouble.
272
273Aggregated links can improve live-migration delays and improve the
274speed of replication of data between Proxmox VE Cluster nodes.
275
276There are 7 modes for bonding:
277
278* *Round-robin (balance-rr):* Transmit network packets in sequential
279order from the first available network interface (NIC) slave through
280the last. This mode provides load balancing and fault tolerance.
281
282* *Active-backup (active-backup):* Only one NIC slave in the bond is
283active. A different slave becomes active if, and only if, the active
284slave fails. The single logical bonded interface's MAC address is
285externally visible on only one NIC (port) to avoid distortion in the
286network switch. This mode provides fault tolerance.
287
288* *XOR (balance-xor):* Transmit network packets based on [(source MAC
289address XOR'd with destination MAC address) modulo NIC slave
290count]. This selects the same NIC slave for each destination MAC
291address. This mode provides load balancing and fault tolerance.
292
293* *Broadcast (broadcast):* Transmit network packets on all slave
294network interfaces. This mode provides fault tolerance.
295
296* *IEEE 802.3ad Dynamic link aggregation (802.3ad)(LACP):* Creates
297aggregation groups that share the same speed and duplex
298settings. Utilizes all slave network interfaces in the active
299aggregator group according to the 802.3ad specification.
300
301* *Adaptive transmit load balancing (balance-tlb):* Linux bonding
302driver mode that does not require any special network-switch
303support. The outgoing network packet traffic is distributed according
304to the current load (computed relative to the speed) on each network
305interface slave. Incoming traffic is received by one currently
306designated slave network interface. If this receiving slave fails,
307another slave takes over the MAC address of the failed receiving
308slave.
309
310* *Adaptive load balancing (balance-alb):* Includes balance-tlb plus receive
311load balancing (rlb) for IPV4 traffic, and does not require any
312special network switch support. The receive load balancing is achieved
313by ARP negotiation. The bonding driver intercepts the ARP Replies sent
314by the local system on their way out and overwrites the source
315hardware address with the unique hardware address of one of the NIC
316slaves in the single logical bonded interface such that different
317network-peers use different MAC addresses for their network packet
318traffic.
319
320If your switch support the LACP (IEEE 802.3ad) protocol then we recommend using
321the corresponding bonding mode (802.3ad). Otherwise you should generally use the
322active-backup mode. +
323// http://lists.linux-ha.org/pipermail/linux-ha/2013-January/046295.html
324If you intend to run your cluster network on the bonding interfaces, then you
325have to use active-passive mode on the bonding interfaces, other modes are
326unsupported.
327
328The following bond configuration can be used as distributed/shared
329storage network. The benefit would be that you get more speed and the
330network will be fault-tolerant.
331
332.Example: Use bond with fixed IP address
333----
334auto lo
335iface lo inet loopback
336
337iface eno1 inet manual
338
339iface eno2 inet manual
340
341iface eno3 inet manual
342
343auto bond0
344iface bond0 inet static
345 bond-slaves eno1 eno2
346 address 192.168.1.2/24
347 bond-miimon 100
348 bond-mode 802.3ad
349 bond-xmit-hash-policy layer2+3
350
351auto vmbr0
352iface vmbr0 inet static
353 address 10.10.10.2/24
354 gateway 10.10.10.1
355 bridge-ports eno3
356 bridge-stp off
357 bridge-fd 0
358
359----
360
361
362[thumbnail="default-network-setup-bond.svg"]
363Another possibility it to use the bond directly as bridge port.
364This can be used to make the guest network fault-tolerant.
365
366.Example: Use a bond as bridge port
367----
368auto lo
369iface lo inet loopback
370
371iface eno1 inet manual
372
373iface eno2 inet manual
374
375auto bond0
376iface bond0 inet manual
377 bond-slaves eno1 eno2
378 bond-miimon 100
379 bond-mode 802.3ad
380 bond-xmit-hash-policy layer2+3
381
382auto vmbr0
383iface vmbr0 inet static
384 address 10.10.10.2/24
385 gateway 10.10.10.1
386 bridge-ports bond0
387 bridge-stp off
388 bridge-fd 0
389
390----
391
392
393VLAN 802.1Q
394~~~~~~~~~~~
395
396A virtual LAN (VLAN) is a broadcast domain that is partitioned and
397isolated in the network at layer two. So it is possible to have
398multiple networks (4096) in a physical network, each independent of
399the other ones.
400
401Each VLAN network is identified by a number often called 'tag'.
402Network packages are then 'tagged' to identify which virtual network
403they belong to.
404
405
406VLAN for Guest Networks
407^^^^^^^^^^^^^^^^^^^^^^^
408
409{pve} supports this setup out of the box. You can specify the VLAN tag
410when you create a VM. The VLAN tag is part of the guest network
411configuration. The networking layer supports different modes to
412implement VLANs, depending on the bridge configuration:
413
414* *VLAN awareness on the Linux bridge:*
415In this case, each guest's virtual network card is assigned to a VLAN tag,
416which is transparently supported by the Linux bridge.
417Trunk mode is also possible, but that makes configuration
418in the guest necessary.
419
420* *"traditional" VLAN on the Linux bridge:*
421In contrast to the VLAN awareness method, this method is not transparent
422and creates a VLAN device with associated bridge for each VLAN.
423That is, creating a guest on VLAN 5 for example, would create two
424interfaces eno1.5 and vmbr0v5, which would remain until a reboot occurs.
425
426* *Open vSwitch VLAN:*
427This mode uses the OVS VLAN feature.
428
429* *Guest configured VLAN:*
430VLANs are assigned inside the guest. In this case, the setup is
431completely done inside the guest and can not be influenced from the
432outside. The benefit is that you can use more than one VLAN on a
433single virtual NIC.
434
435
436VLAN on the Host
437^^^^^^^^^^^^^^^^
438
439To allow host communication with an isolated network. It is possible
440to apply VLAN tags to any network device (NIC, Bond, Bridge). In
441general, you should configure the VLAN on the interface with the least
442abstraction layers between itself and the physical NIC.
443
444For example, in a default configuration where you want to place
445the host management address on a separate VLAN.
446
447
448.Example: Use VLAN 5 for the {pve} management IP with traditional Linux bridge
449----
450auto lo
451iface lo inet loopback
452
453iface eno1 inet manual
454
455iface eno1.5 inet manual
456
457auto vmbr0v5
458iface vmbr0v5 inet static
459 address 10.10.10.2/24
460 gateway 10.10.10.1
461 bridge-ports eno1.5
462 bridge-stp off
463 bridge-fd 0
464
465auto vmbr0
466iface vmbr0 inet manual
467 bridge-ports eno1
468 bridge-stp off
469 bridge-fd 0
470
471----
472
473.Example: Use VLAN 5 for the {pve} management IP with VLAN aware Linux bridge
474----
475auto lo
476iface lo inet loopback
477
478iface eno1 inet manual
479
480
481auto vmbr0.5
482iface vmbr0.5 inet static
483 address 10.10.10.2/24
484 gateway 10.10.10.1
485
486auto vmbr0
487iface vmbr0 inet manual
488 bridge-ports eno1
489 bridge-stp off
490 bridge-fd 0
491 bridge-vlan-aware yes
492 bridge-vids 2-4094
493----
494
495The next example is the same setup but a bond is used to
496make this network fail-safe.
497
498.Example: Use VLAN 5 with bond0 for the {pve} management IP with traditional Linux bridge
499----
500auto lo
501iface lo inet loopback
502
503iface eno1 inet manual
504
505iface eno2 inet manual
506
507auto bond0
508iface bond0 inet manual
509 bond-slaves eno1 eno2
510 bond-miimon 100
511 bond-mode 802.3ad
512 bond-xmit-hash-policy layer2+3
513
514iface bond0.5 inet manual
515
516auto vmbr0v5
517iface vmbr0v5 inet static
518 address 10.10.10.2/24
519 gateway 10.10.10.1
520 bridge-ports bond0.5
521 bridge-stp off
522 bridge-fd 0
523
524auto vmbr0
525iface vmbr0 inet manual
526 bridge-ports bond0
527 bridge-stp off
528 bridge-fd 0
529
530----
531
532Disabling IPv6 on the Node
533~~~~~~~~~~~~~~~~~~~~~~~~~~
534
535{pve} works correctly in all environments, irrespective of whether IPv6 is
536deployed or not. We recommend leaving all settings at the provided defaults.
537
538Should you still need to disable support for IPv6 on your node, do so by
539creating an appropriate `sysctl.conf (5)` snippet file and setting the proper
540https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt[sysctls],
541for example adding `/etc/sysctl.d/disable-ipv6.conf` with content:
542
543----
544net.ipv6.conf.all.disable_ipv6 = 1
545net.ipv6.conf.default.disable_ipv6 = 1
546----
547
548This method is preferred to disabling the loading of the IPv6 module on the
549https://www.kernel.org/doc/Documentation/networking/ipv6.rst[kernel commandline].
550
551////
552TODO: explain IPv6 support?
553TODO: explain OVS
554////