Контейнеріңіз әлі де басқару көпірінде жауап береді, бірақ әрбір шығыс пакет кеңсе macvlan арқылы шығады. Ештеңе бұзылған жоқ. Екі қосылым әрқайсысы өз шлюзін береді, ал жалғыз әдепкі маршрут сіз ойламаған желіге кетті, сондықтан қызмет жұмысын жалғастырады, ал оның трафигі ұзағырақ жол жүреді. Біреу байқаған кезде дәлел қате туралы хабар емес, маршруттау кестесі болады.

Әдеттегі түсініктеме — Docker желіні кездейсоқ таңдады. Іс жүзінде ескі шешім қосылған желі атауларының әліпби тәртібіне сүйенді, бұл маршруттауды белгінің жанама әсеріне айналдырды. gw_priority оны сіз әдейі таңдайтын санмен алмастырады және орналасу жазылған соң оны қабылдау шамамен бір минут алады.

Неге әдепкі маршрут қате желіге түседі

Қызмет қосылатын әр желі өз шлюзін ұсына алады, ал контейнерде бәрібір дәл бір әдепкі маршрут қалады. Compose 2.33.1 дейін теңдік желі атауларын сұрыптау арқылы шешілетін, сол себепті control тәрізді белгі office-тен бұрын келсе, трафиктің қайда кететінін сол айқындайтын. Контейнердің ішінде шешімнің ерікті болғанын ештеңе тіркемейді, сондықтан ол код шолуынан өтіп, кейін оғаш жол ретінде пайда болады. Саясатты compose файлына жазу — таңдауды тексеруге болатын етудің жалғыз жолы.

Қай желінің жеңетінін шынымен екі нәрсе өзгертеді: сіз тағайындайтын gw_priority мәндері және қандай желілердің тіпті қосылғаны. Үшінші желі қоссаңыз, үміткерлер жиыны өседі; macvlan-ды алып тастасаңыз, көпірмен бәсекелесетін ештеңе қалмайды. Екі әрекеттің ешқайсысы қолданба журналдарында көрінбейді, өйткені қате әдепкі маршрут байланысты толық үзуді сирек кездестіреді. Ол тек жауаптардың қарсы тарап күтпеуі мүмкін мекенжайдан келуіне әкеледі.

Шлюзді gw_priority арқылы бекітіңіз

Compose 2.33.1 нұсқасынан бастап әрбір қызмет-желі қосылымында gw_priority көрсетеді және ең үлкен сан жеңеді. Қызмет үшін жеке шлюз кілті жоқ, сондықтан мән қызметтің networks блогында тұрады. Төмендегі мысал әдепкі маршрутты control-ға береді, ал office өзінің тікелей қосылған 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

Блокты екі бөлек басқару ретінде оқыңыз: gw_priority әдепкі маршрутты, ал ipam бөлігі мекенжайлауды шешеді. Тек subnet-ты өзгерту шығыс таңдауына тимейді және бұл түзетудің жартылай қолданылуының ең көп тараған жолы. Басымдықтарды олар басқаратын желінің қасында ұстаңыз, келесі оқырман шешімді іздеуге мәжбүр болмас үшін.

gw_priority-ді қасындағы қарапайым priority қасиетімен шатастырмаңыз. Ол қосылымдардың жасалу ретін реттейді және маршруттау туралы ештеңе айтпайды, сондықтан әдепкі шлюзді таңдай алмайды және интерфейс атауларын түзетпейді. Егер біреу трафикті бағыттау үшін priority-ді көтеруді ұсынса, нәтижелік рет кездейсоқ дұрыс көрінсе де, ұсыныс қате.

Әдепкі маршрутты шын мәнінде қай желі таситынын тексеріңіз

