ผจญภัยนอกโลก

ผจญภัยนอกโลก

Spotify สามารถช่วยคุณศึกษา daemons, RFC, เครือข่าย และส่งเสริมโอเพ่นซอร์สได้อย่างไร หรือจะเกิดอะไรขึ้นหากคุณชำระเงินไม่ได้แต่อยากได้ของพรีเมียมจริงๆ

การเริ่มต้น

ในวันที่สาม พบว่า Spotify กำลังแสดงโฆษณาตามประเทศของที่อยู่ IP มีการตั้งข้อสังเกตด้วยว่าในบางประเทศไม่มีการนำเข้าโฆษณาเลย ตัวอย่างเช่นในสาธารณรัฐเบลารุส จากนั้นมีแผน "ที่ยอดเยี่ยม" เพื่อปิดใช้งานการโฆษณาในบัญชีที่ไม่ใช่แบบพรีเมียม

เล็กน้อยเกี่ยวกับ Spotify

โดยทั่วไปแล้ว Spotify มีนโยบายที่แปลก พี่ชายของเราต้องค่อนข้างจะบิดเบี้ยวเพื่อที่จะซื้อของพรีเมี่ยม เปลี่ยนสถานที่ในโปรไฟล์ของเขาไปต่างประเทศ มองหาบัตรของขวัญที่เหมาะสมที่จ่ายด้วย PayPal เท่านั้น ซึ่งช่วงนี้ทำตัวแปลกๆ และต้องการเอกสารมากมาย โดยทั่วไปแล้ว มันก็เป็นการผจญภัยเช่นกัน แต่มีลำดับที่แตกต่างออกไป แม้ว่าคนส่วนใหญ่จะทำสิ่งนี้เพื่อเวอร์ชั่นมือถือ แต่ฉันก็ไม่ได้สนใจมัน ดังนั้นทุกอย่างด้านล่างนี้จะช่วยได้เฉพาะในกรณีของเวอร์ชันเดสก์ท็อปเท่านั้น นอกจากนี้ยังจะไม่มีการขยายฟังก์ชั่นอีกด้วย เพียงแต่ตัดส่วนเกินบางส่วนออกไป

ทำไมมันซับซ้อนมาก?

และฉันก็คิดอย่างนั้นเมื่อลงทะเบียนข้อมูลถุงเท้าพร็อกซีในการกำหนดค่า Spotify ปัญหากลายเป็นว่าการรับรองความถูกต้องในถุงเท้าโดยใช้การเข้าสู่ระบบและรหัสผ่านไม่ทำงาน นอกจากนี้ นักพัฒนามักทำอะไรบางอย่างเกี่ยวกับพร็อกซี: อนุญาตแล้วห้าม หรือทำลายพร็อกซี ซึ่งก่อให้เกิดการอภิปรายทั้งหมดนอกไซต์

มีการตัดสินใจว่าจะไม่พึ่งพาฟังก์ชันที่ไม่เสถียรและค้นหาสิ่งที่น่าเชื่อถือและน่าสนใจกว่านี้

ผู้อ่านต้องถามที่ไหนสักแห่งที่นี่: ทำไมไม่เอา ssh ด้วยกุญแจ -D และนั่นคือจุดสิ้นสุดของมันเหรอ? และโดยทั่วไปแล้วเขาจะพูดถูก แต่ก่อนอื่นสิ่งนี้ยังต้องถูกปีศาจและผูกมิตรกับ autossh เพื่อไม่ให้คิดถึงการเชื่อมต่อที่ขาดหาย และประการที่สอง: มันเรียบง่ายและน่าเบื่อเกินไป

ตามลำดับ

ตามปกติ เริ่มจากซ้ายไปขวา บนลงล่าง และอธิบายทุกสิ่งที่เราจำเป็นต้องใช้เพื่อนำแนวคิด "เรียบง่าย" ของเราไปใช้

ก่อนอื่นคุณต้องมีพรอกซี

