Два VPN клијента, две јавне адресе: ускладите SNAT
SNAT по извору може да изабере јавну адресу, али само док гејтвеј још разликује клијенте. Проверите преостали извор пре него што напишете правило.
Два VPN клијента могу да изађу кроз две различите јавне IPv4 адресе, а правило које то чини краће је него што већина очекује. Не чини га функционалним синтакса iptables-а, већ стање пакета када стигне до излазног ланца: изворна адреса тамо још увек мора да разликује клијенте. Ако је ранији masquerade већ спојио обоје на једну адресу, ниједно правило по клијенту не може да поврати разлику. Прво решите то питање, затим напишите превод.
Који идентитет преживљава до гејтвеја
Правило се поклапа са изворном адресом пакета, не са корисничким именом VPN-а и не са именом које приказује клијентска апликација. Све што преводи пакет раније на путу одређује шта ваше правило још може да види. Покрените табелу nat по реду и пронађите тачку у којој је извор још увек посебан за сваког клијента.
iptables -t nat -S POSTROUTING
Прочитајте тај списак одозго. Правило masquerade близу врха преписује извор за сваки одговарајући ток, а уноси по клијенту постављени после њега поклапају се са адресом која више не постоји. Када два LAN уређаја деле један тунел и долазе као једна унутрашња адреса, дизајн мора да се промени пре заштитног зида: држите њихове изворне опсеге одвојене или дајте сваком своју унутрашњу адресу.
Повежите доделу унутрашње адресе са аутентификованим клијентом. Предаја те адресе другом уређају предаје и излазну политику, а превођење извора само по себи није доказ идентитета.
Превођење не може да измисли адресу
Свака јавна адреса мора бити додељена или усмерена ка овој излазној тачки, а одговори морају да нађу пут назад. Правило које шаље саобраћај са адресе ка којој нико не усмерава назад одбацује се на далеком крају или се одговара хосту који то никада није тражио. Примерак код добављача облака обично има јавну адресу преведену у адресу приватног интерфејса пре него што пакет изађе, па извор SNAT-а мора бити адреса коју ће добављач прихватити, а не вредност коју приказује конзола. Прочитајте модел адреса добављача и следите га уместо да копирате јавну вредност у сваки пакет.
У пракси то значи да проверите усмерени префикс у конзоли добављача пре него што дотакнете заштитни зид, и да користите адресу приватног интерфејса као извор превођења када је пресликавање један на један. Адресе у примерима испод долазе из документационих опсега, па је прво што треба заменити сам текст адресе.
Уметните пре општег masquerade-а
Потврдите излазни интерфејс и тренутни ланац пре него што било шта додате. Прво одређује које пакете правило може да поклопи, а друго показује шта већ стоји пред њим.
ip -4 route show default
iptables -t nat -L POSTROUTING -n -v --line-numbers
Прва команда именује интерфејс кроз који пакет ка интернету заиста излази. Друга исписује ланац са бројевима редова. Општи запис masquerade је ред изнад којег треба остати.
iptables -t nat -I POSTROUTING 1 -s 10.88.4.20/32 -o ens3 -j SNAT --to-source 198.51.100.77
iptables -t nat -I POSTROUTING 1 -s 10.88.4.21/32 -o ens3 -j SNAT --to-source 198.51.100.78
Два правила горе поклапају се са по једном унутрашњом адресом, ограничавају поклапање на излазни интерфејс и изричито постављају извор. Уметните, а не додајте: на позицији 1 она се оцењују пре реда masquerade. Редослед између њих није важан јер се њихови извори разликују. Замените ens3 оним што је наредба руте пријавила, и држите друге менаџере заштитног зида даље од истих кука, јер две алатке које пишу једну табелу уобичајен су разлог зашто исправно правило нема ефекта.
Докажите извор новим током
Stateful NAT везује превођење када ток почне и поново га користи за касније пакете, па сесија отворена пре промене задржава стари извор након промене. Само ново започето повезивање доказује правило.
conntrack -L -s 10.88.4.20 -p tcp --dport 443
Прочитајте смер одговора тог записа: његово одредиште је адреса коју далеки крај види као извор. Упоредите је са јавном адресом коју сте намеравали, и запис који носи стару адресу третирајте као доказ тока који је почео прерано, а не као покварено правило. Замолите клијента да отвори нову везу, затим поновите упит. Пражњење целе табеле праћења да би се тест наметнуо прекида сваку другу сесију на гејтвеју.
Превођење и даље не бира руту, не пропушта ток кроз филтер и не објављује долазну услугу. Погрешна рута и правило дозволе које недостаје настављају да не успевају и после савршеног SNAT правила. Проверите и IPv6 и сваку секундарну излазну путању, затим запишите парове унутрашња-ка-јавној у документацију заштитног зида, да би следећа промена почела од пресликавања, а не од текста правила.