Таны iptables дүрэм гүүрээр дамжсан VPN трафикийг яагаад хэзээ ч хардаггүй вэ
Гүүрээр дамжсан кадрууд таны хянаж буй IP хэлхээг тойрч болно. Өөр дүрэм нэмэхийн өмнө уугуул bridge бүлгийг хуучин br_netfilter-тэй харьцуулна уу.
Нэг хост дээрх хоёр виртуал машин гүүрээр LAN-д хүрдэг бөгөөд ip forward хэлхээнд тавьсан дүрэм хэзээ ч хөдөлдөггүй тоолуурыг харуулж байна. Кадрууд бодит, трафик өнгөрч байгаа ч дүрэм зүгээр л түүний замд байхгүй. Linux гүүрийн трафикийг илрүүлэх хоёр аргыг харьцуулах нь энэ чимээгүй байдлыг тайлбарлаж, нэг хуучин модуль ачаалах нь харагдахаас илүү муу хариулт гэдгийг ч тайлбарладаг.
Нэг хостоор дамжих хоёр зам
Пакет энэ хостоос хоёр огт өөр замаар гарч болох бөгөөд ялгаа нь аль дэгээнүүд түүнийг харахыг тодорхойлдог. Хэрэв очих газар физик портын цаана байгаа бөгөөд кадр гүүрний хоёр портын хооронд солигдож байвал хост Ethernet кадрыг дамжуулна; маршрутлалтын код асуухгүй бөгөөд маршрутлагдсан үсрэлт болохгүй. Хэрэв очих газар нь хост өөрөө эсвэл туннелийн интерфейсээр хүрэх сүлжээ бол пакет маршрутлагдаж, IP давхаргын дэгээнүүд үнэхээр үйлчилнэ. Энэ салбарыг санаж яваарай, учир нь хэлхээ, бүлгийн тухай дараагийн бүх асуулт кадрын энэ хоёр замын алийг сонгохоос үүсдэг.
Энэ ялгаа нь юу ч тооцдоггүй дүрмийн ард байх бүх түүх юм. veth9a1-аас enp3s0 хүртэлх гүүрэн кадр нь IP стекийг биш, гүүрийг гаталдаг тул ip forward хэлхээ тааруулах юу ч хардаггүй. Хуучин жишээн дэх интерфейсийн нэрс танд аль зам байгааг тодорхойлохгүй, тиймээс эхний алхам нь дүрмийн багц биш, топологийг харах явдал юм.
Туннель нэрлэхэд үнэ цэнэтэй гурав дахь тохиолдлыг нэмдэг. TUN төхөөрөмж IP пакетуудыг хостод хүргэдэг тул тэдгээр нь маршрутлагдаж, IP хэлхээгээр үнэхээр дамждаг бол гүүрт холбогдсон TAP төхөөрөмж кадруудыг хүргэж, гүүрийн тохиолдол шиг ажилладаг. Төхөөрөмжийн төрөл шийддэг, бүтээгдэхүүний нэр биш.
Гүүрэн кадрыг харж чадах хоёр бүлгийг харьцуулна уу
Linux нь nftables-ийн bridge бүлгээр дамжуулан уугуул гүүрийн шүүлтийг дэмждэг бөгөөд нислэгийн үеэр кадрыг шалгаж хаяхын тулд ямар ч хуучин модуль хэрэггүй. Цөмийн өөрийнх нь гүүрийн баримт бичиг энэ зөвлөмжийг шууд өгдөг бөгөөд хайлтын үр дүн модуль ачаалахыг хэлэхээс өмнө үүнийг мэдэх нь зүйтэй.
| Observation point | What it sees | What it costs |
|---|---|---|
nftables bridge family chains | Ethernet frames forwarded between bridge ports, in both directions | Rules must be written in bridge syntax with link-layer matches |
Legacy br_netfilter plus an ip chain | Bridged IPv4 and IPv6 packets, re-exposed through IP-layer hooks | Existing host rules may begin matching traffic they never saw before |
inet chain for routed traffic | Packets the host routes, including traffic arriving from a TUN device | No visibility into purely switched frames |
iptables-ийн оронд nft командыг ашиглах нь дүрмийг зөв бүлэгт дангаараа байрлуулдаггүй. bridge бүлэгт зарласан хэлхээ кадруудыг хардаг; ip, ip6 эсвэл inet-д зарласан хэлхээ тэдгээрийг хардаггүй, аль бинар файл үүсгэсэнээс үл хамааран. Бүлэг нь хэлхээний шинж чанар, түүнийг бичсэн хэрэгслийн шинж биш.
Хуучин зам өөрөөр ажилладаг тул зуршилаар тал сонгохын оронд харьцуулах нь зүйтэй. br_netfilter ачаалж, bridge-nf-call тохиргоог идэвхжүүлэхэд гүүрээр дамжсан IPv4 ба IPv6 трафик IP давхаргын дэгээгээр дахин илэрдэг тул энгийн iptables дүрэм эцэст нь түүнтэй таарч чадна. Кадрууд өөрчлөгддөггүй; тэдний дамждаг дэгээнүүдийн багц өөрчлөгддөг бөгөөд энэ нь хост дээрх бүх одоогийн дүрэмд шинэ үзэгчид бий болсон гэсэн үг.
Дүрэм нэмэхийн өмнө бодит замыг уншина уу
Гурван команд таны байр суурийг тодорхойлно: гүүр юунд холбогдсон, хуучин модуль идэвхтэй эсэх, bridge бүлэгт ямар хэлхээ аль хэдийн байгаа. Ямар нэгэн зүйл бичихээс өмнө тэдгээрийг ажиллуул, учир нь хариулт нь хоёр загварын алийг өргөжүүлж байгааг тодорхойлно. Энэ алхмыг алгасах нь зөв дүрэм юу ч дамждаггүй хэлхээнд орж дуусах зам юм.
bridge link show
lsmod | grep br_netfilter
nft list ruleset | grep -A4 "chain forward"
Гаралт тохиолдлуудыг цэвэрхэн ялгадаг. Гүүрний доор жагсаасан портууд аль интерфейсүүд солигдож байгааг хэлнэ; хоосон lsmod үр дүн нь гүүрэн кадруудын IP давхаргад ямар ч харагдах байдал байхгүй гэсэн үг; bridge бүлгийн одоо байгаа forward хэлхээ нь бодлогын эзэн аль хэдийн бий бөгөөд таны дүрэм өөрийн шинэ хэлхээнд биш, тэнд хамаарна гэсэн үг.
Дараа нь буцааж уншихад хялбар нэг дүрэм нэмж, тоолууртай, шийдвэрийг өөрчлөхгүйгээр, нэг төлөөлөх урсгалыг гүүрээр дамжуул. Хөдөлж буй тоолуур кадр дүрэмд хүрснийг нотолно. Энэ нь зөвхөн үүнийг л нотолдог тул татгалзсан замаар ч үргэлжлүүл, учир нь бүгдийг хүлээн авдаг бодлого ч хөдөлж буй тоолуур үүсгэдэг.
nft add rule bridge filter forward iifname "veth9a1" oifname "enp3s0" counter acceptХуучин модуль зан төлөвийг хаана өөрчилдөг
Ажиллаж буй гүүр дээр хуучин замыг идэвхжүүлэх нь харагдах байдал нэмэх төвийг сахисан үйлдэл биш. Гүүрийн трафикт өмнө нь хүрэх боломжгүй байсан дүрмүүд хүрэх боломжтой болдог, үүнд өөр интерфейст зориулж бичсэн хост дүрмүүд ч орно, мөн ip forward хэлхээний өгөгдмөл drop бодлого өмнө нь хөндөгдөхгүй өнгөрдөг байсан кадруудад гэнэт үйлчилж болно. Тэр гүүрээр удирдагддаг хост дээр үр дүн нь консолгүй түгжигдэх явдал юм. Энэ нь таамаглалын доголдлын горим биш; саяхан өргөжүүлсэн замаар хүрч буй машин дээр дэгээнүүдийн багцыг өргөжүүлэхийн энгийн үр дагавар юм.
Илүү аюулгүй дараалал нь аль бүлэг бодлогыг эзэмшихийг шийдэх, дүрмүүдийг тэнд бичих, ямар ч sysctl өөрчлөхөөс өмнө бие даасан сэргээх замыг хадгалах явдал юм. Хэрэв хоёр бүлэг дүрэм хадгалж байвал аль нь эрх бүхий болохыг баримтжуул; давхцах хоёр бодлого нь пакетыг нэг газар хүлээн авч нөгөө газар хаях, уншихаар нэг ч файл байхгүй байх зам юм.
Тусгаарлалт өөрөө бүрэн загвар шаарддаг хэвээр. Нэг эх сурвалжийг нэг очих газарт зөвшөөрөх нь зөвхөн нэг урсгал ажиллаж байгааг нотолдог бол шаардлага нь ихэвчлэн VM хөршүүд эсвэл хостод хүрч чадахгүй байх явдал юм. Татгалзах дүрмүүдийн тоолуурууд хүлээн авах дүрмийн тоолуураас илүү чухал, учир нь хүлээн авах тоолуур нь хөдөлнө гэж та аль хэдийн хүлээж байсан тоолуур юм.
Эцэст нь хостын оролтын тохиолдлыг тусад нь байлга. Гүүрний өөрийн IP-д хаягласан трафик нь forward биш, input-д ирдэг бөгөөд forward дахь дүрэм аль бүлгийг сонгосон ч түүнийг хэзээ ч харахгүй. Гурван тохиолдол, хоёр бүлэг, нэг сургамж: зам нь дэгээг тодорхойлж, дэгээ нь таны дүрэм ерөөсөө байгаа эсэхийг тодорхойлдог.