และมีทางเลือกมากมายในคราวเดียว:

  • คุณสามารถไปและรับจากรายการพรอกซีที่เปิดอยู่ ราคาถูก (หรือค่อนข้างไร้ค่า) แต่ไม่น่าเชื่อถืออย่างแน่นอน และอายุการใช้งานของพรอกซีดังกล่าวมีแนวโน้มที่จะเป็นศูนย์ ดังนั้นจึงจำเป็นต้องค้นหา/เขียน parser สำหรับรายการพร็อกซี กรองตามประเภทและประเทศที่ต้องการ และคำถามเกี่ยวกับการแทนที่พร็อกซีที่พบใน Spotify ยังคงเปิดอยู่ (บางทีอาจผ่าน HTTP_PROXY ถ่ายโอนและสร้าง wrapper แบบกำหนดเองสำหรับไบนารี่ เพื่อไม่ให้การรับส่งข้อมูลอื่นทั้งหมดไปที่นั่น)
  • คุณสามารถซื้อพรอกซีที่คล้ายกันและช่วยตัวเองจากปัญหาส่วนใหญ่ที่อธิบายไว้ข้างต้น แต่ในราคาพร็อกซีคุณสามารถซื้อพรีเมียมบน Spotify ได้ทันทีและสิ่งนี้ใช้ไม่ได้กับงานดั้งเดิม
  • ยกของคุณ อย่างที่คุณอาจเดาได้ว่านี่คือทางเลือกของเรา

โดยบังเอิญอาจกลายเป็นว่าคุณมีเพื่อนที่มีเซิร์ฟเวอร์ในสาธารณรัฐเบลารุสหรือประเทศเล็ก ๆ อื่น คุณต้องใช้สิ่งนี้และเปิดตัวพรอกซีที่ต้องการ ผู้ที่ชื่นชอบเป็นพิเศษสามารถพอใจกับเพื่อนที่เปิดเราเตอร์ได้ DD-WRT หรือซอฟต์แวร์ที่คล้ายกัน แต่มี ของเขา โลกที่สวยงาม และโลกนี้ไม่สอดคล้องกับกรอบของเรื่องนี้อย่างชัดเจน

ดังนั้น ตัวเลือกของเรา: Squid - ไม่สร้างแรงบันดาลใจ และฉันไม่ต้องการพร็อกซี HTTP มีโปรโตคอลนี้มากเกินไปแล้ว และในพื้นที่ของ SOCKS ก็ไม่มีอะไรสมเหตุสมผลนอกจาก ดานเต้ ยังไม่ได้จัดส่ง ฉะนั้นเรามาดูกันดีกว่า

อย่ารอคู่มือของ Dante ในการติดตั้งและกำหนดค่า เขา แค่เข้ากูเกิ้ล และไม่ได้สนใจเป็นพิเศษ ในการกำหนดค่าขั้นต่ำคุณต้องใส่ทุกประเภท client pass, socks passลงทะเบียนอินเทอร์เฟซอย่างถูกต้องและอย่าลืมเพิ่ม socksmethod: username. ในแบบฟอร์มนี้ สำหรับการรับรองความถูกต้อง Logopass จะถูกดึงมาจากผู้ใช้ระบบ และส่วนที่เกี่ยวกับความปลอดภัย: การห้ามการเข้าถึง localhost การจำกัดผู้ใช้ ฯลฯ - นี่เป็นเพียงรายบุคคลเท่านั้น ขึ้นอยู่กับความหวาดระแวงส่วนตัว

ปรับใช้พรอกซีที่หันหน้าไปทางเครือข่าย

ละครมี XNUMX องก์

ทำหน้าที่หนึ่ง

เราได้แยกพรอกซีออกแล้ว ตอนนี้เราต้องเข้าถึงได้จากเว็บทั่วโลก หากคุณมีเครื่องที่มี IP สีขาวในประเทศที่ต้องการ คุณสามารถข้ามจุดนี้ได้อย่างปลอดภัย เราไม่มี (ตามที่กล่าวไว้ข้างต้น เราโฮสต์อยู่ที่บ้านเพื่อน) และ IP สีขาวที่ใกล้ที่สุดอยู่ที่ไหนสักแห่งในเยอรมนี ดังนั้นเราจะศึกษาเครือข่าย

