NAT таны VPN сервер яг аль эх сурвалжийн хаягийг хардагийг шийддэг
Таны зөөврийн компьютерын хаяг VPN серверт хэзээ ч хүрдэггүй. NAT үүнийг сүүлийн үсрэлтэд дахин бичдэг бөгөөд туннелийн IP дараа нь олгогддог. Хоёр төгсгөлийг хэрхэн харьцуулах вэ.
VPN сервер таны зөөврийн компьютерын хаягийг пакетаас уншиж, бүртгэлд бичдэг гэж та төсөөлдөг. Түүний уншдаг зүйл бол сүүлийн NAT үсрэлт гадаад толгойд хийсэн зүйл бөгөөд хотспот болгон ашиглаж буй утсанд энэ нь ихэвчлэн хэдэн зуун бусад захиалагчтай хуваалцдаг хаяг байдаг. Таны машины өөрийн 192.168.x.x хаяг тэр толгойд интернетийг хэзээ ч гатлахгүй бөгөөд туннелийн хаягийг холболт аль хэдийн тогтсоны дараа сервер олгодог. Тиймээс серверийн бүртгэл болон зөөврийн компьютер дээрх ip addr таарахгүй үед аль нь ч буруу биш; тэд нэг сессийн өөр өөр давхаргыг дүрсэлдэг.
Гурван хаяг, бүртгэлд зөвхөн нэг нь
Төөрөгдөл нь гурван хаягийг нэг болгон нэгтгэснээс үүсдэг. Тус бүр өөр эзэнтэй, өөр толгойд амьдардаг бөгөөд серверт өөр замаар хүрдэг.
| Address | Who assigns it | Where it sits | Visible to the VPN server |
|---|---|---|---|
Device address, e.g. 192.168.1.24 | Your router via DHCP | Outer header, before translation | No, rewritten in place |
| Translated address and port | Router, ISP CGNAT, or both | Outer header, after translation | Yes, this is the tuple it logs |
Tunnel address, e.g. 10.8.0.6 | The VPN server itself | Inner header, after decapsulation | Yes, but it chose it |
Холболтын мөчид зөвхөн дунд мөр нь тодорхойгүй байдаг. Сервер үүнийг демоноос хамааран өөрийн хамтрагчийн хүснэгт, төлөвийн файл эсвэл урсгалын бүртгэлд бичдэг: WireGuard үүнийг төгсгөлийн цэг гэж нэрлэдэг, OpenVPN-ийн төлөвийн файл үүнийг Real Address гэж тэмдэглэдэг, strongSwan үүнийг IKE_SA-ийн алсын хост гэж мэдээлдэг. Энэ утга нь өөр эх сурвалжаас пакет ирэх бүрт шинэчлэгддэг тул хэн ч юу ч дахин эхлүүлэхгүйгээр өөрчлөгддөг.
Доод мөр нь хүмүүс буруугаар таних мэдэгдэл гэж уншдаг зүйл юм. Энэ нь серверийн тохиргоонд байр суурийг тэмдэглэдэг бөгөөд хүн биш, учир нь сервер үүнийг өөрийн сангаас сонгосон. Хоёр хэрэглэгч өөр өөр өдөр ижил туннелийн хаяг авч болох бөгөөд нэг хүн хоёр төхөөрөмжөөс хоёрыг нь эзэмшиж болно.
Туннель ажиллаж байхад бүртгэсэн кортеж яагаад өөрчлөгддөг вэ
Хаягийн хөрвүүлэлт нь таймертай хүснэгт бөгөөд байнгын холбоо биш. Гэрийн маршрутизатор сүүлийн пакетын дараа UDP-ийн буулгалтыг хэсэг хугацаа хадгалдаг, операторын гарц портуудыг өөрийн хуваарийн дагуу дахин ашигладаг, Wi-Fi-аас LTE руу шилжсэн утас огт өөр эх сурвалжтай буцаж ирдэг. Энд Linux-ийн conntrack-ийн өгөгдмөл утгууд хэрэгтэй хэмжүүр болдог: nf_conntrack_udp_timeout нь 30 секунд, урсгалын хувилбар нь 120 тул тайван туннель хэрэглэгч анзаарахаас хамаагүй өмнө буулгалтаа алдаж болно.
Туннель амьд үлддэг шалтгаан нь протокол хаягийг биш, хамтрагчийг баталгаажуулдагт оршино. WireGuard гар барилдсаны дараа төлөвгүй тул баталгаажсан аливаа пакет хадгалсан төгсгөлийн цэгийг шинэчилж, дахин холболт дараагийн пакет дээр эдгэрдэг; persistent-keepalive = 25 яг үүний тулд байдаг — идэвхгүй үед буулгалтыг дулаан байлгах зорилготой. OpenVPN-ийн --float мөн адил ажил хийдэг бөгөөд баталгаажсан клиент шинэ хаяг, портоос үргэлжлүүлэх боломж олгодог. float өгөгдмөлөөр унтарсан 2.4 болон 2.5 бүтээцүүдэд дахин холболт сессийг дахин тохируулж, клиент дахин холбогддог.
IPsec тэнд илүү олон хөдөлгөөнт хэсгээр хүрдэг. IKEv2 NAT илрүүлэх ачаалал дахь эх ба очих хэшийг харьцуулж хөрвүүлэлтийг анзаарч, UDP 4500 инкапсуляц руу шилжиж, keepalive-уудыг шинэ кортеж хүртэл дагадаг. keepalive-ууд хаагдвал SA зөвхөн цаасан дээр ажиллаж, нэг чиглэлийн урсгал чимээгүй зогсдог.
Сервер юуг хамааруулж чадах бөгөөд юуг чадахгүй вэ
Алах ёстой домог бол хөрвүүлэлт таныг оператороос нуудаг гэдэг юм. Энэ нь шошгыг өөрчилдөг, ажиглалтыг биш. Операторын NAT-ийн ард байгаа гарц 100.64.0.0/10 огторгуй эсвэл олон захиалагчийн хуваалцдаг нэг нийтийн хаягийг хардаг бөгөөд урсгалыг гэрчилгээний субъект, WireGuard-ийн нийтийн түлхүүр, олгогдсон туннелийн хаяг, байт тоолуур болон цаг хугацааны цонхтой холбож чаддаг. Эдгээрийн аль нь ч таны LAN хаягийг шаарддаггүй.
Хязгаарууд нөгөө чиглэлд ч ажилладаг. Бүртгэл дэх хуваалцсан хаяг гэр бүлд биш, гарц руу заадаг; нэг хөрвүүлсэн хаягаас өөр порт дээрх хоёр сесс нь өөр төхөөрөмж; хоёр өөр өдрийн ижил хаяг нь порт дахин ашиглагдсан бол хоёр хамааралгүй захиалагч байж болно. Зөвхөн хамтрагчийн түлхүүр бүртгэдэг сервер нь дансны өгөгдлийн сангүйгээр тэдгээрийг харилцагчтай холбож чадахгүй, зөвхөн хаяг бүртгэдэг сервер нь нэг маршрутизаторын ард байгаа зөөврийн компьютер, утсыг ялгаж чадахгүй.
Таамаглахын оронд хоёр төгсгөлийг харьцуулаарай
Юу болсныг тодруулахын тулд ижил холболтыг хоёр төгсгөлд нэг мөчид барьж аваад хаягийг биш, кортежийг харьцуулаарай. Клиент дээр, ямар ч хөрвүүлэлтээс өмнө:
ss -uapn 'dport = :51820'
ip -4 route get 203.0.113.10
wg show wg0 endpoints
Дараа нь маршрутизатор эсвэл CGNAT гарц дээрх хөрвүүлэлтийн бичлэг болон серверт эцэст нь юу ирж байгааг уншина уу:
conntrack -L -p udp --dport 51820
tcpdump -ni eth0 udp port 51820
Зөрүүний ихэнхийг гурван загвар тайлбарладаг. Сервер дээрх эх порт нь локал портоос ялгаатай бөгөөд очих газар таарч байвал: энгийн портын хөрвүүлэлт. Сервер дээрх эх хаяг нь таных биш ISP блокт хамаарах бол: дор хаяж нэг нэмэлт NAT давхарга. Пакетууд идэвхгүй байдлын дараа зогсоод шинэ портоор үргэлжилбэл: буулгалтын хугацаа дууссан, маршрутын гэмтэл биш. Хэрэв цагийн тэмдэглэгээ нэг хоёр секундээс илүү зөрвөл та хоёр өөр оролдлогыг харьцуулж байна.
Ялгаа нь хаана юмыг эвддэг вэ
Серверийн гэмтэл мэт харагдах тасалдал ихэвчлэн эндээс эхэлдэг. Гэрийн хаягт чинь бэхэлсэн хандалтын дүрэм ISP-ийн түрээс өөрчлөгдсөний дараа бүтэлгүйтдэг. Хөрвүүлсэн хаягтай таарч буй fail2ban дүрэм тэр гарцын ард байгаа бүх захиалагчийг нэгэн зэрэг хаадаг. Тогтмол алсын хаягтай сайт хоорондын хамтрагч гар утасны холбоос өөрчлөгдсөний дараа түлхүүр шинэчлэхээ болидог. Туннелийн протокол хэвийн байсан; гадаад кортежийн талаарх таамаг тийм биш байв.
Мөн адил төөрөгдөл серверийн талд ч илэрдэг. Хэрэв VPN хайрцаг өөрөө NAT-ийн ард байвал портын чиглүүлэлт болон ажиллах чиглүүлэлтийн зам хэрэгтэй; strongSwan-ийн чиглүүлэлтийн гарын авлага IPsec-ийн хувьд энэ тохиолдлыг хамардаг. Зөвхөн хувийн хаягаар хүрэх сервер нь клиентүүдийнхээ танилцуулж буй хөрвүүлсэн кортежийг хэзээ ч хардаггүй бөгөөд энэ нь клиентүүдийг хөрвүүлэхээс өөр асуудал юм.
Энэ дөрвөн шалгалтыг дараалан хийж, эхний бүтэлгүйтсэн дээр зогсоорой:
- Хоёр төгсгөлд нэгэн зэрэг барьж аваад; эх порт, очих порт болон цагийн тэмдэглэгээ таарч байгааг батал.
- Серверийн хамтрагчийн жагсаалтаас хүлээж байсан хаягийг биш, одоо эзэмшиж байгаа хаягийг унш.
- conntrack эсвэл NAT хүснэгтээс бичлэг болон түүний үлдсэн хугацааг шалга.
- Клиент дээрх туннелийн интерфейсийн хаяг LAN хаягтай биш, серверийн олгосон хаягтай таарч байгааг батал.
Хэрэв хоёр барилт кортежийн хувьд санал нийлж, туннель үл хэвээр бүтэлгүйтвэл хөрвүүлэлт таны асуудал биш; гар барилдалт болон туннелийн доторх маршрутын хүснэгт рүү шилжинэ үү.