Эки VPN пулу үчүн булак боюнча маршруттоо: эрежеңиз эмнени өткөрүп жиберет
from түрүндөгү эреже SNAT аны кайра жазганга чейин кардар дарегине туура келет, ал эми шлюздөн жасалган сыноо экөөнүн бирине да туура келбейт. Издөөнү ар бир пул үчүн аткарыңыз жана анын ордуна артыкчылыктарды окуңуз.
Эки кардар пулу, бир шлюз жана план жөнөкөй көрүнөт: бир эреже биринчи пулду тез өйдө канал аркылуу чыгарат, экинчиси экинчи пулду өнөктөш туннели аркылуу жиберет. Андан кийин эрежелер ордунда, ал эми экинчи пул дагы эле демейки маршрут аркылуу чыгат. Эреже бузулган эмес. Пакеттин булагы издөө учурунда автор күткөн нерсе эмес, анткени которуу менен издөө бир пакеттин жолунун ар башка чекиттеринде болот, ал эми тартип көпчүлүк тарткан ой диаграммасына тескери.
Издөө булак кайра жазылганга чейин болот
VPN кардарынан жиберилүүчү пакет үчүн ядро белгиленген ырааттуулукту аткарат. Ал туннелдин интерфейсине келет, conntrack жана DNAT турган prerouting аркылуу өтөт, андан кийин маршруттоо чечими кабыл алынат, андан кийин жиберүү, андан кийин SNAT эң акыркы колдонулуучу postrouting. from түрүндөгү эреже ошол маршруттоо чечими учурунда каралат, башкача айтканда ал кардардын баштапкы дарегин көрөт, которулганын эмес.
Ошондуктан masquerade эрежесин кошуу чыгуучу агымга кайсы саясат туура келерин өзгөртпөйт. Өзгөргөнү — алыскы тарап эмнени көрөт, демек кайсы кайтаруу жолу бар. Булар эки башка кесепет, жана өзгөрүүлөрдү кароо аларды дайыма алмаштырат. Аларды бөлсөңүз, долбоор адатта бир мүнөттүн ичинде айкын болот.
Которулган дарек эрежелерде жооп багытында көрүнөт. Шлюзге кайткан пакет которулган дарекке адрестелет, ал эми максатка же ал кирген интерфейске байланган саясат эрежелериңиз болсо, сиз дал ошол маанини дал келтиресиз. Бир байланыш, ар бир багытта чындыктын башка булагы.
| Stage | Source the kernel sees | What it means for your rule |
|---|---|---|
| Prerouting | Client address, 172.31.7.42 | Where marks and DNAT are applied |
| Routing decision | Still 172.31.7.42 | This is where from rules match |
| Postrouting | Becomes 198.51.100.9 | What the far end and its return route see |
Ошентип булактары ар башка эки пулга чынында ар башка таблицалар керек, ал эми долбоор туура. Жогорку таблица жокко чыгарган нерсе — алыскы сайт эмнени алганын карап, андан эрежени чыгаруунун оңой жолу.
Шлюздөн жасалган сыноо пулдун сыноосу эмес
Шлюз өзү жараткан трафик эч качан prerouting аркылуу өтпөйт, анткени ал интерфейске келген эмес. Ал чыгуу жолунда маршрутталат, булак катары шлюздун өз дареги алынат, ал эми кардар диапазонуна байланган from эрежеси дал келбейт. Бул тармактагы ар бир тикет, кутудан иштейт, кардардан иштебейт деген — ошол фактынын кайталанышы.
Кардарды болжолдоонун ордуна аны туураңыз. Маршруттоо издөөсүн түз суроого болот, булак менен кирүү интерфейсин берип:
ip route get 198.51.100.9 from 172.31.7.42 iif tun0
ip route get 198.51.100.9 from 172.31.8.42 iif tun0
ip route show table 201
Аны ар бир пул үчүн бир жолу иштетиңиз. Эгер эки буйрук бирдей интерфейс кайтарса, эрежелер пулдарды бөлбөйт, ал эми себеби — жетишпеген эреже же экөөнө тең туура келүүчү жогорку артыкчылыктуу эреже. Эгер алар ар башка интерфейстерди кайтарса, бирок кардар дагы эле ийгиликсиз болсо, бузуктук издөөдөн кийин жана эрежелерди кароону токтотсоңуз болот.
Артыкчылык, файлдагы орун эмес
Эрежелер артыкчылыктын өсүү тартибинде бааланат, маанилүүсү — сан, сиз терген тартип эмес. local таблицасы 0 артыкчылыкта, main таблицасы 32766да, демейки эреже 32767де, ошондуктан демейки артыкчылык менен кошулган эреже тизменин аягына жакын түшөт жана дээрлик баарына утулат.
ip rule show
ip rule add from 172.31.8.0/24 lookup 201 priority 1000
ip -4 route show table 201
Айкын артыкчылык көздөлгөн тартипти файлда жана кароодо көрүнүктүү кылат. Ал ошондой эле кийинки кошумчанын бар эреженин алдына үнсүз секиришине жол бербейт, бул — иштеп жаткан саясаттын байланышсыз өзгөрүүдөн кийин токтошунун эң кеңири тараган себеби.
Толук эмес таблицага шилтеме кылган дал келүүчү эреже — экинчи тузак. Эгер 201 таблицасында демейки маршрут болсо, бирок максатка маршрут болбосо, пакет ыргытылат же туура эмес жерге жиберилет, ал эми эреже обочолонгон түрдө толук туура көрүнөт. Эрежени эмес, таблицаны окуңуз. Эреже — шилтеме, ал эми бош таблица — эч жакка шилтеме.
Кайтаруу жолу дагы деле болушу керек
Булак саясаты чыгууну тандайт. Ал кайтаруу жолун жаратпайт. Эгер экинчи пул өнөктөш туннелинен чыкса, өнөктөш 172.31.8.0/24кө кантип жетүүнү билиши керек, же шлюзге кайтуучу маршрут менен, же өзү мурун билген которулган даректерди алуу менен.
Булардын ортосунда тандоо — көрүнүктүү кесепеттери бар долбоор чечими. Кардар диапазонун кайра маршруттоо өнөктөштө ар бир кардардын инсандыгын сактайт жана анын сиздин префиксиңизди кабыл алышын талап кылат. Которуу пулду бир даректин артына жашырат жана өнөктөштүн ушул даректи гана кабыл алышын талап кылат, анын баасы — сиздин жана анын журналдары ким туташканы боюнча эми макул болбойт.
Эмнени тандасаңыз да, аны пул аныктамасынын жанына жазыңыз. Бирөөнүн эсинде гана бар кайтаруу маршруту — өнөктөш фаерволду алмаштырганга чейин жашап, андан кийин калыбына келтирүүгө бир күн кетүүчү дал ошол нерсе.
Саясатта шлюздун өз туннелин кармабаңыз
Кардарлар үчүн жазган эрежелер шлюз жараткан трафикке да колдонулат, эгер аны чыгарып салбаңыз. Белгиге же чыгуу интерфейсине байланган кең эреже шлюздун өнөктөш менен өз байланышын кармап калышы мүмкүн, ошондо саясатты ташыган туннель саясат менен маршрутталат. Бул провайдердин бузуктугуна окшош цикл же үзүлүү жаратат.
Ар бир эрежени долбоор уруксат кылганча тарылтыңыз: булак префикси, кирүү интерфейси жана колдоо болсо, кардар пакеттери гана ташыган белги. Андан кийин ар бир эреже өзгөрүүсүнөн кийин шлюздун өз байланышын текшериңиз, анткени бузуктук өзүнө шилтеме жасайт жана кардар сыноосунда көрүнбөйт.
ip-rule колдонмосунун бети селектордун жана артыкчылыктын семантикасын документтештирет. Аны ар бир пулдун издөө сыноосу менен айкалыштырыңыз, ошондо долбоор текшерилүүчү болот, бул — бир жылга чыдаган саясаттык маршруттоо менен баары кармоодон корккон маршруттоонун айырмасы.