ใช่แล้ว ผู้อ่านที่เอาใจใส่จะถามอีกครั้ง: ทำไมคุณไม่ใช้บริการที่มีอยู่เช่นนั้น งรก หรือคล้ายกัน? และเขาจะกลับมาถูกต้องอีกครั้ง แต่นี่คือบริการ ต้องถูกปีศาจอีกครั้ง อาจต้องเสียเงินด้วย และโดยทั่วไปแล้วมันไม่ใช่กีฬา ดังนั้นเราจะสร้างจักรยานจากเศษวัสดุ

ภารกิจ: มีพรอกซีอยู่ที่ไหนสักแห่งด้านหลัง NAT คุณต้องวางมันไว้ที่พอร์ตใดพอร์ตหนึ่งของ VPS ที่มี IP สีขาวและตั้งอยู่ที่ขอบโลก

มีเหตุผลที่จะสรุปได้ว่าสิ่งนี้สามารถแก้ไขได้โดยการส่งต่อพอร์ต (ซึ่งดำเนินการผ่านการกล่าวถึงข้างต้น ssh) หรือโดยการรวมฮาร์ดแวร์เข้ากับเครือข่ายเสมือนผ่าน VPN กับ ssh เรารู้วิธีการทำงาน autossh มันน่าเบื่อ ดังนั้นมาลองใช้ OpenVPN กันดีกว่า

DigitalOcean มี มานูลที่ยอดเยี่ยม ในเรื่องนี้ ฉันไม่มีอะไรจะเพิ่มไป และผลลัพธ์ที่ได้สามารถเชื่อมต่อกับไคลเอนต์ OpenVPN และได้อย่างง่ายดาย systemd. เพียงแค่ใส่มัน (config) เข้าไป /etc/openvpn/client/ และอย่าลืมเปลี่ยนนามสกุลเป็น .conf. หลังจากนั้นให้ดึงบริการ [email protected]อย่าลืมทำเพื่อเธอนะ enable และชื่นชมยินดีที่ทุกสิ่งปลิวไป

แน่นอนว่าเราจำเป็นต้องปิดการใช้งานการเปลี่ยนเส้นทางการรับส่งข้อมูลไปยัง VPN ที่สร้างขึ้นใหม่ เนื่องจากเราไม่ต้องการลดความเร็วบนเครื่องไคลเอนต์ด้วยการส่งข้อมูลผ่านครึ่งลูก

ใช่แล้ว เราจำเป็นต้องลงทะเบียนที่อยู่ IP แบบคงที่บนเซิร์ฟเวอร์ VPN สำหรับลูกค้าของเรา สิ่งนี้จะต้องใช้ในภายหลังเล็กน้อยในเรื่องนี้ ในการทำเช่นนี้คุณต้องเปิดใช้งาน ifconfig-pool-persist, แก้ไข ipp.txtรวมอยู่ใน OpenVPN และเปิดใช้งาน client-config-dir รวมถึงแก้ไขการกำหนดค่าของไคลเอนต์ที่ต้องการโดยการเพิ่ม ifconfig-push ด้วยมาสก์ที่ถูกต้องและที่อยู่ IP ที่ต้องการ

พระราชบัญญัติที่สอง

ขณะนี้เรามีเครื่องบน "เครือข่าย" ที่หันหน้าเข้าหาอินเทอร์เน็ตและสามารถใช้เพื่อวัตถุประสงค์ที่เห็นแก่ตัวได้ กล่าวคือเปลี่ยนเส้นทางส่วนหนึ่งของการรับส่งข้อมูลผ่านมัน

ดังนั้นงานใหม่: คุณต้องปิดการรับส่งข้อมูลที่มาถึงพอร์ต VPS พอร์ตใดพอร์ตหนึ่งด้วย IP สีขาวเพื่อให้การรับส่งข้อมูลนี้ไปที่เครือข่ายเสมือนที่เชื่อมต่อใหม่และการตอบกลับสามารถกลับมาจากที่นั่นได้

วิธีแก้ปัญหา: แน่นอน iptables! เมื่อไหร่คุณจะมีโอกาสที่ยอดเยี่ยมเช่นนี้ในการฝึกซ้อมร่วมกับเขา?

