Konteiners ar diviem tīkliem izvēlas nepareizo vārteju
Divi pieslēgumi, viens noklusējuma maršruts, un nepareizais tīkls vienmēr uzvar. Piefiksējiet izeju ar Compose gw_priority un pārbaudiet to konteinera iekšpusē.
Jūsu konteiners joprojām atbild uz sava vadības tilta, taču katrs izejošais pakete atstāj tīklu caur biroja macvlan. Nekas nav sabojājies. Divi pieslēgumi katrs piedāvā savu vārteju, un vienīgais noklusējuma maršruts aizgāja uz tīklu, kuru neplānojāt, tāpēc pakalpojums turpina darboties, kamēr tā trafiks iet garāku ceļu. Kad kāds to pamana, pierādījums ir maršrutēšanas tabula, nevis kļūdas ziņojums.
Parastais skaidrojums ir tāds, ka Docker tīklu izvēlējās nejauši. Praksē vecais lēmums sekoja pievienoto tīklu nosaukumu alfabētiskajai secībai, kas maršrutēšanu pārvērta par etiķetes blakusefektu. gw_priority to aizstāj ar skaitli, kuru izvēlaties apzināti, un pāreja aizņem apmēram minūti, kad izkārtojums ir pierakstīts.
Kāpēc noklusējuma maršruts nonāk nepareizajā tīklā
Katrs tīkls, kuram pievienojas pakalpojums, var piedāvāt savu vārteju, un konteineram tomēr paliek tieši viens noklusējuma maršruts. Pirms Compose 2.33.1 neizšķirtu risināja, kārtojot tīklu nosaukumus, tāpēc etiķete kā control, kas nāk pirms office, noteica, kur trafiks aizies. Nekas konteinera iekšpusē nefiksē, ka lēmums bija patvaļīgs, tāpēc tas iztur koda pārskatīšanu un vēlāk parādās kā dīvains ceļš. Politiku compose failā ievietot ir vienīgais veids, kā padarīt izvēli pārbaudāmu.
Kurš tīkls uzvarēs, patiešām maina divas lietas: jūsu piešķirtās gw_priority vērtības un tas, kuri tīkli vispār ir pievienoti. Pievienojiet trešo tīklu, un kandidātu kopa pieaug; noņemiet macvlan, un ar tiltu vairs nav kam konkurēt. Neviens no soļiem neparādās lietojumprogrammas žurnālos, jo nepareizs noklusējuma maršruts reti pilnībā pārtrauc savienojumu. Tas tikai liek atbildēm nākt no adreses, kuru otra puse varbūt negaida.
Piefiksējiet vārteju ar gw_priority
Compose kopš versijas 2.33.1 atklāj gw_priority katrā pakalpojuma-tīkla pieslēgumā, un uzvar lielākais skaitlis. Atsevišķas vārtejas atslēgas pakalpojumam nav, tāpēc vērtība pieder pakalpojuma networks blokam. Zemāk esošais piemērs nodod noklusējuma maršrutu control, kamēr office paliek sasniedzams tā tieši pievienotajam LAN.
services:
vpn:
networks:
control:
gw_priority: 1
office:
gw_priority: 0
networks:
control:
driver: bridge
ipam:
config:
- subnet: 172.30.50.0/24
office:
driver: macvlan
driver_opts:
parent: eno1.120
macvlan_mode: bridge
ipam:
config:
- subnet: 192.168.120.0/24
ip_range: 192.168.120.192/27
gateway: 192.168.120.1
Lasiet bloku kā divas atsevišķas vadības: gw_priority nosaka noklusējuma maršrutu, un ipam daļa nosaka adresāciju. Mainot tikai subnet, izejas izvēle paliek neskarta, un tas ir visizplatītākais veids, kā šis labojums tiek piemērots uz pusi. Turiet prioritātes blakus tīklam, kuru tās pārvalda, lai nākamajam lasītājam nav jāmeklē lēmums.
Nejauciet gw_priority ar vienkāršo priority īpašību blakus. Tā kārto savienojumu izveidi un neko nepasaka par maršrutēšanu, tāpēc nevar izvēlēties noklusējuma vārteju un neizlabo saskarņu nosaukumus. Ja kāds iesaka paaugstināt priority, lai virzītu trafiku, ieteikums ir nepareizs, pat ja iegūtā secība nejauši izskatās pareiza.
Pārbaudiet, kurš tīkls tiešām nes noklusējuma maršrutu
Pārbaudiet darbojošā konteinera iekšpusē, jo resursdatora maršrutēšanas tabula apraksta resursdatoru, nevis vārdu telpu, ko izmanto pakalpojums. Vispirms palaidiet konfigurācijas pārbaudi, lai drukas kļūda atklātos pirms restartēšanas, pēc tam nolasiet maršrutu, kuru konteiners tiešām instalēja.
docker compose config --quiet
docker exec vpn ip -4 route show default
docker exec vpn cat /proc/net/route
Pareizs rezultāts nosauc tilta ierīci un 172.30.50.1; nepareizs nosauc 192.168.120.1 un macvlan ierīci. Ja attēlā nav iproute2 pakotnes, /proc fails joprojām ziņo noklusējuma maršrutu, ar galamērķi 00000000 un vārtejas baitiem apgrieztiem. Kad ierīču nosaukumi nav skaidri, salīdziniet saskarnes kolonnu ar docker inspect.
Macvlan ir fiziska ports, nevis tilta klons
Macvlan piešķir konteineram otru identitāti uz kabeļa, un tieši tas ļauj piekļūt vietējām ierīcēm. Tas arī nozīmē, ka komutatora portam un hipervizoram jāpieņem papildu MAC adrese, un daudzi mākoņu tīkli to klusi noraida. Pirms flotes plānošanas pārbaudiet vienu konteineru, jo noraidīts MAC parasti izpaužas kā saite, kas ir augšā un neko nelaida cauri.
Iestatījums macvlan_mode: bridge ir macvlan draivera režīms, nevis Docker programmatūras tilts, un passthru ir atsevišķs specializēts režīms, nevis noklusējums. Linux arī neļauj macvlan konteineram sasniegt savu resursdatoru caur to pašu vecāku, un tāpēc tiek saglabāts vadības tilts, nevis gaidīts, ka viens pieslēgums veiks abus darbus.
Nosauciet VLAN vecāku, pirms Compose to ierauga
Docker uzskata vecāku ar punktu, piemēram, eno1.120, par 802.1Q apakšsaskarni un pats izveido VLAN ierīci. Šai ērtībai ir robežas: atvasinātais nosaukums ir atkarīgs no fiziskās saskarnes nosaukuma, un gari nosaukumi var izstumt rezultātu ārpus apkārtējo rīku gaidītā. Nosauktas VLAN saskarnes izveide resursdatora tīkla konfigurācijā un parent novirzīšana uz to padara abus galus paredzamus.
Atcerieties, ka atslēga zem networks ir Compose nosaukums, nevis Linux ierīce. Meklēt resursdatorā saskarni ar nosaukumu office neizdosies, jo kodols redz tikai vecāku saskarni un veth pāri aiz konteinera.
Atbrīvojiet vietu VPN virsū
VPN klients pievienojas pēc tam, kad šie tīkli pastāv, tāpēc tas var pievienot konkrētākus maršrutus, politikas noteikumus un filtrus neatkarīgi no gw_priority. Plānojiet attālos prefiksus attiecībā pret abiem vietējiem subnet, ieskaitot atbildes, kas nepieciešamas vadības ceļam. Kad attālais prefikss pārklājas ar biroja LAN, labojiet adrešu plānu, nevis izraujiet visu privāto diapazonu no tuneļa.
Vēlreiz pārbaudiet adreses, maršrutus un pakalpojuma ceļu pēc VPN starta un vēlreiz pēc tā atkārtotas pievienošanās, jo tieši atkārtotas pievienošanās laikā pazūd ar roku pievienots maršruts. Pierakstiet gaidāmo tabulu pirms pirmā testa, lai vēlākā salīdzināšana būtu diff, nevis atmiņas vingrinājums. Saglabājiet pastāvīgu tīkla īpašumtiesības Compose un ļaujiet VPN konfigurācijai pārvaldīt tikai savu politiku.