VPN клиентүүд холбогддог ч интернет байхгүй: гурван дутуу хэсэг
ping-д хариулдаг туннельд дамжуулалт, орчуулга, дамжуулалтын дүрэм хэрэгтэй хэвээр. Клиентийг дахин засахын өмнө гурвын алийг нь дутуу байгааг тодорхойл.
Клиент хаяг авдаг, сервер ping-д хариулдаг, гэсэн ч хуудас бүр хугацаа хэтэрч байна. Ихэнх хүмүүс энэ үед клиентийн профайлыг засаж эхэлдэг бөгөөд энэ нь ихэвчлэн дэмий хөдөлмөр: туннель боссны дараа сервер чиглүүлэгч шиг ажиллах ёстой. Багц гарч, хариу буцаж ирэхийн өмнө гурван нөхцөл нэгэн зэрэг биелэх ёстой бөгөөд аль нь дутуу байсан ч шинж тэмдэг ижил.
Ажиллаж буй туннель яагаад гадагш гарах замгүй байна
Цөм нь интерфейсүүдийн хооронд багц дамжуулах ёстой бөгөөд энэ нь ихэнх Linux түгээлтүүдэд анхдагчаар унтарсан байдаг. Хөдөлгөөнийг гадаад ертөнц хариулж чадах хаяг руу орчуулах ёстой, хэрэв дээд чиглүүлэгч бүр туннелийн дэд сүлжээ рүү буцах замыг аль хэдийн мэдэхгүй бол. Галт хананы дамжуулалтын зам нь хөдөлгөөнийг хоёр чиглэлд, хариултуудыг оролцуулан зөвшөөрөх ёстой.
Эдгээрийн аль алиныг нь тусад нь засах боломжтой бөгөөд энэ нь урхи юм. Орчуулгын дүрэмгүйгээр дамжуулалтыг асаахад багцууд хувийн эх үүсвэртэй, буцах замгүйгээр гарна. Дамжуулалтын дүрэмгүйгээр орчуулга нэмэхэд цөм багцыг нэг алхам хожуу хаяна.
Тиймээс клиент биш, гурван давхаргыг шалгаж, үр дүн утга учиртай байхын тулд нэг удаад нэгийг өөрчил.
Дамжуулалт бол байнгын болгох ёстой цөмийн унтраалга
Өөрчлөхийн өмнө одоогийн утгыг шалгаж, дараа нь тохируулаад өөрчлөлт хүчин төгөлдөр болсныг батал.
sysctl net.ipv4.ip_forward
sysctl -w net.ipv4.ip_forward=1
sysctl net.ipv4.ip_forwardЭхний команд одоогийн утгыг мэдээлнэ, хоёр дахь нь ажиллах үед тохируулна, гурав дахь нь бичилт ажилласныг батална. Ажиллах үеийн утга дараагийн дахин ачааллахад алга болдог тул ажиллаж байсан сесс засвар үйлчилгээний дараа ямар ч тохиргооны өөрчлөлтгүйгээр эвдэрч болно.
Үүнийг /etc/sysctl.d/-ийн доорх файлд байнгын болгож, дараа нь мэдэхийн тулд дахин ачаалахын оронд тэр файлыг хэрэглэ. FreeBSD-д тэнцэх нь net.inet.ip.forwarding, байнгын байдлын хувьд rc.conf дахь gateway_enable=YES. Дамжуулалт унтарсан гэж мэдээлдэг төхөөрөмж «багцууд ирдэг ч юу ч буцаж ирдэггүй» гэсэн бүхэл ангиллын тайланг тайлбарладаг. Шинэчлэлт бүрийн дараа тохиргоог шалга, учир нь дахин бүтээсэн цөм эсвэл сольсон төхөөрөмжийн дүрс хэнд ч хэлэлгүйгээр үүнийг буцааж тавьж болно.
masquerade эсвэл нэг тогтмол орчуулгын хаягийг сонго
Динамик гадаад хаягтай үед masquerading нь хамгийн энгийн зөв хэлбэр. Туннелийн дэд сүлжээг эх үүсвэр, гадаад интерфейсийг гарах зам гэж нэрлэ.
iptables -t nat -A POSTROUTING -s 10.9.0.0/24 -o eth0 -j MASQUERADEСтатик нийтийн хаягтай үед эх үүсвэрийг яг тэр хаяг руу орчуулах нь илүү таамаглахуйц, шалгахад хялбар.
iptables -t nat -A POSTROUTING -s 10.9.0.0/24 -j SNAT --to-source 198.51.100.10Хоёр дахь хэлбэр засвар үйлчилгээний урхи агуулна: дараа нь өөрчлөгдөх хатуу кодлосон хаяг туннелийг ажиллуулж байх хооронд интернетийн хандалт чимээгүй зогсдог. Нэг бол masquerade ашигла, эсвэл үйлчилгээ үзүүлэгч чамайг зөөх бүрт дүрмийг шинэчил. Интерфейс ч бас чухал, учир нь өөрийн дээд туннелийг хуваалцдаг чиглүүлэгч физик WAN-аар биш, тэр туннелээр орчуулах ёстой.
Шүүлтүүрийн хүснэгт бол гурав дахь хаалга
Дамжуулалт болон орчуулга хоёулаа зөв байж болох ч багц шүүлтүүрийн хүснэгтэд үхдэг. ufw байнга буруутан: түүний дамжуулалтын бодлого DROP хэлбэрээр ирдэг бөгөөд бусад тохиргоо бүрэн зөв харагдаж болох ч тэр нэг тохиргоо хөдөлгөөнийг алдаг. Үүнийг өсгөх нь чекбокс биш, санаатай аюулгүй байдлын шийдвэр.
iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o tun0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPTЭхний дүрэм туннелээс гадагш шинэ хөдөлгөөнийг зөвшөөрч, хоёр дахь нь зөвхөн хариултуудыг буцаана. Хоёуланг нь туннелийн дэд сүлжээ болон зорьсон очих газарт хүртэл нарийсга, учир нь туннелийн интерфейс дээрх ерөнхий зөвшөөрөл VPN-ийг баталгаажуулж чадах хэн бүхэнд нээлттэй гарах цэг болгоно.
Гүүрэн туннельд өөр хариулт хэрэгтэй. Хаяг нь физик портод биш, гүүрэнд хамаарна, тиймээс интерфейсийг боол болгох нь өмнө нь байсан хаягийг арилгаж, гүүр өөрөө хаяг авах хүртэл хост хүрэхгүй мэт харагдана, үүнийг dhclient br0 өгч чадна. Тэр алдаа VPN-ийн асуудал мэт харагдаж байгаа ч хоёр дахь түвшний асуудал юм. Галт хананд хүрэхийн өмнө гүүрийн өөрийнх нь хаягийг шалга, учир нь шүүлтүүрийн өөрчлөлт илгээх хаяггүй болсон хостыг засаж чадахгүй.
Хуудас хэзээ ч ачаалагдахгүй үед хаанаас харах вэ
Туннель байгааг батлахын тулд серверийн туннелийн хаяг руу ping хий. Дараа нь клиентээс нийтийн хаяг руу traceroute ажиллуулж, хаана зогсож байгааг унш: сервер дээр багц ирдэг боловч дамжуулагдахгүй, орчуулагдахгүй; серверийн цаана асуудал дээд талд байгаа бөгөөд чиний гарт биш.
ping -c 3 10.9.0.1
traceroute -n 198.51.100.10Эхний команд туннель хөдөлгөөнийг сервер рүүгээ хүргэдэг болохыг баталж, хоёр дахь нь багц гадагш хэр хол хүрдэг болохыг харуулна. Туннелийн хаяг дээр төгсдөг мөр сервер дээрх дамжуулалт эсвэл орчуулгыг заана, нэг үсрэлтийн дараа зогсдог мөр үйлчилгээ үзүүлэгч эсвэл дээд чиглүүлэгчийн буцах замыг заана.
Сервер дээр клиент хуудас ачаалж байх үед гадаад интерфейсийг ажигла. Хувийн эх үүсвэрийн хаягтай гарч буй хөдөлгөөн орчуулга дутуу гэсэн үг, харин хариу огт байхгүй нь дамжуулалтын зам эсвэл дээд буцах маршрут үүнийг хаяж байгааг илтгэнэ.
Алсын клиентүүд серверийн LAN дахь хост руу хүрэх шаардлагатай бол LAN-д туннелийн дэд сүлжээ рүү буцах маршрут хэрэгтэйг сана. Энэ нь орчуулга биш, чиглүүлэлт бөгөөд интернетийн зам эцэст нь ажилласны дараа хамгийн их мартагддаг алхам юм.