Оффисын локал сүлжээн дэх VPN клиент яагаад бүх хариуг алддаг вэ
Оффисын локал сүлжээ болон ижил дэд сүлжээний туннель дээр байгаа зөөврийн компьютер буруу интерфейсээс хариулдаг. Сул буцах замын шүүлтүүр энэ чимээгүй байдлыг тайлбарлана.
Зөөврийн компьютер Ethernet-ээр оффисын /24 сүлжээнд сууж, мөн ижил /24-д амьдардаг OpenVPN серверт холбогддог. Хамтран ажиллагч туннелийн хаяг руу ping илгээдэг; хүсэлт тодорхой ирдэг боловч юу ч буцаж ирдэггүй. Туннелийн бүртгэл цэвэр, хөтөч ажиллаж байгаа тул туннель нь буруу сэжигтэн. Хүлээн авагч машин дээрх IPv4 эх сурвалжийн шалгалт пакетыг ямар нэгэн зүйл уншихаас өмнө хаядаг.
Хаях нь пакетыг ямар нэгэн зүйл уншихаас өмнө болдог
Эх сурвалжийн шалгалт ирж буй пакет бүрт нэг асуулт тавьдаг: хэрэв энэ хост тэр эх сурвалжид хариулбал, хариулт пакет дөнгөж ирсэн интерфейсээр гарч гарах уу? Хариулт нь үгүй бол цөм пакетыг ирэх үед нь хаядаг. Үүнийг ямар ч сокет, ямар ч дамжуулалтын зам хэзээ ч хардаггүй, тиймээс туннель дээрх бичлэг программ хэзээ ч авдаггүй хүсэлтийг одоо ч бүртгэдэг.
Энд клиент өөрийн туннель дээр 10.66.0.9-ийг барьж, OpenVPN сервер оффисын префиксийн доторх 192.168.80.10-аас хариулдаг. 192.168.80.25 дээрх хамтран ажиллагч туннелийн хаяг руу ping илгээдэг тул хүсэлт локал сүлжээг гаталж, сервер үүнийг туннель руу чиглүүлж, оффисын эх хаягийг агуулан клиентийн туннелийн интерфейс дээр ирдэг. Тэр машины маршрутжуулалтын хүснэгтэд оффисын префикс Ethernet төхөөрөмжид хамаарах бөгөөд туннельд биш. Шалгалт ирэх интерфейсийг маршруттай харьцуулж, зөрүү олж пакетыг хаядаг тул хамтран ажиллагч бүрэн алдагдлыг хардаг бол хоёр төгсгөл эрүүл туннелийн талаар мэдээлдэг.
Толин тусгалын чиглэл ижил хэлбэртэй: клиент оффис руу эхлэхэд хариултууд оффисын талд ижил шалтгаанаар хаягдаж болно. Зөвхөн нэг чиглэлд шалгасан засвар ихэвчлэн хоёр дахь тасалбар болж буцаж ирдэг.
Аливаа sysctl-д хүрэхээс өмнө мөрдөгдөж буй горимыг нотол
Тархалтын өгөгдмөл утгад найдахын оронд бодит утгуудыг уншина уу, учир нь интерфейс тус бүрийн тохиргоо шийдвэрийн хагас нь л юм. Мөрдөгдөж буй горим нь интерфейсийн утга ба all утгын их нь тул туннелийн интерфейс дээрх тэг нь all нэг байхад юу ч гэсэн үг биш. Хатуу горимын шийдвэр нь маршрутжуулалтын шийдвэр тул цөмийн хийх хайлтыг хийж, түүний хариултыг пакет үнэхээр ирсэн интерфейстэй харьцуул.
tcpdump -ni tun0 icmp and host 192.168.80.25
ip route get 192.168.80.25
sysctl net.ipv4.conf.all.rp_filter net.ipv4.conf.tun0.rp_filter
Дараа нь алдааны тоолуурыг харж ping-ийг давтана уу. Бичлэг аль хэдийн харуулж буй хүсэлтийн дэргэд өсөж буй тоо нь энэ хаялтын гарын үсэг бөгөөд алга болсон маршрутынх биш. Тэнд байхдаа Ангарагийн пакетын бүртгэлийг асааж, цөм няцаасан эх сурвалж, интерфейсийг нэрлэх болтугай. Хамтдаа тэд шифр, галт хана, дутуу iroute-ыг тайлбар гэж үгүйсгэдэг.
Ямар нэгэн зүйл өөрчлөхөөс өмнө суурь шугамыг бич: хоёр утга, хайлтын сонгосон төхөөрөмж, ажигласан тоолуур. Өөрчлөлт таны бодсоноор болсон эсэхийг дараа нь хэлэх нь тэр бүртгэл юм.
rp_filter-ийн горим бүр үнэхээр юу хүлээн авдаг
Цөм интерфейс бүрт гурван утгыг харуулдаг бөгөөд эдгээр нь нэг дүрмийн гурван сүүдэр биш. Тэг нь шалгалтыг унтраана. Нэг нь хатуу бөгөөд эх сурвалж ирэх интерфейсээр буцаж маршрутжихыг шаарддаг. Хоёр нь сул бөгөөд хүснэгтэд эх сурвалж руу ямар нэг маршрут байхыг л шаарддаг, тэр хаашаа ч чиглэсэн бай.
| Value | Name | Accepts | Still rejects |
|---|---|---|---|
| 0 | off | any source at all | nothing on this check |
| 1 | strict | a source routed back out the arrival interface | a source whose route points elsewhere |
| 2 | loose | a source with any route in the table | a source with no route at all |
Энд чухал мөр нь сул нь бөгөөд түүний одоо ч няцааж буй зүйл. Таны хүснэгтийн хаана ч маршрутжих боломжтой хуурамч эх сурвалж нэвтэрдэг бол ямар ч маршрутгүй эх сурвалж одоо ч няцаагддаг. Зөөврийн компьютер дээр энэ нь нарийн концесс; бусдын урсгалыг дамжуулдаг маршрутжуулагч дээр энэ нь өргөн. Горим нь хостод хамаардаг тул ижил тоо хоёр газарт өөр жинтэй.
Энэ топологид аль мөр хэрэгтэй нь дадал биш, хүснэгтээс гардаг. Пакет хууль ёсны бөгөөд эх сурвалж нь маршрутжих боломжтой тул сул нь хүлээн авч, хатуу нь авахгүй. Энэ хэрэгт юу ч тэг шаарддаггүй бөгөөд тэгийг сонгох нь энд юу ч үнэгүй шалгалтыг арилгах байсан.
Хоёрдмол байдлыг арилгах хамгийн бага өөрчлөлтийг сонго
Сул горим нь тохирох хамгийн бага өөрчлөлт бөгөөд энэ нь хор хөнөөлгүй унтраалга биш, хатуу байдлын жинхэнэ бууралт юм. Топологи зөвшөөрвөл илүү сайн сонголт байдаг: давхцлыг арилга, хоёрдмол байдал алга болно.
Оффисын префикс зөвхөн Ethernet-ээр хэрэгтэй газарт профайлын татдаг маршрутуудаас гарга, хаяг нэг замаар хүрч болохоор болно. Хоёр зам үнэхээр зэрэг орших ёстой бол интерфейс бүр дээр шалгалтыг сулруулахын оронд бодлогын дүрмээр эх сурвалж, төхөөрөмжийг бэхэл. Энэ нь машин дээрх бусад бүх зүйлд хатуу шүүлтүүрийг хадгалж, үл хамаарах зүйлийг дараагийн инженер хайх газарт баримтжуулна.
Аль замыг сонгосон ч үүнийг амьд командад биш, sysctl drop-in файлд бүртгэ. all ба default түлхүүрүүдийг хамт тохируулж, дахин холбогдох нь хатуу горимыг чимээгүй сэргээж чадахгүй болго.
# /etc/sysctl.d/99-rp-filter.conf
net.ipv4.conf.default.rp_filter = 2
net.ipv4.conf.all.rp_filter = 2
sysctl --system
Сул горим юунаас татгалздаг, хаана
Сул горим нь ямар ч маршрут хүрч чадахгүй эх сурвалжийг одоо ч няцааж, санамсаргүйгээр маршрутжих боломжтой хуурамч эх сурвалжийг няцаахаа болиодог. Зөөврийн компьютер дээр энэ нь нарийн концесс. Өөрт хамааралгүй урсгалыг дамжуулдаг төхөөрөмж дээр ижил сонголт хамаагүй өргөн. Тиймээс ижил тохиргоо хаана ажиллаж байгаагаас хамаарч хоёр огт өөр утга агуулдаг.
Бусдын төлөө урсгал дамжуулдаг хост дээр шалгалтыг бүрэн унтраах нь зайлсхийх ёстой цорын ганц засвар. Тэг нь сул горимын болгоомжтой хадгалдаг шалгалтыг хаядаг. Хэрэв хост бусдын төлөө дамжуулдаг бол оронд нь өмнөх хэсгийн бодлогын дүрмийн сонголтыг дэмж.
Хоёр интерфейс, давхцаж буй префикс, одоо амжилттай болж буй нарийн туршилтыг нэрлэсэн тэмдэглэл үлдээ. Энэ нь шүүлтүүрийг тохируулсан гэсэн мөрнөөс дараагийн инженерт илүү хэрэгтэй.