Spotify สามารถช่วยคุณศึกษา daemons, RFC, เครือข่าย และส่งเสริมโอเพ่นซอร์สได้อย่างไร หรือจะเกิดอะไรขึ้นหากคุณชำระเงินไม่ได้แต่อยากได้ของพรีเมียมจริงๆ
การเริ่มต้น
ในวันที่สาม พบว่า Spotify กำลังแสดงโฆษณาตามประเทศของที่อยู่ IP มีการตั้งข้อสังเกตด้วยว่าในบางประเทศไม่มีการนำเข้าโฆษณาเลย ตัวอย่างเช่นในสาธารณรัฐเบลารุส จากนั้นมีแผน "ที่ยอดเยี่ยม" เพื่อปิดใช้งานการโฆษณาในบัญชีที่ไม่ใช่แบบพรีเมียม
เล็กน้อยเกี่ยวกับ Spotify
โดยทั่วไปแล้ว Spotify มีนโยบายที่แปลก พี่ชายของเราต้องค่อนข้างจะบิดเบี้ยวเพื่อที่จะซื้อของพรีเมี่ยม เปลี่ยนสถานที่ในโปรไฟล์ของเขาไปต่างประเทศ มองหาบัตรของขวัญที่เหมาะสมที่จ่ายด้วย PayPal เท่านั้น ซึ่งช่วงนี้ทำตัวแปลกๆ และต้องการเอกสารมากมาย โดยทั่วไปแล้ว มันก็เป็นการผจญภัยเช่นกัน แต่มีลำดับที่แตกต่างออกไป แม้ว่าคนส่วนใหญ่จะทำสิ่งนี้เพื่อเวอร์ชั่นมือถือ แต่ฉันก็ไม่ได้สนใจมัน ดังนั้นทุกอย่างด้านล่างนี้จะช่วยได้เฉพาะในกรณีของเวอร์ชันเดสก์ท็อปเท่านั้น นอกจากนี้ยังจะไม่มีการขยายฟังก์ชั่นอีกด้วย เพียงแต่ตัดส่วนเกินบางส่วนออกไป
ทำไมมันซับซ้อนมาก?
และฉันก็คิดอย่างนั้นเมื่อลงทะเบียนข้อมูลถุงเท้าพร็อกซีในการกำหนดค่า Spotify ปัญหากลายเป็นว่าการรับรองความถูกต้องในถุงเท้าโดยใช้การเข้าสู่ระบบและรหัสผ่านไม่ทำงาน นอกจากนี้ นักพัฒนามักทำอะไรบางอย่างเกี่ยวกับพร็อกซี: อนุญาตแล้วห้าม หรือทำลายพร็อกซี ซึ่งก่อให้เกิดการอภิปรายทั้งหมดนอกไซต์
มีการตัดสินใจว่าจะไม่พึ่งพาฟังก์ชันที่ไม่เสถียรและค้นหาสิ่งที่น่าเชื่อถือและน่าสนใจกว่านี้
ผู้อ่านต้องถามที่ไหนสักแห่งที่นี่: ทำไมไม่เอา ssh
ด้วยกุญแจ -D
และนั่นคือจุดสิ้นสุดของมันเหรอ? และโดยทั่วไปแล้วเขาจะพูดถูก แต่ก่อนอื่นสิ่งนี้ยังต้องถูกปีศาจและผูกมิตรกับ autossh เพื่อไม่ให้คิดถึงการเชื่อมต่อที่ขาดหาย และประการที่สอง: มันเรียบง่ายและน่าเบื่อเกินไป
ตามลำดับ
ตามปกติ เริ่มจากซ้ายไปขวา บนลงล่าง และอธิบายทุกสิ่งที่เราจำเป็นต้องใช้เพื่อนำแนวคิด "เรียบง่าย" ของเราไปใช้
ก่อนอื่นคุณต้องมีพรอกซี
และมีทางเลือกมากมายในคราวเดียว:
- คุณสามารถไปและรับจากรายการพรอกซีที่เปิดอยู่ ราคาถูก (หรือค่อนข้างไร้ค่า) แต่ไม่น่าเชื่อถืออย่างแน่นอน และอายุการใช้งานของพรอกซีดังกล่าวมีแนวโน้มที่จะเป็นศูนย์ ดังนั้นจึงจำเป็นต้องค้นหา/เขียน parser สำหรับรายการพร็อกซี กรองตามประเภทและประเทศที่ต้องการ และคำถามเกี่ยวกับการแทนที่พร็อกซีที่พบใน Spotify ยังคงเปิดอยู่ (บางทีอาจผ่าน
HTTP_PROXY
ถ่ายโอนและสร้าง wrapper แบบกำหนดเองสำหรับไบนารี่ เพื่อไม่ให้การรับส่งข้อมูลอื่นทั้งหมดไปที่นั่น) - คุณสามารถซื้อพรอกซีที่คล้ายกันและช่วยตัวเองจากปัญหาส่วนใหญ่ที่อธิบายไว้ข้างต้น แต่ในราคาพร็อกซีคุณสามารถซื้อพรีเมียมบน Spotify ได้ทันทีและสิ่งนี้ใช้ไม่ได้กับงานดั้งเดิม
- ยกของคุณ อย่างที่คุณอาจเดาได้ว่านี่คือทางเลือกของเรา
โดยบังเอิญอาจกลายเป็นว่าคุณมีเพื่อนที่มีเซิร์ฟเวอร์ในสาธารณรัฐเบลารุสหรือประเทศเล็ก ๆ อื่น คุณต้องใช้สิ่งนี้และเปิดตัวพรอกซีที่ต้องการ ผู้ที่ชื่นชอบเป็นพิเศษสามารถพอใจกับเพื่อนที่เปิดเราเตอร์ได้
ดังนั้น ตัวเลือกของเรา: Squid - ไม่สร้างแรงบันดาลใจ และฉันไม่ต้องการพร็อกซี HTTP มีโปรโตคอลนี้มากเกินไปแล้ว และในพื้นที่ของ SOCKS ก็ไม่มีอะไรสมเหตุสมผลนอกจาก
อย่ารอคู่มือของ Dante ในการติดตั้งและกำหนดค่า เขา client pass
, socks pass
ลงทะเบียนอินเทอร์เฟซอย่างถูกต้องและอย่าลืมเพิ่ม socksmethod: username
. ในแบบฟอร์มนี้ สำหรับการรับรองความถูกต้อง Logopass จะถูกดึงมาจากผู้ใช้ระบบ และส่วนที่เกี่ยวกับความปลอดภัย: การห้ามการเข้าถึง localhost การจำกัดผู้ใช้ ฯลฯ - นี่เป็นเพียงรายบุคคลเท่านั้น ขึ้นอยู่กับความหวาดระแวงส่วนตัว
ปรับใช้พรอกซีที่หันหน้าไปทางเครือข่าย
ละครมี XNUMX องก์
ทำหน้าที่หนึ่ง
เราได้แยกพรอกซีออกแล้ว ตอนนี้เราต้องเข้าถึงได้จากเว็บทั่วโลก หากคุณมีเครื่องที่มี IP สีขาวในประเทศที่ต้องการ คุณสามารถข้ามจุดนี้ได้อย่างปลอดภัย เราไม่มี (ตามที่กล่าวไว้ข้างต้น เราโฮสต์อยู่ที่บ้านเพื่อน) และ IP สีขาวที่ใกล้ที่สุดอยู่ที่ไหนสักแห่งในเยอรมนี ดังนั้นเราจะศึกษาเครือข่าย
ใช่แล้ว ผู้อ่านที่เอาใจใส่จะถามอีกครั้ง: ทำไมคุณไม่ใช้บริการที่มีอยู่เช่นนั้น
ภารกิจ: มีพรอกซีอยู่ที่ไหนสักแห่งด้านหลัง NAT คุณต้องวางมันไว้ที่พอร์ตใดพอร์ตหนึ่งของ VPS ที่มี IP สีขาวและตั้งอยู่ที่ขอบโลก
มีเหตุผลที่จะสรุปได้ว่าสิ่งนี้สามารถแก้ไขได้โดยการส่งต่อพอร์ต (ซึ่งดำเนินการผ่านการกล่าวถึงข้างต้น ssh
) หรือโดยการรวมฮาร์ดแวร์เข้ากับเครือข่ายเสมือนผ่าน VPN กับ ssh
เรารู้วิธีการทำงาน autossh
มันน่าเบื่อ ดังนั้นมาลองใช้ OpenVPN กันดีกว่า
DigitalOcean มี 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 ใช้งานไม่ได้ดังนั้นเราจะค้นหาวิธีแก้ไข
เริ่มต้นด้วยการจำเกี่ยวกับ
แต่ความสุขจะอยู่ได้ไม่นานเพราะปรากฎว่าคุณต้องเปิดใช้งานโหมดดีบั๊กและส่วนขยายเคอร์เนลที่กำหนดเองใน MacOS ตั้งค่าไฟล์อย่างง่าย ๆ และเข้าใจว่าเครื่องมือนี้มีปัญหาเหมือนกับ Spotify ทุกประการ: ไม่สามารถผ่านการรับรองความถูกต้องโดยใช้ รหัสผ่านเข้าสู่ระบบบนถุงเท้าพร็อกซี
ที่ไหนสักแห่งแถวๆ นี้ถึงเวลาที่จะต้องซื้อของพรีเมียมแล้วซื้อของพรีเมียม...แต่ไม่! ลองไปขอแก้ไขดูนะครับ มันเป็น open source ครับ! มาทำกันเถอะ
เราจะเสียใจอีกครั้ง แต่แล้วเราจะจดจำเยาวชนของเราและ C เปิดโหมดแก้ไขข้อบกพร่องใน Dante ขุดบันทึกหลายร้อยกิโลไบต์ ไปที่
ทำให้เป็นอัตโนมัติ
เมื่อ Proximac ทำงาน มันจะต้องถูกปีศาจและลืมไป มีระบบการเริ่มต้นทั้งหมดหนึ่งระบบที่เหมาะสำหรับสิ่งนี้ซึ่งพบได้ใน MacOS กล่าวคือ
เราพบมันอย่างรวดเร็ว systemd
และนี่ก็เกือบจะเป็นสกู๊ปแล้ว xml
. ไม่มีการกำหนดค่าที่หรูหราสำหรับคุณ ไม่มีคำสั่งเช่นนี้ status
, restart
, daemon-reload
. ประเภทฮาร์ดคอร์เท่านั้น start-stop
, list-grep
, unload-load
และเรื่องแปลกประหลาดอีกมากมาย เอาชนะทั้งหมดนี้เราเขียน plist
กำลังโหลด ไม่ทำงาน, ไม่เป็นผล. เราศึกษาวิธีการแก้จุดบกพร่องปีศาจ แก้จุดบกพร่องมัน ทำความเข้าใจกับสิ่งที่มีอยู่ ENV
แม้ PATH
เราไม่ได้ส่งแบบธรรมดา เราเถียง เราเอาเข้า (เสริม. /sbin
и /usr/local/bin
) และในที่สุด เราก็พอใจกับการสตาร์ทอัตโนมัติและการทำงานที่เสถียร
หายใจออก
ผลลัพธ์เป็นอย่างไร? สัปดาห์แห่งการผจญภัย สวนสัตว์คุกเข่าจากบริการที่ใส่ใจและทำในสิ่งที่จำเป็น ความรู้เล็กๆ น้อยๆ ในด้านเทคนิคที่น่าสงสัย โอเพ่นซอร์สเล็กน้อย และรอยยิ้มบนใบหน้าของคุณจากความคิดที่ว่า "ฉันทำได้แล้ว!"
ป.ล.: นี่ไม่ใช่การเรียกร้องให้มีการคว่ำบาตรนายทุน เพื่อการประหยัดเงินในการแข่งขันหรือเพื่อความฉลาดแกมโกง แต่เป็นเพียงข้อบ่งชี้ถึงความเป็นไปได้ของการวิจัยและพัฒนา ซึ่งโดยทั่วไปแล้วคุณไม่คาดหวัง
ที่มา: will.com