Іске қосылған контейнердің ішінде тексеріңіз, өйткені хосттың маршруттау кестесі хостты сипаттайды, қызмет пайдаланатын атаулар кеңістігін емес. Алдымен конфигурация тексерісін іске қосыңыз, теру қатесі қайта іске қосуға дейін ұсталсын, содан кейін контейнер шын мәнінде орнатқан маршрутты оқыңыз.

docker compose config --quiet
docker exec vpn ip -4 route show default
docker exec vpn cat /proc/net/route

Дұрыс нәтиже көпір құрылғысын және 172.30.50.1-ді атайды; қате нәтиже 192.168.120.1-ді және macvlan құрылғысын атайды. Егер бейнеде iproute2 пакеті болмаса, /proc файлы әлі де әдепкі маршрутты хабарлайды, межелігі 00000000 және шлюз байттары кері. Құрылғы атаулары түсініксіз болса, интерфейс бағанын docker inspect-пен салыстырыңыз.

Macvlan — физикалық порт, көпір клоны емес

Macvlan контейнерге сымда екінші сәйкестілік береді және дәл сол жергілікті құрылғыларға қатынасты жұмыс істетеді. Бұл сонымен қатар коммутатор порты мен гипервизор қосымша MAC мекенжайын қабылдауы керек дегенді білдіреді, ал көптеген бұлттық желілер мұны үнсіз қабылдамайды. Флотты жоспарламас бұрын бір контейнерді сынап көріңіз, өйткені қабылданбаған MAC әдетте жоғары тұрған, бірақ ештеңе өткізбейтін байланыс ретінде көрінеді.

macvlan_mode: bridge параметрі — macvlan драйверінің режимі, Docker-дің бағдарламалық көпірі емес, ал passthru әдепкі емес, жеке мамандандырылған режим. Linux сонымен қатар macvlan контейнерінің өз хостсына жетуіне кедергі жасайды сол ата-ана арқылы, сондықтан бір қосылым екі жұмысты атқарады деп күтудің орнына басқару көпірі сақталады.

VLAN ата-анасын Compose көрмей тұрып атаңыз

Docker eno1.120 сияқты нүктелі ата-ананы 802.1Q қосалқы интерфейсі ретінде қарастырады және VLAN құрылғысын өзі жасайды. Бұл қолайлылықтың шегі бар: туынды атау физикалық интерфейс атауына тәуелді, ал ұзын атаулар нәтижені айналадағы құралдар күтетін шектен шығарып жіберуі мүмкін. Хосттың желілік конфигурациясында атаулы VLAN интерфейсін құрып, parent-ті соған бағыттау екі ұшты да болжамды етеді.

networks астындағы кілт — Compose атауы, Linux құрылғысы емес екенін есте сақтаңыз. Хосттан office атаулы интерфейсті іздеу сәтсіз аяқталады, өйткені ядро тек ата-ана интерфейсін және контейнер артындағы veth жұбын көреді.

Үстінде VPN үшін орын жасаңыз

VPN клиенті бұл желілер пайда болғаннан кейін қосылады, сондықтан gw_priority-ге қарамастан нақтырақ маршруттар, саясат ережелері мен сүзгілерді қоса алады. Қашықтағы префикстерді екі жергілікті subnet-қа қатысты жоспарлаңыз, басқару жолына қажет жауаптарды қоса. Қашықтағы префикс кеңсе LAN-ымен қиылысса, туннельден бүкіл жеке ауқымды жұлып алудың орнына мекенжай жоспарын түзетіңіз.

VPN іске қосылғаннан кейін және ол қайта қосылғаннан кейін мекенжайларды, маршруттарды және қызмет жолын қайта тексеріңіз, өйткені қолмен қосылған маршрут дәл қайта қосылу кезінде жоғалады. Бірінші сынақтан бұрын күтілетін кестені жазып қойыңыз, кейінгі салыстыру жаттығу емес, diff болсын. Желінің тұрақты меншігін Compose-та ұстаңыз және VPN конфигурациясы тек өз саясатына ие болсын.

Қатысты мақалалар