การกำหนดค่าที่ต้องการสามารถพบได้อย่างรวดเร็วภายในสามชั่วโมง พบกับคำสาบานนับร้อยคำ และความกังวลใจจำนวนหนึ่งที่สิ้นเปลือง เนื่องจากการแก้ไขจุดบกพร่องเครือข่ายเป็นขั้นตอนที่เฉพาะเจาะจงมาก

ขั้นแรก คุณต้องเปิดใช้งานการเปลี่ยนเส้นทางการรับส่งข้อมูลในเคอร์เนล สิ่งนี้เรียกว่า ipv4.ip_forward และเปิดใช้งานจะแตกต่างกันเล็กน้อยขึ้นอยู่กับระบบปฏิบัติการและตัวจัดการเครือข่าย

ประการที่สอง คุณต้องเลือกพอร์ตบน VPS และรวมการรับส่งข้อมูลทั้งหมดที่ไปที่พอร์ตนั้นไว้ในเครือข่ายย่อยเสมือน ซึ่งสามารถทำได้เช่นนี้:

iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 8080 -j DNAT --to-destination 10.8.0.2:8080

ที่นี่เราเปลี่ยนเส้นทางการรับส่งข้อมูล TCP ทั้งหมดที่มาถึงพอร์ต 8080 ของอินเทอร์เฟซภายนอกไปยังเครื่องที่มี IP 10.8.0.2 และพอร์ตเดียวกัน 8080

สำหรับผู้ที่ต้องการรายละเอียดสกปรกของงาน netfilter, iptables และการกำหนดเส้นทางโดยทั่วไปจำเป็นอย่างยิ่งที่จะต้องพิจารณา มัน หรือ มัน.

ตอนนี้แพ็กเก็ตของเราบินไปที่ซับเน็ตเสมือน และ... พวกมันคงอยู่ที่นั่น แม่นยำยิ่งขึ้น การตอบสนองจากพร็อกซีถุงเท้าจะบินกลับผ่านเกตเวย์เริ่มต้นบนเครื่องโดย Dante และผู้รับจะทิ้งมันไป เนื่องจากในเครือข่าย ไม่ใช่เรื่องปกติที่จะส่งคำขอไปยัง IP หนึ่งและรับการตอบกลับจากอีก IP ดังนั้นเราจึงต้องร่ายมนต์ต่อไป

ดังนั้น ตอนนี้คุณต้องเปลี่ยนเส้นทางแพ็กเก็ตทั้งหมดจากพร็อกซีกลับไปยังซับเน็ตเสมือนไปยัง VPS ด้วย IP สีขาว ที่นี่สถานการณ์แย่ลงเล็กน้อยเพราะมันเป็นเพียง iptables เราจะไม่พอเพราะถ้าเราแก้ไขที่อยู่ปลายทางก่อนกำหนดเส้นทาง (PREROUTING) แพ็คเกจของเราจะไม่บินไปที่อินเทอร์เน็ต และหากเราไม่แก้ไข แพ็คเกจก็จะไปที่ default gateway. ดังนั้นคุณต้องทำสิ่งต่อไปนี้: จำโซ่ไว้ mangleเพื่อทำเครื่องหมายแพ็กเก็ตผ่าน iptables และรวมไว้ในตารางเส้นทางที่กำหนดเองซึ่งจะส่งพวกเขาไปยังที่ที่ควรไป

ไม่ช้ากว่าพูดมากกว่าทำ:

iptables -t mangle -A OUTPUT -p tcp --sport 8080 -j MARK --set-mark 0x80
ip rule add fwmark 0x80 table 80
ip route add default via 10.8.0.1 dev tun0 table 80

เราใช้การรับส่งข้อมูลขาออกทำเครื่องหมายทุกสิ่งที่บินจากพอร์ตที่พร็อกซีตั้งอยู่ (8080 ในกรณีของเรา) เปลี่ยนเส้นทางการรับส่งข้อมูลที่ทำเครื่องหมายไว้ทั้งหมดไปยังตารางเส้นทางด้วยหมายเลข 80 (โดยทั่วไปแล้วตัวเลขไม่ได้ขึ้นอยู่กับสิ่งใดเราแค่ต้องการ ถึง) และเพิ่มกฎเดียว ตามที่แพ็กเก็ตทั้งหมดที่รวมอยู่ในตารางนี้จะบินไปยังเครือข่ายย่อย VPN

