{"id":81593,"date":"2020-05-15T01:42:36","date_gmt":"2020-05-14T23:42:36","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/tonkaya-nastrojka-marshrutizaczii-dlya-metallb-v-rezhime-l2"},"modified":"2020-05-15T01:42:36","modified_gmt":"2020-05-14T23:42:36","slug":"tonkaya-nastrojka-marshrutizaczii-dlya-metallb-v-rezhime-l2","status":"publish","type":"post","link":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/tonkaya-nastrojka-marshrutizaczii-dlya-metallb-v-rezhime-l2","title":{"rendered":"Ottimizzazione della routing per MetalLB in modalit\u00e0 L2","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Ottimizzazione della routing per MetalLB in modalit\u00e0 L2\" src=\"\/wp-content\/uploads\/2020\/05\/d03a56702a85f4c8c80a6cac3e489980.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nNon molto tempo fa mi sono trovato ad affrontare un compito piuttosto insolito per la configurazione della routing per MetalLB. Di per s\u00e9 nulla di strano, poich\u00e9 di solito per MetalLB non sono necessarie ulteriori azioni, ma nel nostro caso abbiamo un cluster piuttosto grande con una configurazione di rete piuttosto semplice.<\/p>\n<p><\/p>\n<p>In questo articolo spiegher\u00f2 come configurare il routing basato su sorgente e quello basato su policy per la rete esterna del tuo cluster.<\/p>\n<p><\/p>\n<p>Non mi soffermer\u00f2 a fondo sull'installazione e la configurazione di MetalLB, poich\u00e9 presumo tu abbia gi\u00e0 una certa esperienza. Propongo di passare direttamente al sodo, ovvero alla configurazione del routing. Dunque abbiamo quattro casi:<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"sluchay-1-kogda-nastroyka-ne-trebuetsya\">Caso 1: Quando la configurazione non \u00e8 necessaria<\/h1>\n<p><\/p>\n<p>Analizziamo il caso semplice.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ottimizzazione della routing per MetalLB in modalit\u00e0 L2\" src=\"\/wp-content\/uploads\/2020\/05\/f79cc1169741b899c95e76d5d4cf60fc.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Non \u00e8 necessaria alcuna configurazione aggiuntiva del routing quando gli indirizzi forniti da MetalLB sono nella stessa subnet degli indirizzi dei tuoi nodi.<\/p>\n<p><\/p>\n<p>Ad esempio hai una subnet <code>192.168.1.0\/24<\/code>, in essa c'\u00e8 un router <code>192.168.1.1<\/code>, e i tuoi nodi ricevono indirizzi: <code>192.168.1.10-30<\/code>, allora per MetalLB puoi configurare il range <code>192.168.1.100-120<\/code> ed essere sicuro che funzioneranno senza alcuna configurazione aggiuntiva.<\/p>\n<p><\/p>\n<p>Perch\u00e9 \u00e8 cos\u00ec? Perch\u00e9 i tuoi nodi hanno gi\u00e0 rotte configurate:<\/p>\n<p><\/p>\n<pre><code class=\"bash\"># ip route\ndefault via 192.168.1.1 dev eth0 onlink \n192.168.1.0\/24 dev eth0 proto kernel scope link src 192.168.1.10<\/code><\/pre>\n<p><\/p>\n<p>E gli indirizzi dello stesso range riutilizzeranno queste ultime senza ulteriori sforzi.<\/p>\n<p><\/p>\n<h1 id=\"sluchay-2-kogda-trebuetsya-dopolnitelnaya-nastroyka\">Caso 2: Quando \u00e8 necessaria una configurazione aggiuntiva<\/h1>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ottimizzazione della routing per MetalLB in modalit\u00e0 L2\" src=\"\/wp-content\/uploads\/2020\/05\/02392fbc3c16bdf52f0c5ddaf5688e7d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dovrai configurare rotte aggiuntive ogni volta che i tuoi nodi non hanno configurato <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/it\/lir\/ipv4\/\"   title=\"Indirizzi IP\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"666\">Indirizzi IP<\/a> o una rotta alla subnet per cui MetalLB fornisce indirizzi.<\/p>\n<p><\/p>\n<p>Spiegher\u00f2 un po' pi\u00f9 nel dettaglio. Ogni volta che MetalLB assegna un indirizzo, questo pu\u00f2 essere paragonato a una semplice assegnazione del tipo:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">ip addr add 10.9.8.7\/32 dev lo<\/code><\/pre>\n<p><\/p>\n<p>Nota bene, su:<\/p>\n<p><\/p>\n<ul>\n<li><strong>a)<\/strong> L'indirizzo viene assegnato con un prefisso <code>\/32<\/code> cio\u00e8 la rotta alla subnet per esso non verr\u00e0 automaticamente aggiunta (\u00e8 solo un indirizzo)<\/li>\n<li><strong>b)<\/strong> L'indirizzo viene assegnato a qualsiasi interfaccia del nodo (ad esempio il loopback). Qui vale la pena menzionare la peculiarit\u00e0 dello stack di rete Linux. Non importa su quale interfaccia tu aggiunga l'indirizzo, il kernel gestir\u00e0 sempre le richieste arp e invier\u00e0 risposte arp su qualsiasi di esse, questo comportamento \u00e8 considerato corretto e, inoltre, viene utilizzato abbastanza ampiamente in un ambiente dinamico come Kubernetes.<\/li>\n<\/ul>\n<p><\/p>\n<p>Questo comportamento pu\u00f2 essere configurato, ad esempio, attivando l'arp rigoroso:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">echo 1 &gt; \/proc\/sys\/net\/ipv4\/conf\/all\/arp_ignore\necho 2 &gt; \/proc\/sys\/net\/ipv4\/conf\/all\/arp_announce<\/code><\/pre>\n<p><\/p>\n<p>In questo caso, le risposte arp verranno inviate solo se l'interfaccia contiene esplicitamente un indirizzo IP specifico. Questa impostazione \u00e8 obbligatoria se si prevede di utilizzare MetalLB e il kube-proxy \u00e8 in modalit\u00e0 IPVS.<\/p>\n<p><\/p>\n<p>Tuttavia, MetalLB non utilizza il kernel per elaborare le richieste arp, ma lo fa autonomamente in user-space, quindi questa opzione non influenzer\u00e0 il funzionamento di MetalLB.<\/p>\n<p><\/p>\n<p>Torniamo al nostro compito. Se non esiste un percorso per gli indirizzi emessi sui tuoi nodi, aggiungilo in anticipo su tutti i nodi:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">ip route add 10.9.8.0\/24 dev eth1<\/code><\/pre>\n<p><\/p>\n<h1 id=\"sluchay-3-kogda-ponadobitsya-source-based-routing\">Caso 3: Quando sar\u00e0 necessario il routing basato sulla sorgente<\/h1>\n<p><\/p>\n<p>Il routing basato sulla sorgente deve essere configurato quando si ricevono pacchetti tramite un gateway separato, diverso da quello impostato come predefinito, e quindi anche i pacchetti di risposta devono passare attraverso questo stesso gateway.<\/p>\n<p><\/p>\n<p>Ad esempio, hai la stessa subnet <code>192.168.1.0\/24<\/code> dedicata ai tuoi nodi, ma desideri emettere indirizzi esterni tramite MetalLB. Supponiamo che tu abbia diversi indirizzi dalla subnet <code>1.2.3.0\/24<\/code> che si trovano nella VLAN 100 e desideri utilizzarli per accedere ai servizi Kubernetes dall'esterno.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ottimizzazione della routing per MetalLB in modalit\u00e0 L2\" src=\"\/wp-content\/uploads\/2020\/05\/9360f35c4bfae25b12fc5aab2644b775.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Quando accedi a <code>1.2.3.4<\/code> effettuerai richieste da una subnet diversa rispetto a <code>1.2.3.0\/24<\/code> e ti aspetterai una risposta. Il nodo che attualmente \u00e8 master per l'indirizzo emesso da MetalLB <code>1.2.3.4<\/code>, ricever\u00e0 un pacchetto dal router <code>1.2.3.1<\/code>, ma la risposta deve necessariamente passare per lo stesso percorso, attraverso <code>1.2.3.1<\/code>.<\/p>\n<p><\/p>\n<p>. Poich\u00e9 il nostro nodo ha gi\u00e0 configurato un gateway predefinito <code>192.168.1.1<\/code>, di default la risposta andr\u00e0 a lui, e non a <code>1.2.3.1<\/code>, tramite il quale abbiamo ricevuto il pacchetto.<\/p>\n<p><\/p>\n<p>Come affrontare questa situazione?<\/p>\n<p><\/p>\n<p>In questo caso, \u00e8 necessario preparare tutti i tuoi nodi affinch\u00e9 siano pronti a gestire indirizzi esterni senza ulteriori configurazioni. Cio\u00e8, per l'esempio sopra, \u00e8 necessario creare in anticipo un'interfaccia VLAN sul nodo:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">ip link add link eth0 name eth0.100 type vlan id 100\nip link set eth0.100 up<\/code><\/pre>\n<p><\/p>\n<p>E quindi aggiungere le rotte:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">ip route add 1.2.3.0\/24 dev eth0.100 table 100\nip route add default via 1.2.3.1 table 100<\/code><\/pre>\n<p><\/p>\n<p>Nota che le rotte vengono aggiunte a una tabella di routing separata <code>100<\/code> che conterr\u00e0 solo due rotte necessarie per inviare il pacchetto di risposta attraverso il gateway <code>1.2.3.1<\/code>, che si trova dietro l'interfaccia <code>eth0.100<\/code>.<\/p>\n<p><\/p>\n<p>Ora dobbiamo aggiungere una semplice regola:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">ip rule add from 1.2.3.0\/24 lookup 100<\/code><\/pre>\n<p><\/p>\n<p>che dice esplicitamente: se l'indirizzo di origine del pacchetto si trova in <code>1.2.3.0\/24<\/code>, utilizzare la tabella di routing <code>100<\/code>. In essa abbiamo gi\u00e0 descritto il percorso che lo invier\u00e0 attraverso <code>1.2.3.1<\/code><\/p>\n<p><\/p>\n<h1 id=\"sluchay-4-kogda-ponadobitsya-policy-based-routing\">Caso 4: Quando sar\u00e0 necessario il routing basato su policy<\/h1>\n<p><\/p>\n<p>La topologia della rete \u00e8 come nell'esempio precedente, ma supponiamo che tu voglia anche avere la possibilit\u00e0 di contattare indirizzi esterni del pool <code>1.2.3.0\/24<\/code> dai tuoi pod:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ottimizzazione della routing per MetalLB in modalit\u00e0 L2\" src=\"\/wp-content\/uploads\/2020\/05\/46f1f7c2826d87ec1fe8499862ccdd1a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>La particolarit\u00e0 \u00e8 che, quando si contatta un qualsiasi indirizzo in <code>1.2.3.0\/24<\/code>, il pacchetto di risposta, entrando nel nodo e avendo l'indirizzo sorgente nell'intervallo <code>1.2.3.0\/24<\/code> , verr\u00e0 inviato obbedientemente a <code>eth0.100<\/code>, ma noi vogliamo che Kubernetes lo reindirizzi al nostro primo pod, che ha generato la richiesta originale.<\/p>\n<p><\/p>\n<p>Risolvendere questo problema si \u00e8 rivelato complicato, ma \u00e8 diventato possibile grazie al routing basato su policy:<\/p>\n<p><\/p>\n<p>Per comprendere meglio il processo, fornir\u00f2 uno schema a blocchi di netfilter:<br \/>\n<img decoding=\"async\" alt=\"Ottimizzazione della routing per MetalLB in modalit\u00e0 L2\" src=\"\/wp-content\/uploads\/2020\/05\/6b2f117c2dcddad85190156d566231c8.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Iniziamo, come nell'esempio precedente, creando una tabella di routing aggiuntiva:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">ip route add 1.2.3.0\/24 dev eth0.100 table 100\nip route add default via 1.2.3.1 table 100<\/code><\/pre>\n<p><\/p>\n<p>Ora aggiungiamo alcune regole in iptables:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">iptables -t mangle -A PREROUTING -i eth0.100 -j CONNMARK --set-mark 0x100\niptables -t mangle -A PREROUTING -j CONNMARK --restore-mark\niptables -t mangle -A PREROUTING -m mark ! --mark 0 -j RETURN\niptables -t mangle -A POSTROUTING -j CONNMARK --save-mark<\/code><\/pre>\n<p><\/p>\n<p>Queste regole contrassegneranno le connessioni in entrata sull'interfaccia <code>eth0.100<\/code>, contrassegnando tutti i pacchetti con il tag <code>0x100<\/code>, questo stesso tag sar\u00e0 usato anche per le risposte all'interno della stessa connessione.<\/p>\n<p><\/p>\n<p>Ora possiamo aggiungere una regola di routing:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">ip rule add from 1.2.3.0\/24 fwmark 0x100 lookup 100<\/code><\/pre>\n<p><\/p>\n<p>Cio\u00e8, tutti i pacchetti con indirizzo sorgente <code>1.2.3.0\/24<\/code> e tag <code>0x100<\/code> devono essere instradati utilizzando la tabella <code>100<\/code>.<\/p>\n<p><\/p>\n<p>Cos\u00ec, gli altri pacchetti ricevuti su un'altra interfaccia non cadono sotto questa regola, il che consentir\u00e0 loro di essere instradati utilizzando gli strumenti standard di Kubernetes.<\/p>\n<p><\/p>\n<p>C'\u00e8 per\u00f2 un altro aspetto: in Linux esiste il cosiddetto reverse path filter, che ostacola tutto e compie un semplice controllo: per tutti i pacchetti in entrata cambia l'indirizzo sorgente del pacchetto con l'indirizzo del mittente e verifica se il pacchetto pu\u00f2 uscire attraverso la stessa interfaccia su cui \u00e8 stato ricevuto; in caso contrario, lo filtra.<\/p>\n<p><\/p>\n<p>Il problema \u00e8 che nel nostro caso funzioner\u00e0 in modo errato, ma possiamo disattivarlo:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">echo 0 &gt; \/proc\/sys\/net\/ipv4\/conf\/all\/rp_filter\necho 0 &gt; \/proc\/sys\/net\/ipv4\/conf\/eth0.100\/rp_filter<\/code><\/pre>\n<p><\/p>\n<p>Nota che il primo comando controlla il comportamento globale del rp_filter; se non viene disattivato, il secondo comando non avr\u00e0 alcun effetto. Tuttavia, le altre interfacce rimarranno con il rp_filter attivato.<\/p>\n<p><\/p>\n<p>Per non limitare completamente il funzionamento del filtro, possiamo utilizzare l'implementazione di rp_filter per netfilter. Utilizzando rpfilter come modulo di iptables, \u00e8 possibile impostare regole abbastanza flessibili, ad esempio:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">iptables -t raw -A PREROUTING -i eth0.100 -d 1.2.3.0\/24 -j RETURN\niptables -t raw -A PREROUTING -i eth0.100 -m rpfilter --invert -j DROP<\/code><\/pre>\n<p><\/p>\n<p>attivare rp_filter sull'interfaccia <code>eth0.100<\/code> per tutti gli indirizzi tranne <code>1.2.3.0\/24<\/code>.<\/p>\n<p>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/501842\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041d\u0435 \u0442\u0430\u043a \u0434\u0430\u0432\u043d\u043e \u044f \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u0441 \u0432\u0435\u0441\u044c\u043c\u0430 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0449\u0430\u0446\u0438\u0438 \u0434\u043b\u044f MetalLB. \u0412\u0441\u0451 \u0431\u044b \u043d\u0438\u0447\u0435\u0433\u043e, \u0442.\u043a. \u043e\u0431\u044b\u0447\u043d\u043e \u0434\u043b\u044f MetalLB \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439, \u043d\u043e \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0441 \u0432\u0435\u0441\u044c\u043c\u0430 \u043d\u0435\u0445\u0438\u0442\u0440\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439 \u0441\u0435\u0442\u0438. \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043a\u0430\u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c source-based \u0438 policy-based routing \u0434\u043b\u044f \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0441\u0435\u0442\u0438 \u0432\u0430\u0448\u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430. \u042f [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":81594,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-81593","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041d\u0435 \u0442\u0430\u043a \u0434\u0430\u0432\u043d\u043e \u044f \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u0441 \u0432\u0435\u0441\u044c\u043c\u0430.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/tonkaya-nastrojka-marshrutizaczii-dlya-metallb-v-rezhime-l2\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0422\u043e\u043d\u043a\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u043b\u044f MetalLB \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 L2 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041d\u0435 \u0442\u0430\u043a \u0434\u0430\u0432\u043d\u043e \u044f \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u0441 \u0432\u0435\u0441\u044c\u043c\u0430.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/tonkaya-nastrojka-marshrutizaczii-dlya-metallb-v-rezhime-l2\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-05-14T23:42:36+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-05-14T23:42:36+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Ottimizzazione della routing per MetalLB in modalit\u00e0 L2 | ProHoster","description":"Non molto tempo fa mi sono imbattuto in qualcosa di molto.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/tonkaya-nastrojka-marshrutizaczii-dlya-metallb-v-rezhime-l2","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0422\u043e\u043d\u043a\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u043b\u044f MetalLB \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 L2 | ProHoster","og:description":"\u041d\u0435 \u0442\u0430\u043a \u0434\u0430\u0432\u043d\u043e \u044f \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u0441 \u0432\u0435\u0441\u044c\u043c\u0430.","og:url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/tonkaya-nastrojka-marshrutizaczii-dlya-metallb-v-rezhime-l2","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-05-14T23:42:36+00:00","article:modified_time":"2020-05-14T23:42:36+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"81593","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 15:55:42","updated":"2026-02-08 20:23:59","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/81593","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=81593"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/81593\/revisions"}],"predecessor-version":[{"id":157857,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/81593\/revisions\/157857"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/81594"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=81593"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=81593"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=81593"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}