پر مان ھڪڙو پروگرامر آھيان، تنھنڪري مان صرف N وڌائيندس ھڪڙو حصو، ۽ حقيقي پروٽوڪول جي ترقي کي Kommersant ڊولپرز کي ڇڏي ڏيندس.
هڪ اڻ ڄاول ۾ منصوبومان هاڻي ڇا ڪري رهيو آهيان ٻاهر کان NAT جي پويان ميزبانن تائين پهچڻ آهي. ان لاءِ بالغن جي ڪرپٽوگرافي سان گڏ پروٽوڪول استعمال ڪندي، مان ان احساس کي ڇڪي نه سگهيس ته اهو هڪ تپ مان نڪتل اسپري وانگر هو. ڇاڪاڻ ته سرنگ گهڻو ڪري استعمال ڪيو ويندو آهي صرف NAT-e ۾ سوراخ ڪرڻ لاءِ، اندروني ٽريفڪ عام طور تي انڪريپٽ ٿيل هوندي آهي، پر اهي اڃا تائين HTTPS ۾ ٻڏي وينديون آهن.
مختلف سرننگ پروٽوڪول جي تحقيق ڪرڻ دوران، منهنجي اندروني تڪميل پسند جو ڌيان IPIP ڏانهن ان جي گهٽ ۾ گهٽ مٿي جي ڪري بار بار ڪيو ويو. پر هن ۾ منهنجي ڪمن لاءِ هڪ اڌ اهم خاميون آهن:
ان کي ٻنهي طرفن تي عوامي IPs جي ضرورت آهي،
۽ توهان جي ڪا به تصديق نه آهي.
تنهن ڪري، ڪمال کي واپس کوپڙي جي اونداهي ڪنڊ ۾ هليو ويو، يا جتي هو اتي ويٺو هو.
۽ پوءِ هڪ ڏينهن، مضمون پڙهڻ دوران مقامي طور تي سپورٽ ٿيل سرنگون لينڪس ۾ مون کي FOU (Foo-over-UDP)، يعني. جيڪو به، UDP ۾ لپي ويو. هينئر تائين، صرف IPIP ۽ GUE (Generic UDP Encapsulation) سپورٽ آهن.
حقيقت ۾، گولي مڪمل طور تي چانديء جو نه نڪتو. UDP ۾ Encapsulation پهريون مسئلو حل ڪري ٿو - توهان اڳ ۾ قائم ڪيل ڪنيڪشن استعمال ڪندي ٻاهران NAT جي پويان گراهڪن سان ڳنڍي سگهو ٿا، پر هتي IPIP جي ايندڙ خرابين جو اڌ هڪ نئين روشني ۾ - هڪ خانگي نيٽ ورڪ مان ڪو به ماڻهو لڪائي سگهي ٿو. عوامي IP ۽ ڪلائنٽ پورٽ (خالص IPIP ۾ اهو مسئلو موجود ناهي).
هن هڪ اڌ مسئلي کي حل ڪرڻ لاء، افاديت پيدا ٿيو ipipou. اهو هڪ ريموٽ ميزبان جي تصديق ڪرڻ لاءِ گهر ۾ ٺاهيل ميڪانيزم لاڳو ڪري ٿو، بغير ڪرنل FOU جي آپريشن کي روڪيو، جيڪو جلدي ۽ موثر طريقي سان ڪرنل اسپيس ۾ پيڪيٽس کي پروسيس ڪندو.
اسان کي توهان جي اسڪرپٽ جي ضرورت ناهي!
ٺيڪ، جيڪڏهن توهان ڄاڻو ٿا عوامي بندرگاهن ۽ ڪلائنٽ جو IP (مثال طور، هرڪو ان جي پويان ڪٿي به نه ٿو وڃي، NAT بندرگاهن کي 1-in-1 نقشي ٺاهڻ جي ڪوشش ڪري ٿو)، توهان هڪ IPIP-over-FOU سرنگ ٺاهي سگهو ٿا. هيٺ ڏنل حڪم، بغير ڪنهن اسڪرپٽ جي.
سرور تي:
# Подгрузить модуль ядра FOU
modprobe fou
# Создать IPIP туннель с инкапсуляцией в FOU.
# Модуль ipip подгрузится автоматически.
ip link add name ipipou0 type ipip
remote 198.51.100.2 local 203.0.113.1
encap fou encap-sport 10000 encap-dport 20001
mode ipip dev eth0
# Добавить порт на котором будет слушать FOU для этого туннеля
ip fou add port 10000 ipproto 4 local 203.0.113.1 dev eth0
# Назначить IP адрес туннелю
ip address add 172.28.0.0 peer 172.28.0.1 dev ipipou0
# Поднять туннель
ip link set ipipou0 up
ڪسٽمر تي:
modprobe fou
ip link add name ipipou1 type ipip
remote 203.0.113.1 local 192.168.0.2
encap fou encap-sport 10001 encap-dport 10000 encap-csum
mode ipip dev eth0
# Опции local, peer, peer_port, dev могут не поддерживаться старыми ядрами, можно их опустить.
# peer и peer_port используются для создания соединения сразу при создании FOU-listener-а.
ip fou add port 10001 ipproto 4 local 192.168.0.2 peer 203.0.113.1 peer_port 10000 dev eth0
ip address add 172.28.0.1 peer 172.28.0.0 dev ipipou1
ip link set ipipou1 up
جتي
ipipou* - مقامي سرنگ نيٽ ورڪ انٽرفيس جو نالو
203.0.113.1 - عوامي IP سرور
198.51.100.2 - ڪلائنٽ جو عوامي IP
192.168.0.2 - ڪلائنٽ IP انٽرفيس eth0 تي لڳايو ويو آهي
10001 - FOU لاءِ مقامي ڪلائنٽ پورٽ
20001 - FOU لاءِ عوامي ڪلائنٽ پورٽ
10000 - FOU لاءِ عوامي سرور پورٽ
encap-csum - يو ڊي پي چيڪسم کي شامل ڪرڻ جو اختيار شامل ڪيو ويو UDP پيڪٽس ۾؛ طرفان تبديل ڪري سگهجي ٿو noencap-csum، ذڪر نه ڪرڻ، سالميت اڳ ۾ ئي ٻاهرين encapsulation پرت جي ڪنٽرول آهي (جڏهن ته پيڪٽ سرنگ جي اندر آهي)
eth0 - مقامي انٽرفيس جنهن سان ipip سرنگ کي پابند ڪيو ويندو
هر شي کي واپس ڪرڻ جو آسان طريقو آهي ڪنيل ماڊلز کي لوڊ ڪرڻ لاءِ: modprobe -r fou ipip
جيتوڻيڪ تصديق جي ضرورت نه آهي، ڪلائنٽ جي عوامي IP ۽ بندرگاهن هميشه سڃاتل نه هوندا آهن ۽ اڪثر غير متوقع يا متغير هوندا آهن (انحصار NAT قسم تي). جيڪڏهن توهان وساري ڇڏيو encap-dport سرور جي پاسي تي، سرنگ ڪم نه ڪندي، اهو ريموٽ ڪنيڪشن پورٽ وٺڻ لاء ڪافي هوشيار ناهي. انهي حالت ۾، ipipou پڻ مدد ڪري سگھن ٿا، يا WireGuard ۽ ٻيا ان وانگر توھان جي مدد ڪري سگھن ٿا.
ان کي ڪيئن ڪم ڪندو؟
ڪلائنٽ (جيڪو عام طور تي NAT جي پويان هوندو آهي) هڪ سرنگ کوليندو آهي (جيئن مٿي ڏنل مثال ۾)، ۽ سرور ڏانهن هڪ تصديق واري پيڪٽ موڪلي ٿو ته جيئن اهو سرنگ کي پنهنجي پاسي تي ترتيب ڏئي. سيٽنگن تي مدار رکندي، هي هڪ خالي پيڪٽ ٿي سگهي ٿو (صرف انهي ڪري ته سرور عوامي IP ڏسي سگهي ٿو: ڪنيڪشن پورٽ)، يا ڊيٽا سان جنهن جي ذريعي سرور ڪلائنٽ جي سڃاڻپ ڪري سگهي ٿو. ڊيٽا صاف متن ۾ هڪ سادو پاسفريس ٿي سگهي ٿو (HTTP Basic Auth سان تشبيهه ذهن ۾ اچي ٿي) يا خاص طور تي ڊزائين ڪيل ڊيٽا هڪ خانگي ڪيئي سان سائن ڪيو ويو آهي (جيسا HTTP Digest Auth صرف مضبوط، فنڪشن ڏسو client_auth ڪوڊ ۾).
سرور تي (عوامي IP سان گڏ)، جڏهن ipipou شروع ٿئي ٿو، اهو هڪ nfqueue queue handler ٺاهي ٿو ۽ نيٽ فلٽر کي ترتيب ڏئي ٿو ته جيئن ضروري پيڪيٽس موڪليا وڃن جتي اهي هجڻ گهرجن: پيڪيٽس nfqueue قطار سان ڪنيڪشن جي شروعات ڪن ٿا، ۽ [تقريبا] باقي سڀ سڌو سنئون FOU ڏانهن وڃو.
انهن لاءِ جيڪي نه ڄاڻن ٿا، nfqueue (يا NetfilterQueue) شوقينن لاءِ هڪ خاص شيءِ آهي جيڪي نه ٿا ڄاڻن ته ڪنيل ماڊل ڪيئن ٺاهيا وڃن، جيڪي netfilter (nftables/iptables) استعمال ڪندي توهان کي نيٽ فلٽر (nftables/iptables) استعمال ڪرڻ جي اجازت ڏين ٿا نيٽ ورڪ پيڪٽس کي يوزر اسپيس ڏانهن ريڊائريڪٽ ڪري ۽ انهن کي اتي پروسيس ڪري primitive مطلب هٿ ۾: تبديل ڪريو (اختياري) ۽ ان کي واپس ڪرنل ڏانهن ڏيو، يا ان کي رد ڪريو.
ڪجھ پروگرامنگ ٻولين لاءِ nfqueue سان ڪم ڪرڻ لاءِ پابند آھن، بش لاءِ ڪو به نه ھو (ھي، حيرت انگيز نه آھي)، مون کي پائٿون استعمال ڪرڻو پيو: ipipou use نيٽ فلٽر قطار.
جيڪڏهن ڪارڪردگي نازڪ نه آهي، هن شيء کي استعمال ڪندي توهان نسبتا جلدي ۽ آساني سان پنهنجي منطق ٺاهي سگهو ٿا پيڪٽ سان ڪم ڪرڻ لاء ڪافي گهٽ سطح تي، مثال طور، تجرباتي ڊيٽا جي منتقلي پروٽوڪول ٺاهي، يا غير معياري رويي سان مقامي ۽ ريموٽ سروسز کي ٽرول.
خام ساکٽ nfqueue سان هٿ ۾ هٿ ۾ ڪم ڪن ٿا، مثال طور، جڏهن سرنگ اڳ ۾ ئي ترتيب ڏنل آهي ۽ FOU گهربل بندرگاهن تي ٻڌي رهيو آهي، توهان عام طريقي سان ساڳئي بندرگاهن مان پيڪٽ موڪلڻ جي قابل نه هوندا - اهو مصروف آهي، پر توهان وٺي سگهو ٿا ۽ هڪ بي ترتيب ٺاهيل پيڪٽ سڌو سنئون نيٽ ورڪ انٽرفيس ڏانهن هڪ خام ساکٽ استعمال ڪندي موڪلي سگهو ٿا، جيتوڻيڪ اهڙي پيڪٽ پيدا ڪرڻ لاء ٿورو وڌيڪ ٽنگنگ جي ضرورت پوندي. هي آهي ته ڪيئن تصديق سان پيڪيٽ ٺاهيا ويا آهن ipipou ۾.
جيئن ته ipipou ڪنيڪشن مان صرف پهرين پيڪٽس کي پروسيس ڪري ٿو (۽ جيڪي ڪنيڪشن قائم ٿيڻ کان اڳ قطار ۾ لڪي وڃڻ ۾ منظم ٿيا)، ڪارڪردگي تقريبن متاثر نه ٿيندي آهي.
جيئن ئي ipipou سرور هڪ تصديق ٿيل پيڪٽ حاصل ڪري ٿو، هڪ سرنگ ٺاهي ويندي آهي ۽ ڪنيڪشن ۾ ايندڙ سڀ پيڪٽ اڳ ۾ ئي عمل ڪيا ويندا آهن ڪنييل طرفان nfqueue کي پاس ڪندي. جيڪڏهن ڪنيڪشن ناڪام ٿئي ٿو، ته پوءِ سيٽنگن تي منحصر ڪري ايندڙ هڪ جو پهريون پيڪٽ nfqueue قطار ڏانهن موڪليو ويندو، جيڪڏهن اهو تصديق سان پيڪٽ نه آهي، پر آخري ياد ڪيل IP ۽ ڪلائنٽ پورٽ مان، اهو يا ته پاس ڪري سگهجي ٿو. تي يا رد ڪيو ويو. جيڪڏهن هڪ تصديق ٿيل پيڪٽ نئين IP ۽ بندرگاهن مان اچي ٿو، سرنگ انهن کي استعمال ڪرڻ لاء ٻيهر ترتيب ڏني وئي آهي.
عام IPIP-over-FOU ۾ ھڪڙو وڌيڪ مسئلو آھي جڏھن NAT سان ڪم ڪري رھيا آھن - اھو ناممڪن آھي ٻن IPIP سرنگن کي ٺاھيو وڃي UDP ۾ ساڳي IP سان، ڇاڪاڻ ته FOU ۽ IPIP ماڊل ھڪ ٻئي کان بلڪل الڳ آھن. اهي. ساڳئي عوامي IP جي پويان ڪلائنٽ جو هڪ جوڙو هن طريقي سان ساڳئي سرور سان ڳنڍڻ جي قابل نه هوندو. مستقبل ۾، ممڪن آهي, ان کي kernel سطح تي حل ڪيو ويندو، پر اهو پڪ ناهي. ساڳئي وقت ۾، NAT مسئلا NAT ذريعي حل ٿي سگهن ٿا - جيڪڏهن اهو ٿئي ٿو ته IP پتي جو هڪ جوڙو اڳ ۾ ئي هڪ ٻي سرنگ تي قبضو ڪيو ويو آهي، ipipou عوام کان هڪ متبادل نجي IP ڏانهن NAT ڪندو، voila! - توھان ٺاھي سگھوٿا سرنگون جيستائين بندرگاھ ختم ٿي وڃن.
ڇاڪاڻ ته ڪنيڪشن ۾ موجود سڀئي پيڪيٽ سائن نه ٿيل آهن، پوءِ هي سادو تحفظ MITM لاءِ خطرناڪ آهي، تنهن ڪري جيڪڏهن ڪلائنٽ ۽ سرور جي وچ ۾ رستي تي ڪو ويلو لڪي رهيو آهي، جيڪو ٽريفڪ کي ٻڌي ۽ ان ۾ ڦيرڦار ڪري سگهي ٿو، ته هو تصديق ٿيل پيڪن کي ريڊائريڪٽ ڪري سگهي ٿو. ٻيو پتو ۽ هڪ ناقابل اعتماد ميزبان مان هڪ سرنگ ٺاهيو.
جيڪڏهن ڪنهن وٽ خيال آهن ته هن کي ڪيئن حل ڪجي جڏهن ته بنيادي طور تي ٽرئفڪ جي وڏي تعداد کي ڇڏي ڏيو، ڳالهائڻ ۾ سنکوڪ نه ڪريو.
رستي جي ذريعي، UDP ۾ encapsulation پاڻ کي تمام سٺو ثابت ڪيو آهي. IP مٿان encapsulation جي مقابلي ۾، اهو UDP هيڊر جي اضافي مٿي جي باوجود گهڻو وڌيڪ مستحڪم ۽ اڪثر تيز آهي. اهو ان حقيقت جي ڪري آهي ته انٽرنيٽ تي اڪثر ميزبان صرف ٽن مشهور پروٽوڪولن سان گڏ ڪم ڪن ٿا: TCP، UDP، ICMP. مزيدار حصو مڪمل طور تي هر شيء کي رد ڪري سگهي ٿو، يا ان کي وڌيڪ سست رفتار سان پروسيس ڪري سگهي ٿو، ڇاڪاڻ ته اهو صرف انهن ٽنهي لاء بهتر آهي.
مثال طور، اهو ئي سبب آهي ته QUICK، جنهن تي HTTP/3 ٻڌل آهي، ٺاهي وئي هئي UDP جي چوٽي تي، ۽ نه IP جي مٿان.
يقينن، ڪافي لفظ، اهو ڏسڻ جو وقت آهي ته اهو "حقيقي دنيا" ۾ ڪيئن ڪم ڪري ٿو.
لڙائي
حقيقي دنيا کي نقل ڪرڻ لاء استعمال ڪيو ويو iperf3. حقيقت جي ويجهڙائي جي درجي جي لحاظ کان، اهو تقريبا ساڳيو ئي آهي جهڙوڪ Minecraft ۾ حقيقي دنيا کي نقل ڪرڻ، پر هاڻي لاء اهو ڪندو.
مقابلي ۾ حصو وٺندڙ:
مکيه چينل جو حوالو
هن مضمون جو هيرو ipipou آهي
OpenVPN تصديق سان پر ڪو به انڪرپشن ناهي
OpenVPN سڀ-شامل موڊ ۾
WireGuard بغير PresharedKey، MTU = 1440 سان (صرف IPv4 کان)
CPULOG=NAME.udp.cpu.log; sar 10 6 >"$CPULOG" & iperf3 -c SERVER_IP -4 -t 60 -f m -i 10 -B LOCAL_IP -P 2 -u -b 12M; tail -1 "$CPULOG"
# Где "-b 12M" это пропускная способность основного канала, делённая на число потоков "-P", чтобы лишние пакеты не плодить и не портить производительность.