ยอดเยี่ยม! ตอนนี้แพ็คเก็ตบินกลับไปยัง VPS... และตายที่นั่น เพราะ VPS ไม่รู้ว่าจะทำอย่างไรกับพวกเขา ดังนั้น หากคุณไม่กังวล คุณสามารถเปลี่ยนเส้นทางการรับส่งข้อมูลทั้งหมดที่มาจากเครือข่ายย่อยเสมือนกลับไปยังอินเทอร์เน็ตได้:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 172.42.1.10

ที่นี่ทุกสิ่งที่มาจากซับเน็ต 10.8.0.0 พร้อมมาสก์ 255.255.255.000 จะถูกห่อด้วย Source-NAT และบินไปยังอินเทอร์เฟซเริ่มต้นซึ่งเปลี่ยนเป็นอินเทอร์เน็ต สิ่งสำคัญคือต้องทราบว่าสิ่งนี้จะทำงานได้ก็ต่อเมื่อเราส่งต่อพอร์ตอย่างโปร่งใส นั่นคือพอร์ตขาเข้าบน VPS ตรงกับพอร์ตของพร็อกซีของเรา ไม่เช่นนั้นคุณจะต้องทนทุกข์ทรมานอีกสักหน่อย

ที่ไหนสักแห่งตอนนี้ทุกอย่างควรเริ่มทำงาน และเหลือเพียงเล็กน้อย: อย่าลืมตรวจสอบให้แน่ใจว่าได้กำหนดค่าทั้งหมดแล้ว iptables и route ไม่ได้ดำเนินการต่อหลังจากการรีสตาร์ท สำหรับ iptables มีไฟล์พิเศษเช่น /etc/iptables/rules.v4(ในกรณีของ Ubuntu) แต่สำหรับเส้นทางทุกอย่างจะซับซ้อนกว่าเล็กน้อย ฉันผลักพวกเขาเข้าไป up/down สคริปต์ OpenVPN แม้ว่าฉันคิดว่าสคริปต์เหล่านั้นสามารถทำได้อย่างเหมาะสมกว่านี้

ตัดการรับส่งข้อมูลจากแอปพลิเคชันในพร็อกซี

ดังนั้นเราจึงมีพร็อกซีที่มีการรับรองความถูกต้องในประเทศที่ต้องการ ซึ่งสามารถเข้าถึงได้ผ่านที่อยู่ IP สีขาวแบบคงที่ สิ่งที่เหลืออยู่คือใช้มันและเปลี่ยนเส้นทางการรับส่งข้อมูลจาก Spotify ไปที่นั่น แต่มีความแตกต่างเล็กน้อยตามที่กล่าวไว้ข้างต้นรหัสผ่านการเข้าสู่ระบบสำหรับพร็อกซีใน Spotify ใช้งานไม่ได้ดังนั้นเราจะค้นหาวิธีแก้ไข

เริ่มต้นด้วยการจำเกี่ยวกับ พร็อกซี่. ของดี แต่ราคาพอๆ กับเอ็นเตอร์ไพรส์เลย ($40) ด้วยเงินจำนวนนี้ เราก็สามารถซื้อของพรีเมียมได้อีกครั้งและจัดการมันให้เสร็จสิ้น ดังนั้นเราจะค้นหาอะนาล็อกแบบเปิดและฟรีเพิ่มเติมบน Mac (ใช่ เราต้องการฟังเพลงบน Mac) มาค้นพบเครื่องมือทั้งหมดกันเถอะ: ใกล้เคียง. และเราจะไปกระตุ้นเขาอย่างมีความสุข

แต่ความสุขจะอยู่ได้ไม่นานเพราะปรากฎว่าคุณต้องเปิดใช้งานโหมดดีบั๊กและส่วนขยายเคอร์เนลที่กำหนดเองใน MacOS ตั้งค่าไฟล์อย่างง่าย ๆ และเข้าใจว่าเครื่องมือนี้มีปัญหาเหมือนกับ Spotify ทุกประการ: ไม่สามารถผ่านการรับรองความถูกต้องโดยใช้ รหัสผ่านเข้าสู่ระบบบนถุงเท้าพร็อกซี

