Spotify 如何協助您研究守護程式、RFC、網路並推廣開源。 或者,如果您無法付款,但您確實想要一些優質商品,會發生什麼情況。
開始
第三天,人們注意到 Spotify 正在根據 IP 位址的國家顯示廣告。 另據指出,在某些國家,廣告根本不進口。 例如,在白俄羅斯共和國。 然後,一個「絕妙」的計劃被制定出來,禁止非高級帳戶中的廣告。
關於 Spotify 的一些知識
一般來說,Spotify 有一個奇怪的政策。 為了購買溢價,我們的兄弟必須變得相當扭曲:將他的個人資料中的位置更改為海外,尋找一張合適的禮品卡,只能透過PayPal 支付,PayPal 最近表現得很奇怪,想要一堆文件。 總的來說,這也是一場冒險,但順序不同。 雖然大多數人這樣做是為了行動版本,但我對此不感興趣。 因此,以下所有內容僅適用於桌面版本。 而且,不會有功能的擴充。 只是剪掉一些多餘的。
為什麼這麼複雜?
當我在 Spotify 配置中註冊襪子代理資料時,我也是這麼認為的。 問題是,使用登入名稱和密碼進行的襪子身份驗證不起作用。 另外,開發人員經常圍繞代理商做一些事情:要么允許它,然後禁止它,要么破壞它,這會引起場外的大量討論。
我們決定不再依賴不穩定的函數,而是尋找更可靠、更有趣的東西。
在這裡,讀者一定會問:為什麼不採取 ssh
有鑰匙 -D
就這樣結束了嗎? 而且,總的來說,他是對的。 但是,首先,這仍然需要妖魔化並與 autossh 交朋友,以免出現連線中斷的情況。 其次:它太簡單又無聊。
為了
像往常一樣,讓我們從左到右、從上到下描述實現「簡單」想法所需的一切。
首先你需要一個代理
並且同時有多種選擇:
- 您可以從開放的代理清單中取得。 便宜(或更確切地說是免費),但絕對不可靠,而且此類代理商的生命週期趨於零。 因此,有必要為代理列表找到/編寫一個解析器,按所需的類型和國家/地區對其進行過濾,並且在 Spotify 中替換找到的代理的問題仍然懸而未決(好吧,也許通過
HTTP_PROXY
傳輸並為二進位檔案建立自訂包裝器,以便所有其他流量不會發送到那裡)。 - 您可以購買類似的代理商並避免上述大多數問題。 但以代理商的價格,你可以立即在 Spotify 上購買溢價,這對於最初的任務來說是不切實際的。
- 舉起你的。 正如您可能猜到的,這是我們的選擇。
純屬偶然,您可能有一個朋友的伺服器位於白俄羅斯共和國或其他小國家。 您需要使用它並在其上推出所需的代理。 特別的鑑賞家可以滿足於有一個路由器的朋友
所以,我們的選擇: Squid - 不鼓舞人心,而且我不需要 HTTP 代理,周圍已經有太多這種協定了。 在襪子領域,除了
不要等待 Dante 的安裝和設定手冊。 他 client pass
, socks pass
,正確註冊接口並且不要忘記添加 socksmethod: username
。 在這種形式中,為了進行身份驗證,將從系統使用者取得徽標密碼。 還有關於安全的部分:禁止存取本地主機、限制用戶等等——這純粹是個人問題,取決於個人偏執。
部署面向網路的代理
該劇分兩幕。
第一幕
我們已經整理好了代理,現在我們需要從全球網路存取它。 如果您在所需國家/地區有一台具有白色 IP 的機器,那麼您可以安全地跳過這一點。 我們沒有(如上所述,我們託管在朋友家),最近的白色 IP 在德國的某個地方,所以我們將研究網路。
所以,是的,細心的讀者會再問:為什麼不採用現有的服務,例如
任務:在 NAT 後面很遠的地方有一個代理,您需要將其掛在具有白色 IP 且位於世界邊緣的 VPS 的連接埠之一上。
邏輯上假設這可以透過連接埠轉送來解決(透過上述方法實現) ssh
),或透過 VPN 將硬體組合到虛擬網路。 和 ssh
我們知道如何工作, autossh
拿起來很無聊,所以就拿 OpenVPN 來說吧。
數位海洋有 systemd
。 只需將其(配置)放入 /etc/openvpn/client/
並且不要忘記將擴展名更改為 .conf
。 之後,拉取服務 [email protected]
別忘了為她做 enable
並慶幸一切都飛走了。
當然,我們需要停用到新建立的 VPN 的任何流量重定向,因為我們不想透過半個球傳遞流量來降低客戶端電腦的速度。
是的,我們需要在 VPN 伺服器上為我們的客戶端註冊一個靜態 IP 位址。 故事稍後會需要用到這一點。 為此,您需要啟用 ifconfig-pool-persist
, 編輯 ipp.txt
,包含在 OpenVPN 中並啟用 client-config-dir,並透過新增來編輯所需客戶端的配置 ifconfig-push
具有正確的遮罩和所需的 IP 位址。
第二幕
現在我們在「網路」上有一台機器,面向互聯網,可以用於自私的目的。 即透過它重定向部分流量。
因此,一項新任務:您需要關閉到達具有白色 IP 的 VPS 連接埠之一的流量,以便該流量進入新連接的虛擬網絡,並且可以從那裡返回回應。
解決方案:當然可以 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
在這裡,我們將來自外部介面連接埠 8080 的所有 TCP 流量重新導向到 IP 10.8.0.2 和相同連接埠 8080 的電腦。
對於那些想要了解工作中骯髒細節的人 netfilter
, iptables
和一般的路由,絕對有必要考慮
所以,現在我們的資料包飛到虛擬子網並且......它們留在那裡。 更準確地說,來自襪子代理的回應透過 Dante 電腦上的預設網關飛回,接收者將其丟棄,因為在網路中,通常不會向一個 IP 發送請求並接收來自另一個 IP 的回應。 因此,我們還需要不斷地去想像。
因此,現在您需要將所有封包從代理重新導向回虛擬子網,並傳送至具有白色 IP 的 VPS。 這裡的情況有點糟糕,因為它只是 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 的路由表(一般來說,該編號不依賴任何東西,我們只是想要to)並添加一條規則,根據該規則,此表中包含的所有資料包都會飛向 VPN 子網路。
偉大的! 現在封包飛回 VPS...並在那裡消失。 因為VPS不知道如何處理它們。 因此,如果您不介意的話,您可以簡單地將來自虛擬子網路的所有流量重新導向回 Internet:
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 的所有內容都被封裝在來源 NAT 中,並飛向預設接口,該介面將轉至 Internet。 需要注意的是,只有當我們透明轉送埠時,這個東西才會起作用,也就是說,VPS上的傳入埠與我們代理的連接埠相符。 不然你就要多受一點苦。
現在某個地方一切都應該開始工作了。 還剩下一點:不要忘記確保所有配置 iptables
и route
重啟後沒有繼續。 為了 iptables
有一些特殊文件,例如 /etc/iptables/rules.v4
(對於 Ubuntu 來說),但是對於路由來說,一切都有點複雜。 我把他們推入 up/down
OpenVPN 腳本,儘管我認為它們本來可以做得更好。
將來自應用程式的流量封裝在代理程式中
因此,我們有一個在所需國家/地區進行身份驗證的代理,可以透過靜態白色 IP 位址進行存取。 剩下的就是使用它並重定向來自 Spotify 的流量。 但有一個細微差別,如上所述,Spotify 中代理程式的登入密碼不起作用,因此我們將尋找如何繞過它。
首先,讓我們記住
但這種快樂是短暫的,因為事實證明,你需要在 MacOS 中啟用調試模式和自定義內核擴展,提交一個簡單的配置,並了解該工具與 Spotify 存在完全相同的問題:它無法使用襪子代理上的登入密碼。
在這附近的某個地方,是時候驚慌失措地購買溢價了……但是不行! 讓我們嘗試要求修復它,它是開源的! 讓我們做
我們又會心煩意亂。 但隨後我們會記住我們的青春和C,打開Dante的調試模式,挖掘數百KB的日誌,轉到
自動化
一旦 Proximac 發揮作用,它就需要被妖魔化並被遺忘。 在 MacOS 中可以找到一整套適合於此的初始化系統,即
我們很快就找到了 systemd
這裡幾乎是個湯匙 xml
。 沒有適合您的花哨配置,沒有類似的命令 status
, restart
, daemon-reload
。 只有硬核類型 start-stop
, list-grep
, unload-load
還有更多的怪事。 克服我們寫的這一切 plist
, 載入中. 不起作用。 我們研究調試惡魔的方法,調試它,了解裡面有什麼 ENV
甚至 PATH
我們沒有提供正常的,我們爭辯說,我們把它帶進來(添加 /sbin
и /usr/local/bin
)最後我們對自動啟動和穩定運行感到滿意。
吐氣
結果如何? 一周的冒險,一個跪著的動物園,其服務是貼心的,並且做了它所要求的事情。 對可疑的技術領域有一點了解,一點開源知識,並且因為“我做到了!”的想法而臉上露出微笑。
PS:這並不是呼籲抵制資本家、節省比賽費用或完全狡猾,而只是表明研究和開發的可能性,一般來說,你不會想到它們。
來源: www.habr.com