Додавате правило за VPN сообраќај во FORWARD ланецот, ја извршувате барањето од истата Linux машина, а бројачот останува на нула. Правилото веројатно е точно. Пакетот никогаш не го поминал тој пат, бидејќи барање создадено на самата машина таа не го препраќа. Следењето на животот на пакетот од сокетот до жицата објаснува зошто е така и каде правилото всушност треба да биде.

Најдете каде е роден пакетот

Редоследот на куките во Netfilter разделува три случаи, а само еден од нив вклучува FORWARD:

OriginPathHook that sees it
Local processOUTPUT then POSTROUTINGOUTPUT, POSTROUTING
Addressed to a local servicePREROUTING then INPUTPREROUTING, INPUT
Received for another hostPREROUTING, FORWARD, POSTROUTINGFORWARD

Локалната апликација започнува во OUTPUT патеката, бидејќи јадрото веќе утврдило дека пакетот настанува овде и никогаш не е кандидат за препраќање. Создавањето тунел не ја менува таа класификација; тунелот е уред низ кој пакетот може да излезе, а не фаза што локалниот излез го претвора во транзит.

Два пакети, една приказна

Откако тунелот е подигнат, внатрешниот пакет на апликацијата и шифрираниот надворешен пакет се различни објекти. Внатрешниот пакет го носи одредиштето и полезниот товар што ги избра апликацијата. Надворешниот пакет носи шифрен текст до адресата и портата на партнерот, и токму тој навистина ја преминува физичката интерфејс.

Вашата политика се однесува на еден од нив, а изборот на погрешниот е честа причина правило да изгледа како ништо да не прави. Правило што се совпаѓа со надворешната адреса на партнерот го гледа секој пакет од тунелот еднакво, што и да прави апликацијата внатре. Правило што се совпаѓа со внатрешно одредиште го гледа сообраќајот што ве интересира, и ќе се активира само ако тој пакет стигне до куката на која го поставивте правилото.

Именските простори ја поместуваат границата

Контејнерот го отежнува ова без да го менува принципот. Барањето на апликацијата е локален излез во мрежниот именски простор на контејнерот. Домаќинот го прима тој сообраќај на виртуелен Ethernet интерфејс и може да го препрати, па FORWARD правило на домаќинот може да има смисла, иако процесот што го создал барањето никогаш не го допрел OUTPUT ланецот на домаќинот.

Пред да изберете кука, утврдете каде навистина живеат множеството правила и тунелот. Тунел внатре во контејнерот, тунел на домаќинот со контејнерот насочен низ него, и тунел во одделен именски простор се три различни топологии со три различни места за правилата. Читајте ги правилата внатре во именскиот простор што го поседува уредот, не само во стандардниот.

Прашајте дали воопшто ви треба ознака

Ако целта е да се испрати една претставка за одредиште низ тунелот, рута за таа претставка може да биде доволна. Прво проверете ги активните рути, вклучително сѐ што го турнал серверот: пренасочена стандардна рута испраќа многу повеќе сообраќај низ VPN отколку тесната политика што ја имавте на ум, и никакво количество означување нема да го усогласи резултатот со намерата.

Класификација е потребна кога одлуката зависи од нешто што рутата не може да го изрази, како изворот, корисникот или процесот. За примениот сообраќај, означувањето во PREROUTING работи. За локалниот сообраќај, означувањето мора да се случи во излезна фаза што може да поттикне ново пребарување на рута откако ознаката е поставена. Со nftables тоа е ланец од тип route на излезната кука; обичен излезен филтер ланец ќе ја постави вредноста и ќе ја остави рутата непроменета.

Со iptables, еквивалентот живее во распоредот mangle OUTPUT, и важи истото барање: одлуката за рутирање мора повторно да се разгледа откако ознаката постои. Потоа правилото за политика мора да ја потроши ознаката и да покаже кон табела што содржи употреблива рута. Поставувањето conntrack ознака е трета, одделна операција; таа чува вредност на текот и самата не ја става таа вредност на тековниот пакет за рутирањето да ја прочита.

Проверете го пребарувањето и бројачот заедно

nft list ruleset
ip route get 198.51.100.25
ip route get 198.51.100.25 mark 0x1

Адресата и ознаката се илустративни, а двете прашања за рута одговараат на различни прашања. Второто прашува што би направило јадрото ако пакетот ја носел таа ознака; тоа не покажува дека вашето множество правила доделува таква. Третирајте го како тест на хипотеза, не како доказ дека политиката работи.

Потоа извршете безопасно барање и гледајте две работи истовремено: бројачот на куката што ја избравте и излезот што пакетот навистина го зел. Ако бројачот се движи а пакетот излегува на друго место, ознаката или табелата е погрешна. Ако ниту едно не се движи, пакетот воопшто не стигнува до таа кука, и следното прашање е именскиот простор или патеката.

На крајот, ограничете го тестот на она што механизмот може да го изрази. Една рута за една адреса не станува трајна политика за услуга чии адреси се менуваат. Прво одлучете го опфатот на пакетите, потоа проверете дали дизајнот на рутирање и означување може да го задржи тој опфат по повторно поврзување.

Поврзани статии