]> git.proxmox.com Git - pve-docs.git/blame - pve-network.adoc
network: adapt apply config section to PVE 7
[pve-docs.git] / pve-network.adoc
CommitLineData
80c0adcb 1[[sysadmin_network_configuration]]
0bcd1f7f
DM
2Network Configuration
3---------------------
5f09af76
DM
4ifdef::wiki[]
5:pve-toplevel:
6endif::wiki[]
7
a22d7c24 8Network configuration can be done either via the GUI, or by manually
05213009
EK
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
52e23c35 12user modifications, but using the GUI is still preferable, because it
05213009 13protects you from errors.
0bcd1f7f 14
a5604bb4
TL
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
52e23c35
TL
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
9a081089 32One way to apply a new network configuration is to reboot the node.
52e23c35
TL
33
34Reload Network with ifupdown2
35^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
36
9a081089
AL
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:
52e23c35 42
9a081089
AL
43----
44 ifreload -a
45----
52e23c35 46
9a081089
AL
47NOTE: If you installed {pve} on top of Debian, make sure 'ifupdown2' is
48installed: 'apt install ifupdown2'
0bcd1f7f 49
0bcd1f7f
DM
50Naming Conventions
51~~~~~~~~~~~~~~~~~~
52
53We currently use the following naming conventions for device names:
54
05213009
EK
55* Ethernet devices: en*, systemd network interface names. This naming scheme is
56 used for new {pve} installations since version 5.0.
7a0d4784 57
05213009
EK
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.
0bcd1f7f
DM
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,
7a0d4784 67 separated by a period (`eno1.50`, `bond1.30`)
0bcd1f7f
DM
68
69This makes it easier to debug networks problems, because the device
05213009 70name implies the device type.
cc3cb912 71
7a0d4784
WL
72Systemd Network Interface Names
73^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
74
8116dea5
DM
75Systemd uses the two character prefix 'en' for Ethernet network
76devices. The next characters depends on the device driver and the fact
cc3cb912 77which schema matches first.
7a0d4784
WL
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
cc3cb912 87The most common patterns are:
7a0d4784
WL
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
cc3cb912
DM
93For more information see https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/[Predictable Network Interface Names].
94
05213009
EK
95Choosing a network configuration
96~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
97
a22d7c24 98Depending on your current network organization and your resources you can
05213009
EK
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
a22d7c24 104The *Bridged* model makes the most sense in this case, and this is also
05213009 105the default mode on new {pve} installations.
a22d7c24
SR
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
05213009
EK
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
a22d7c24 121systems is to use *Masquerading*. For incoming network access to your guests,
05213009
EK
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.
7a0d4784 128
0bcd1f7f
DM
129Default Configuration using a Bridge
130~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
131
50f88938 132[thumbnail="default-network-setup-bridge.svg"]
05213009 133Bridges are like physical network switches implemented in software.
e2280bf7
TL
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.
05213009 136
0bcd1f7f 137The installation program creates a single bridge named `vmbr0`, which
04e8476d
EK
138is connected to the first Ethernet card. The corresponding
139configuration in `/etc/network/interfaces` might look like this:
0bcd1f7f
DM
140
141----
142auto lo
143iface lo inet loopback
144
7a0d4784 145iface eno1 inet manual
0bcd1f7f
DM
146
147auto vmbr0
148iface vmbr0 inet static
33349b9f 149 address 192.168.10.2/24
0bcd1f7f 150 gateway 192.168.10.1
7a39aabd
AL
151 bridge-ports eno1
152 bridge-stp off
153 bridge-fd 0
0bcd1f7f
DM
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
0bcd1f7f
DM
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
67c9747f
TL
168TIP: Some providers allow you to register additional MACs through their
169management interface. This avoids the problem, but can be clumsy to
0bcd1f7f
DM
170configure because you need to register a MAC for each of your VMs.
171
8c1189b6 172You can avoid the problem by ``routing'' all traffic via a single
0bcd1f7f
DM
173interface. This makes sure that all network packets use the same MAC
174address.
175
50f88938 176[thumbnail="default-network-setup-routed.svg"]
05213009 177A common scenario is that you have a public IP (assume `198.51.100.5`
0bcd1f7f 178for this example), and an additional IP block for your VMs
e4682f58 179(`203.0.113.16/28`). We recommend the following setup for such
0bcd1f7f
DM
180situations:
181
182----
183auto lo
184iface lo inet loopback
185
e4682f58
DW
186auto eno0
187iface eno0 inet static
188 address 198.51.100.5/29
05213009 189 gateway 198.51.100.1
1ed90852 190 post-up echo 1 > /proc/sys/net/ipv4/ip_forward
d7a0fa2a 191 post-up echo 1 > /proc/sys/net/ipv4/conf/eno0/proxy_arp
0bcd1f7f
DM
192
193
194auto vmbr0
195iface vmbr0 inet static
e4682f58 196 address 203.0.113.17/28
7a39aabd
AL
197 bridge-ports none
198 bridge-stp off
199 bridge-fd 0
0bcd1f7f
DM
200----
201
202
8c1189b6
FG
203Masquerading (NAT) with `iptables`
204~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0bcd1f7f 205
05213009
EK
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.
0bcd1f7f
DM
210
211----
212auto lo
213iface lo inet loopback
214
05213009 215auto eno1
470d4313 216#real IP address
7a0d4784 217iface eno1 inet static
33349b9f 218 address 198.51.100.5/24
05213009 219 gateway 198.51.100.1
0bcd1f7f
DM
220
221auto vmbr0
222#private sub network
223iface vmbr0 inet static
33349b9f 224 address 10.10.10.1/24
7a39aabd
AL
225 bridge-ports none
226 bridge-stp off
227 bridge-fd 0
0bcd1f7f 228
22d52440 229 post-up echo 1 > /proc/sys/net/ipv4/ip_forward
7a0d4784
WL
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
0bcd1f7f
DM
232----
233
22d52440
OB
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:
217f7cd8 247
22d52440 248https://commons.wikimedia.org/wiki/File:Netfilter-packet-flow.svg[Netfilter Packet Flow]
217f7cd8 249
22d52440 250https://lwn.net/Articles/370152/[Patch on netdev-list introducing conntrack zones]
217f7cd8 251
22d52440
OB
252https://blog.lobraun.de/2019/05/19/prox/[Blog post with a good explanation by using TRACE in the raw table]
253
254
b4c06a93
WL
255
256Linux Bond
257~~~~~~~~~~
258
3eafe338
WL
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.
b4c06a93
WL
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
e60ce90c 310* *Adaptive load balancing (balance-alb):* Includes balance-tlb plus receive
b4c06a93
WL
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
649098a6 320If your switch support the LACP (IEEE 802.3ad) protocol then we recommend using
a22d7c24 321the corresponding bonding mode (802.3ad). Otherwise you should generally use the
649098a6
EK
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.
b4c06a93 327
cd1de2c2
WL
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
b4c06a93
WL
332.Example: Use bond with fixed IP address
333----
334auto lo
335iface lo inet loopback
336
7a0d4784 337iface eno1 inet manual
b4c06a93 338
7a0d4784 339iface eno2 inet manual
b4c06a93 340
61b099f5
WL
341iface eno3 inet manual
342
b4c06a93
WL
343auto bond0
344iface bond0 inet static
5f05aad1 345 bond-slaves eno1 eno2
33349b9f 346 address 192.168.1.2/24
7a39aabd
AL
347 bond-miimon 100
348 bond-mode 802.3ad
349 bond-xmit-hash-policy layer2+3
b4c06a93
WL
350
351auto vmbr0
352iface vmbr0 inet static
33349b9f 353 address 10.10.10.2/24
7ea42266 354 gateway 10.10.10.1
61b099f5 355 bridge-ports eno3
7a39aabd
AL
356 bridge-stp off
357 bridge-fd 0
b4c06a93
WL
358
359----
360
cd1de2c2 361
50f88938 362[thumbnail="default-network-setup-bond.svg"]
cd1de2c2
WL
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
b4c06a93
WL
367----
368auto lo
369iface lo inet loopback
370
7a0d4784 371iface eno1 inet manual
b4c06a93 372
7a0d4784 373iface eno2 inet manual
b4c06a93
WL
374
375auto bond0
470d4313 376iface bond0 inet manual
5f05aad1 377 bond-slaves eno1 eno2
7a39aabd
AL
378 bond-miimon 100
379 bond-mode 802.3ad
380 bond-xmit-hash-policy layer2+3
b4c06a93
WL
381
382auto vmbr0
383iface vmbr0 inet static
33349b9f 384 address 10.10.10.2/24
7ea42266 385 gateway 10.10.10.1
7a39aabd
AL
386 bridge-ports bond0
387 bridge-stp off
388 bridge-fd 0
b4c06a93
WL
389
390----
391
61105e42 392
94fd8ea5
WL
393VLAN 802.1Q
394~~~~~~~~~~~
395
4d8af129
DM
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
61105e42 401Each VLAN network is identified by a number often called 'tag'.
4d8af129
DM
402Network packages are then 'tagged' to identify which virtual network
403they belong to.
94fd8ea5 404
94fd8ea5 405
4d8af129
DM
406VLAN for Guest Networks
407^^^^^^^^^^^^^^^^^^^^^^^
94fd8ea5 408
4d8af129
DM
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
a22d7c24 411configuration. The networking layer supports different modes to
4d8af129 412implement VLANs, depending on the bridge configuration:
94fd8ea5 413
4d8af129 414* *VLAN awareness on the Linux bridge:*
94fd8ea5 415In this case, each guest's virtual network card is assigned to a VLAN tag,
4d8af129 416which is transparently supported by the Linux bridge.
a22d7c24 417Trunk mode is also possible, but that makes configuration
94fd8ea5
WL
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.
a22d7c24
SR
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.
94fd8ea5 425
4d8af129
DM
426* *Open vSwitch VLAN:*
427This mode uses the OVS VLAN feature.
428
a22d7c24 429* *Guest configured VLAN:*
4d8af129
DM
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^^^^^^^^^^^^^^^^
94fd8ea5 438
4d8af129
DM
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
94fd8ea5
WL
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
94fd8ea5 447
038dc7df 448.Example: Use VLAN 5 for the {pve} management IP with traditional Linux bridge
94fd8ea5
WL
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
33349b9f 459 address 10.10.10.2/24
94fd8ea5 460 gateway 10.10.10.1
7a39aabd
AL
461 bridge-ports eno1.5
462 bridge-stp off
463 bridge-fd 0
94fd8ea5
WL
464
465auto vmbr0
466iface vmbr0 inet manual
7a39aabd
AL
467 bridge-ports eno1
468 bridge-stp off
469 bridge-fd 0
94fd8ea5
WL
470
471----
472
038dc7df
AD
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
33349b9f 483 address 10.10.10.2/24
038dc7df
AD
484 gateway 10.10.10.1
485
486auto vmbr0
487iface vmbr0 inet manual
7a39aabd
AL
488 bridge-ports eno1
489 bridge-stp off
490 bridge-fd 0
491 bridge-vlan-aware yes
a59c283b 492 bridge-vids 2-4094
038dc7df
AD
493----
494
94fd8ea5
WL
495The next example is the same setup but a bond is used to
496make this network fail-safe.
497
038dc7df 498.Example: Use VLAN 5 with bond0 for the {pve} management IP with traditional Linux bridge
94fd8ea5
WL
499----
500auto lo
501iface lo inet loopback
502
503iface eno1 inet manual
504
505iface eno2 inet manual
506
507auto bond0
508iface bond0 inet manual
5f05aad1 509 bond-slaves eno1 eno2
7a39aabd
AL
510 bond-miimon 100
511 bond-mode 802.3ad
512 bond-xmit-hash-policy layer2+3
94fd8ea5
WL
513
514iface bond0.5 inet manual
515
516auto vmbr0v5
517iface vmbr0v5 inet static
33349b9f 518 address 10.10.10.2/24
94fd8ea5 519 gateway 10.10.10.1
7a39aabd
AL
520 bridge-ports bond0.5
521 bridge-stp off
522 bridge-fd 0
94fd8ea5
WL
523
524auto vmbr0
525iface vmbr0 inet manual
7a39aabd
AL
526 bridge-ports bond0
527 bridge-stp off
528 bridge-fd 0
94fd8ea5
WL
529
530----
531
024d3706
SI
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
0bcd1f7f
DM
551////
552TODO: explain IPv6 support?
470d4313 553TODO: explain OVS
0bcd1f7f 554////