Ништа у сокету не памти који је интерфејс пренео захтев, па подразумевана рута VPN-а са пуним тунелом може да ухвати одговор који припада WAN-у. Услуга не игнорише долазни интерфејс; Linux усмерава локално генерисан одговор према одредишту и политици извора. Правило засновано на извору може уместо тога да шаље само одговоре услуге кроз потпуну WAN табелу, остављајући обичан излаз на тунелу. Порт остаје отворен док одговор излази погрешном путањом, и зато симптом изгледа једнострано.

Погрешна представа: одговори следе интерфејс на који су стигли

Изгледа логично да пакет који стигне на eth0 изађе на eth0. Филтери пакета без стања могу тако да се напишу, а tcpdump на улазној страни показује захтев тачно тамо где се очекује. Усмеравање тако не функционише за саобраћај који сам хост ствара.

Када услуга прихвати везу, њен одговор је нови локално генерисан пакет. Језгро проверава правила усмеравања за одредиште и извор одговора, а подразумевана рута VPN-а је потпуно важећи одговор. Ништа у сокету не памти који је интерфејс пренео захтев.

Зато симптом изгледа једнострано: захтеви долазе, одговори нестају. Зато ни додавање правила заштитног зида за улазни порт ништа не мења. Пакет се не блокира на путу унутра; он се усмерава негде другде на путу напоље. Пратите одговор претрагом квалификованом по извору и заобилажење постаје видљиво.

Шта језгро заиста усмерава: адреса извора

Држач који вам треба је локална адреса коју услуга користи за одговоре. На хосту са илустративном eth0 адресом 192.0.2.10/24 и мрежним пролазом 192.0.2.1 та адреса постоји на интерфејсу. На cloud VM-у јавна адреса може бити преведена изнад и одсутна из госта, зато користите адресу коју хост заиста има.

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

ip -4 addr show dev eth0
ip -4 rule show
ip -4 route show table all

Затим изаберите табелу према извору. Правило одговара одговорима који већ носе 192.0.2.10, тачно локално завршеном саобраћају који желите да изузмете. Прослеђени саобраћај и пакети са других локалних адреса не одговарају.

Изградите потпуну повратну табелу, а не пола подразумеване руте

Табела са само подразумеваном рутом није довољна. Језгро још мора да реши мрежни пролаз, а то решење захтева повезани префикс у истој табели. Табела којој тај префикс недостаје пада при решавању пролаза, чак и када њена подразумевана рута изгледа исправно. Додајте обоје, па усмерите правило извора на табелу:

ip -4 route add table 100 192.0.2.0/24 dev eth0 src 192.0.2.10
ip -4 route add table 100 default via 192.0.2.1 dev eth0
ip -4 rule add priority 1000 from 192.0.2.10/32 lookup 100

Користите стварни префикс и пролаз уместо да копирате пример. Cloud интерфејс конфигурисан као /32 са пролазом на линку захтева другачију повезану руту, а табела изграђена од погрешног префикса пада на првом скоку. Атрибут src наводи пожељни извор за ту руту; он не замењује правило извора.

Редослед је такође важан. Широко правило са нижим бројем приоритета оцењује се прво, па до правила извора мора да се стигне пре било ког правила које би вратило овај саобраћај у главну табелу. Проверите приоритете помоћу ip rule show након додавања, не само при подизању.

Проверите претрагом квалификованом по извору

Замолите језгро да усмери тест одредиште са адресе услуге. Одговор треба да наведе eth0 и WAN пролаз, а не тунел:

ip -4 route get 198.51.100.25 from 192.0.2.10

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

Ставите коначне руте и правило под мрежног менаџера који поседује интерфејс. Промене адресе, обнављање DHCP-а и поновна повезивања VPN-а преписују стање језгра, а правило додато руком нестаје или показује на застарели пролаз након следећег догађаја.

Где се ово изузеће зауставља

Правило изузима локално завршен саобраћај са једне адресе извора. Не покрива портове које објављује Docker, DNAT ни услуге прослеђене кроз хост, јер се ти пакети усмеравају као прослеђени саобраћај и никада не носе локални извор хоста на исти начин. Такви дизајни обично захтевају ознаку постављену на улазу и правило које одговара ознаци.

Оно такође не чини да се јавна адреса хоста појави на интерфејсу. Када узводни NAT поседује ту адресу, одговор ипак мора да изађе путањом коју тај NAT очекује, зато WAN табела мора да преслика изворни пролаз и префикс, а не претпостављени јавни опсег.

Држите изузеће документовано са бројем табеле, приоритетом правила и тачном адресом извора. Следећа промена VPN-а или интерфејса може га тихо покварити, а белешка која именује три вредности брже се проверава од поновног откривања симптома из извештаја клијента.

Ако услуга и даље одговара погрешном путањом након што претрага квалификована по извору прође, упоредите адресу извора живе утичнице са оном у правилу. Услуга везана за заменску адресу може изабрати другачији извор од тестиране адресе, и тај несклад је преостали јаз.

Повезани чланци