Зашто net.ipv4.conf.default.forwarding не дира tun0
default.forwarding засејава само нове интерфејсе, а не живи тунел. Упоредите ip_forward, шаблон и интерфејс у namespace-у који га поседује.
Подесили сте net.ipv4.conf.default.forwarding=1, поново покренули VPN, а тунел и даље одбацује пакете које би мрежни пролаз требало да рутира. Подешавање у датотеци изгледа исправно, а интерфејс и даље пријављује да је прослеђивање искључено. Ништа није покварено: променили сте вредност коју наслеђују будући интерфејси, а не ону коју користи живи тунел.
Прођите кроз ово на хосту који поседује тунел, у мрежном namespace-у у ком тунел заиста постоји. Контејнер или мрежни namespace може да држи интерфејс док хост приказује друге бројеве.
Читајте три вредности заједно
Почните поређењем прекидача на нивоу целог пролаза, шаблона за нове интерфејсе и интерфејса који вас занима. Замените tun0 стварним улазним интерфејсом и прочитајте и повратни интерфејс, јер се прослеђивање оцењује у тачки у коју пакет стиже.
sysctl net.ipv4.ip_forward
sysctl net.ipv4.conf.default.forwarding
sysctl net.ipv4.conf.tun0.forwardingЧест резултат је ip_forward = 0, default.forwarding = 1 и tun0.forwarding = 0. Прве две се не слажу о улози хоста, а трећа показује шта интерфејс заиста ради. Та комбинација одговара хосту који никада није конфигурисан као рутер, већ је добио само вредност шаблона. Три броја нису у супротности; она одговарају на три различита питања. Ни записивање вредности шаблона не одлучује о улози хоста.
Зашто се помера баш глобални прекидач
net.ipv4.ip_forward је контрола на нивоу целог пролаза. Његова промена ажурира подешавања прослеђивања по интерфејсу као део исте операције, зато један упис може да натера постојећи тунел да почне да прослеђује. default.forwarding засејава само интерфејсе који се иницијализују након тога, па тунел који је већ постојао задржава вредност са којом је рођен.
Документација језгра означава ip_forward као посебан из повезаног разлога: његова промена ресетује скуп других IPv4 параметара на подразумеване вредности за хост или рутер. То га чини тупим алатом. Подесити га једном у склопу успостављања улоге пролаза је у реду; пребацивати га изнова као трик за отклањање грешака може тихо да препише конфигурацију на коју сте потрошили време.
Вредности по интерфејсу такође постоје с разлогом. Намерно вођен пролаз може да држи прослеђивање искључено на интерфејсу који никада не би требало да рутира, чак и док хост прослеђује негде другде. Зато је важно читати живи интерфејс и зато само глобална вредност није цео одговор. Такав изузетак читајте као свесну одлуку и запишите зашто је тај интерфејс другачији. Иначе ће га следећи инжењер радо "поправити".
Учините подешавање трајним на правом месту
Успешан једнократни sysctl -w доказује да језгро прихвата вредност. Не преживљава рестарт, а ни мрежног менаџера који при поновном повезивању поново примењује своју замисао о конфигурацији интерфејса. Ставите улогу пролаза у sysctl конфигурациону датотеку или у мрежни менаџер који поседује хост, па затим поново покрените сервис који је примењује.
Редослед је важан код тунела. Ако менаџер ствара интерфејс при подизању и примењује прослеђивање после, интерфејс може да наследи стари default. Рестарт сервиса који поново ствара тунел такође је догађај стварања и лако се пропусти кад unit изгледа здраво. Проверите след, не само коначан садржај датотеке.
Прочитајте поново исте три вредности након што се VPN поново повеже и још једном након рестарта. Новостворени тунел је нови интерфејс, а нови интерфејс узима default који важи у тренутку стварања. Ако се бројеви мењају кроз те догађаје, конфигурацију примењује нешто што још нисте идентификовали.
Не поправљајте ово погрешним алатом
Кад је прослеђивање изгледало покварено, искушење је испразнити заштитни зид или додати masquerading. Ни једно ни друго не решава прекидач прослеђивања. Стање прослеђивања, дозвола за прослеђивање, рута до одредишта и повратни пут су четири одвојена захтева, а само први је sysctl.
Тестирајте и исправним током. Захтев упућен на самом пролазу уопште не вежба прослеђивање; то је локално генерисан саобраћај. Питање је да ли се пакет који долази од VPN клијента или LAN хоста прихвата и даље рутира, па тест мора настати иза пролаза.
Држите случај IPv6 одвојено
Овде је све IPv4. IPv6 прослеђивање, огласи рутера и понашање accept_ra имају своје контроле, а копирање ipv4 пута у ipv6 подешавање ствара датотеку која изгледа уверљиво и не ради ништа корисно. Пролаз са два стека треба свесно да конфигурише оба скупа.
Последња провера: када се вредности сложе, потврдите да је рута тунела изабрана за одредиште и да повратни пут постоји. Прослеђивање укључено на интерфејсу без руте и даље је црна рупа, а тај квар изгледа исто са клијентове стране.