Серверийн IP солигдсоны дараа SNAT дүрэм хуучныг нь хэвээр нэрлэж байна
Туннель холбогдож болох ч дамжуулсан пакет бүр зогсдог, учир нь орчуулгын дүрэм хостод байхгүй хаяг руу дахин бичсээр байна.
Сервер шинэ хаяг руу нүүсэн, клиентүүд хэвээр холбогдож байна, тэдний илгээсэн юу ч интернетэд хүрэхгүй байна. Яг энэ хуваагдал нь сэжүүр: сонсож буй сокет ба портын дамжуулалт нүүдлийг даван туулсан тул туннель босдог, харин дамжуулсан пакетуудад хэрэглэгдэх эх орчуулга хостод байхгүй хаягийг хэвээр нэрлэж байна. Дахин бичигдсэн тэдгээр пакетуудад өгөх хариу одоо байхгүй машин руу явна.
Холболт ба дамжуулалт өөр өөр газарт бүтэлгүйтдэг
Холболт тогтоох нь клиентүүдийн аль хэдийн мэддэг төгсгөлийн цэгээс хамаарна: нийтийн хаяг, түүний өмнөх портын дамжуулалт, доторх сонсогч. Дамжуулсан урсгал нь пакет туннельд орсны дараа гаргах хоёр дахь шийдвэрээс хамаарна, тэр үед хост эх сурвалжаа дахин бичиж, хариунууд буцах замаа олдог.
Хаягийн өөрчлөлт зөвхөн хоёр дахь шийдвэрийг эвддэг, тиймээс шинж тэмдэг нь "холбогдсон боловч интернет байхгүй" гэж уншигддаг. Энэ нь клиентийн талын ердийн шалгалтууд яагаад эрүүл харагддагийг ч тайлбарлана: гар барилт дуусч, клиент хаяг авч, серверийн туннелийн хаяг руу ping хүртэл хариулж болно. Гэмтэл нөгөө талд байхад клиент дээр цаг зарцуулагддаг тул дүрмийн хүснэгт нь хамгийн түрүүнд харах газар юм.
Засварын өмнө дүрэм ба түүний тоолуурыг уншаарай
Орчуулгын дүрмүүдийг тоолууртай нь жагсааж, тохируулсан эх сурвалжийг хост бодитоор эзэмшиж буй хаягуудтай харьцуул. Үхсэн хаяг руу дахин бичигдсэн дүрэм ихэвчлэн орох замд урсгал харуулдаг, учир нь пакетууд түүнд хүрч орчуулагддаг, харин буцах замд юу ч харагдахгүй.
sudo iptables -t nat -L POSTROUTING -n -v --line-numbers
ip -4 addr show
Тэнд байхдаа гурван талбарыг шалгаарай: эх тааруулалт дахь сан, дүрэм нэгийг нэрлэвэл гарах интерфейс, туннель хоорондын урсгалыг дахин бичихээс сэргийлэх үл хамаарах зүйл. Тэр үл хамаарах зүйлийг засварын үеэр алдахад амархан бөгөөд алдвал түншүүдийн хоорондын урсгал ажиллаж байгаа мэт харагдах боловч хариу нь хачин зам явдаг.
Хэрэв тоолуурууд тэг дээр гацсан бол пакетууд энэ дүрэмд хэзээ ч хүрэхгүй бөгөөд хаяг нь одоогийн асуудал биш. Гинжин хэлхээнд өмнөх өрсөлдөгч дүрмийг хай, энэ нь хэн нэгэн эхийг засахын оронд орлуулагч нэмэхэд тохиолддог. Дүрмийн дугаарыг нэг минутын өмнө тэмдэглэсэн гаралттай харьцуул. Дараалал нь тохиргооны хэсэг, гоёл чимэглэлийн дэлгэрэнгүй биш.
Эх сурвалжийг солих, эсвэл нэрийг нь дурдахаа болих
Хост тогтвортой хаягтай бол өөр нэгийг нэмэхийн оронд дүрмийг байранд нь соль. Дүрмийн дугаараар солих нь гинжин хэлхээний үлдсэн хэсэг хамаарах дарааллыг хадгална.
sudo iptables -t nat -R POSTROUTING 1 -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to-source 10.151.0.40
Хаягыг динамикаар олгох үед ямар ч эх сурвалж нэрлэхгүй, цөмд гарах интерфейсээс одоогийн хаягийг сонгохыг зөвшөөр. Энэ хувилбар дараагийн нүүдлийг засваргүйгээр даван туулна, ямар хаяг ашигласныг нуух үнээр.
sudo iptables -t nat -R POSTROUTING 1 -s 10.8.0.0/24 ! -d 10.8.0.0/24 -o eth0 -j MASQUERADE
IPv4 дамжуулалт удирдлагатай тохиргоогоор хэвээр идэвхтэй эсэхийг баталж, дараа нь дүрмийг түгээлтийн өөрийн механизмаар байнгын болго. Зөвхөн ажиллаж буй цөмд хийсэн өөрчлөлт дараагийн дахин ачаалалтад буцаж ирнэ, ихэвчлэн хэн ч өөрчлөлттэй холбохгүй засвар үйлчилгээний цонхонд.
Орлуулалтыг буруу хийх хоёр арга
Саныг серверийн LAN хаягийн оронд түүний туннелийн хаяг руу орчуулбал хариунууд шууд туннель руу буцаж, тэнд хэзээ ч хүсээгүй клиент рүү чиглэнэ. Холболт нь чиглүүлэлтийн гогцоо мэт зогсдог, учир нь энэ нь үнэхээр гогцоо юм.
Хуучны дээр хоёр дахь орчуулгыг давхарлах нь нөгөө алдаа. Эхний тохирох дүрэм ялдаг тул хуучирсан бичлэг устгагдах хүртэл пакетуудыг боловсруулсаар байх бөгөөд шинэ дүрмийн тоолуурууд тэг дээр үлдэх үед бүгд орлуулагчийг буруутгадаг. Шинэ зүйл нэмэхийн өмнө хуулбарыг устга. Дараа нь жагсаалтыг дахин уншаад санд яг нэг орчуулга тохирч байгааг батал.
Туннель IPv6-г ч зөөвөрлөж байгаа бол бүх хяналтыг нөгөө стек дээр давта. Орчуулга, чиглүүлсэн угтваргүй IPv6 анхдагч маршрут мөн адил чимээгүй бүтэлгүйтдэг бөгөөд түүний дээрх бүхэн ижил харагддаг тул мартах амархан.
Орж буй үйлчилгээнд эсрэг орчуулга хэрэгтэй
VPN клиент дээрх гаднаас хүрэх боломжтой байх ёстой үйлчилгээнд очих газрын орчуулга хэрэгтэй, эх орчуулга биш: нийтийн порт орохын өмнө клиентийн туннелийн хаяг руу дахин бичигдэнэ. Дараа нь дамжуулах замд тэр урсгалыг зөвшөөрөх тодорхой дүрэм хэрэгтэй.
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 10.9.8.2:8080
Туннелийг өөрөө зөөвөрлөж буй портыг хэзээ ч бүү орчуул, учир нь тэр дахин бичилт үйлчилгээг хүртээмжтэй байлгаж буй холболтыг тасална. Туннелийн портыг очих газрын дүрмээс бүрэн гадуур байлга. Эцэст нь хоёр үзүүрээс шалга: шинэ дүрэм дээрх тоолуурууд, туннелийн төхөөрөмж дээрх богино бичлэг, нийтийг туршихын өмнө туннель доторх хаяг руу нэг хүсэлт.