ที่ไหนสักแห่งแถวๆ นี้ถึงเวลาที่จะต้องซื้อของพรีเมียมแล้วซื้อของพรีเมียม...แต่ไม่! ลองไปขอแก้ไขดูนะครับ มันเป็น open source ครับ! มาทำกันเถอะ ตั๋ว. และเพื่อเป็นการตอบสนอง เราได้รับเรื่องราวที่น่าสะเทือนใจเกี่ยวกับการที่ผู้ดูแลเพียงคนเดียวไม่มี MacBook อีกต่อไป และต้องเสียใจด้วย ไม่ใช่ทางแก้ไข

เราจะเสียใจอีกครั้ง แต่แล้วเราจะจดจำเยาวชนของเราและ C เปิดโหมดแก้ไขข้อบกพร่องใน Dante ขุดบันทึกหลายร้อยกิโลไบต์ ไปที่ RFC1927 สำหรับข้อมูลเกี่ยวกับโปรโตคอล SOCKS5 มาดูที่ Xcode และค้นหาปัญหา การแก้ไขอักขระหนึ่งตัวในรายการรหัสวิธีการที่ลูกค้าเสนอให้ตรวจสอบความถูกต้องก็เพียงพอแล้ว และทุกอย่างก็เริ่มทำงานเหมือนเครื่องจักร เราชื่นชมยินดี เรารวบรวมไบนารีที่เผยแพร่ เราทำ ดึงคำขอ และเราก็เข้าสู่พระอาทิตย์ตกและไปยังจุดต่อไป

ทำให้เป็นอัตโนมัติ

เมื่อ Proximac ทำงาน มันจะต้องถูกปีศาจและลืมไป มีระบบการเริ่มต้นทั้งหมดหนึ่งระบบที่เหมาะสำหรับสิ่งนี้ซึ่งพบได้ใน MacOS กล่าวคือ เปิดตัว.

เราพบมันอย่างรวดเร็ว คู่มือ และเราเข้าใจว่านี่ไม่ใช่เลย systemd และนี่ก็เกือบจะเป็นสกู๊ปแล้ว xml. ไม่มีการกำหนดค่าที่หรูหราสำหรับคุณ ไม่มีคำสั่งเช่นนี้ status, restart, daemon-reload. ประเภทฮาร์ดคอร์เท่านั้น start-stop, list-grep, unload-load และเรื่องแปลกประหลาดอีกมากมาย เอาชนะทั้งหมดนี้เราเขียน plistกำลังโหลด ไม่ทำงาน, ไม่เป็นผล. เราศึกษาวิธีการแก้จุดบกพร่องปีศาจ แก้จุดบกพร่องมัน ทำความเข้าใจกับสิ่งที่มีอยู่ ENV แม้ PATH เราไม่ได้ส่งแบบธรรมดา เราเถียง เราเอาเข้า (เสริม. /sbin и /usr/local/bin) และในที่สุด เราก็พอใจกับการสตาร์ทอัตโนมัติและการทำงานที่เสถียร

หายใจออก

ผลลัพธ์เป็นอย่างไร? สัปดาห์แห่งการผจญภัย สวนสัตว์คุกเข่าจากบริการที่ใส่ใจและทำในสิ่งที่จำเป็น ความรู้เล็กๆ น้อยๆ ในด้านเทคนิคที่น่าสงสัย โอเพ่นซอร์สเล็กน้อย และรอยยิ้มบนใบหน้าของคุณจากความคิดที่ว่า "ฉันทำได้แล้ว!"

ป.ล.: นี่ไม่ใช่การเรียกร้องให้มีการคว่ำบาตรนายทุน เพื่อการประหยัดเงินในการแข่งขันหรือเพื่อความฉลาดแกมโกง แต่เป็นเพียงข้อบ่งชี้ถึงความเป็นไปได้ของการวิจัยและพัฒนา ซึ่งโดยทั่วไปแล้วคุณไม่คาดหวัง

ที่มา: will.com

เพิ่มความคิดเห็น