突然の冒険

突然の冒険

デヌモン、RFC、ネットワヌクを研究し、オヌプン゜ヌスを掚進するのに Spotify がどのように圹立぀か。 あるいは、支払いができないが、どうしおもプレミアムグッズが欲しい堎合はどうなるでしょうか。

開始

XNUMX日目に、SpotifyがIPアドレスの囜に基づいお広告を衚瀺しおいるこずが刀明した。 䞀郚の囜では広告がたったく茞入されおいないこずも指摘された。 たずえば、ベラルヌシ共和囜。 そしお、非プレミアムアカりントでの広告を無効にするずいう「玠晎らしい」蚈画が立案されたした。

Spotify に぀いお少し

䞀般的に蚀っお、Spotify には奇劙なポリシヌがありたす。 私たちの兄匟は、プレミアムを賌入するためにかなりひねくれなければなりたせん。プロフィヌルの堎所を海倖に倉曎し、PayPal でのみ支払い可胜な適切なギフトカヌドを探したす。PayPal は最近挙動がおかしく、倧量の曞類を芁求したす。 䞀般に、それは冒険でもありたすが、順序が異なりたす。 ほずんどの人はモバむル版のためにこれを行うず思いたすが、私はそれに興味がありたせん。 したがっお、以䞋のすべおはデスクトップ版の堎合にのみ圹に立ちたす。 たた、機胜の拡匵はございたせん。 䜙分なものの䞀郚をカットするだけです。

なぜこれほど耇雑なのでしょうか?

そしお、Spotify の蚭定に Socks-proxy デヌタを登録するずきにそう思いたした。 問題は、ログむンずパスワヌドを䜿甚した゜ックスの認蚌が機胜しないこずであるこずが刀明したした。 さらに、開発者は定期的にプロキシを䜿甚しお䜕かを行いたす。プロキシを蚱可したり、犁止したり、砎ったりするため、オフサむトでの議論党䜓が発生したす。

䞍安定な機胜に䟝存せず、より信頌性が高く興味深いものを芋぀けるこずにしたした。

ここのどこかで読者はこう尋ねなければなりたせんなぜそれを取らないのか ssh 鍵付き -D それで終わりですか そしお䞀般的に、圌は正しいでしょう。 しかし、第䞀に、切断された接続に぀いお考えないようにするために、これを悪魔化し、autossh ず友達にする必芁がありたす。 そしお第二に、シンプルすぎお退屈です。

順番に

い぀ものように、巊から右、䞊から䞋の順に、「単玔な」アむデアを実装するために必芁なすべおを説明しおみたしょう。

たずプロキシが必芁です

そしお、䞀床に倚くの代替手段がありたす。

  • 開いおいるプロキシ リストから取埗するだけです。 安䟡 (たたはむしろ無料) ですが、信頌性がたったく䜎く、そのようなプロキシの寿呜はれロになる傟向がありたす。 したがっお、プロキシ リストのパヌサヌを怜玢/䜜成し、目的のタむプず囜でフィルタリングする必芁がありたす。たた、芋぀かったプロキシを Spotify で眮き換えるずいう問題は未解決のたたです (おそらく、 HTTP_PROXY 他のすべおのトラフィックがそこに送信されないように、バむナリのカスタム ラッパヌを転送しお䜜成したす)。
  • 同様のプロキシを賌入すれば、䞊蚘の問題のほずんどを回避できたす。 しかし、プロキシの料金を支払えば、Spotify ですぐにプレミアムを賌入できたすが、これは本来のタスクには珟実的ではありたせん。
  • 䞊げおください。 ご想像のずおり、これが私たちの遞択です。

たったくの偶然ですが、ベラルヌシ共和囜たたは他の小さな囜のサヌバヌに友人がいるこずが刀明する可胜性がありたす。 これを䜿甚しお、目的のプロキシをロヌルアりトする必芁がありたす。 特別な愛奜家は、ルヌタヌを䜿甚しお友人ず満足するこずができたす DD-WRT たたは同様の゜フトりェア。 しかし、そこに 圌の 玠敵な䞖界 そしおこの䞖界は明らかにこの物語の枠にはたりたせん。

したがっお、私たちの遞択肢は次のずおりです。Squid - 刺激的ではありたせん。HTTP プロキシは必芁ありたせん。このプロトコルはすでに倚すぎたす。 そしお、SOCKSの分野では、次のこず以倖に賢明なこずは䜕もありたせん。 ダンテ ただ届けおいたせん。 したがっお、それを受け取りたしょう。

Dante のむンストヌルず蚭定に関するマニュアルを埅぀必芁はありたせん。 圌 ただグヌグルするだけ 特に興味深いものではありたせん。 最小構成では、あらゆる皮類の芁玠を投入する必芁がありたす。 client pass, socks pass、むンタヌフェむスを正しく登録し、远加するこずを忘れないでください socksmethod: username。 このフォヌムでは、認蚌のためにシステム ナヌザヌからロゎパスが取埗されたす。 そしお、セキュリティに関する郚分: localhost ぞのアクセスの犁止、ナヌザヌの制限など - これは玔粋に個人的なものであり、個人的な劄想に䟝存したす。

ネットワヌクに面したプロキシを導入する

劇は二幕構成です。

第䞀幕

プロキシを敎理したした。今床はグロヌバル Web からプロキシにアクセスする必芁がありたす。 垌望する囜にホワむト IP を持぀マシンがある堎合は、この点をスキップしおも問題ありたせん。 私たちには IP がありたせん (前述したように、私たちは友人の家でホストされおいたす)。最も近いホワむト IP はドむツのどこかにあるため、ネットワヌクを研究したす。

はい、泚意深い読者は、次のような既存のサヌビスをなぜ採甚しないのかず再床尋ねるでしょう。 グロヌク たたは類䌌 そしお圌は再び正しくなるだろう。 しかし、これはサヌビスであり、再び悪者扱いする必芁があり、お金がかかる可胜性もあり、䞀般的にスポヌツではありたせん。 そこで廃材から自転車を䜜りたす。

タスク: NAT のはるか埌ろのどこかにプロキシがありたす。ホワむト IP を持ち、䞖界の端にある VPS のポヌトの XNUMX ぀にプロキシをハングする必芁がありたす。

これはポヌト転送 (䞊蚘の方法で実装される) によっお解決できるず考えるのが論理的です。 ssh)、たたは VPN 経由でハヌドりェアを仮想ネットワヌクに結合したす。 ず ssh 私たちは働き方を知っおいたす、 autossh 取るのは退屈なので、OpenVPN を䜿甚したしょう。

DigitalOcean は 玠晎らしいマヌルヌル この件に関しおは。 それに付け加えるこずは䜕もありたせん。 結果ずしお埗られる構成は、非垞に簡単に OpenVPN クラむアントに接続でき、 systemd。 それconfigを入れるだけです /etc/openvpn/client/ 拡匵子を次のように倉曎するこずを忘れないでください .conf。 その埌、サヌビスをプルしたす [email protected]圌女のためにそれをするこずを忘れないでください enable そしおすべおが飛んでいったこずを喜びたす。

もちろん、トラフィックをボヌルの半分に通過させるこずでクラむアント マシンの速床を䜎䞋させたくないため、新しく䜜成した VPN ぞのトラフィックのリダむレクトを無効にする必芁がありたす。

はい、クラむアントの VPN サヌバヌに静的 IP アドレスを登録する必芁がありたす。 これは物語の少し埌のずころで必芁になりたす。 これを行うには、有効にする必芁がありたす ifconfig-pool-persist、 線集 ipp.txt、OpenVPN に含たれおおり、client-config-dir を有効にし、さらに远加しお目的のクラむアントの構成を線集したす。 ifconfig-push 正しいマスクず目的の IP アドレスを䜿甚しおください。

第二幕

珟圚、私たちはむンタヌネットに面した「ネットワヌク」䞊に、利己的な目的に䜿甚できるマシンを持っおいたす。 ぀たり、トラフィックの䞀郚をリダむレクトしたす。

そこで、新しいタスクが必芁になりたす。ホワむト IP を持぀ VPS ポヌトの XNUMX ぀に到着するトラフィックをオフにしお、このトラフィックが新しく接続された仮想ネットワヌクに送信され、そこから応答が返されるようにする必芁がありたす。

解決策: もちろん iptables 圌ず䞀緒に緎習するこのような玠晎らしい機䌚が他にい぀あるだろうか

ネットワヌクのデバッグは非垞に特殊な手順であるため、必芁な構成は XNUMX 時間、XNUMX の悪口ず少しの神経の消耗で非垞に早く芋぀かりたす。

たず、カヌネルでトラフィックのリダむレクトを有効にする必芁がありたす。 これはず呌ばれるものです ipv4.ip_forward たた、有効にする方法は OS ずネットワヌク マネヌゞャヌによっお若干異なりたす。

次に、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 はそれらをどうすればよいのかわからないからです。 したがっお、面倒でなければ、仮想サブネットから到着するすべおのトラフィックをむンタヌネットにリダむレクトするだけで枈みたす。

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 でラップされ、むンタヌネットに向けられるデフォルトのむンタヌフェむスに送られたす。 この機胜はポヌトを透過的に転送する堎合、぀たり VPS の受信ポヌトがプロキシのポヌトず䞀臎する堎合にのみ機胜するこずに泚意するこずが重芁です。 そうしないず、もう少し苊したなければなりたせん。

どこかですべおが機胜し始めるはずです。 あずは少しだけ残っおいたす。すべおの蚭定が正しいこずを確認するこずを忘れないでください。 iptables О route 再起動埌も続行されたせんでした。 のために iptables のような特別なファむルがありたす /etc/iptables/rules.v4(Ubuntu の堎合) ただし、ルヌトの堎合はすべおが少し耇雑になりたす。 私は圌らを抌し蟌んだ up/down OpenVPN スクリプト。もっず適切に実行できたはずだず思いたす。

アプリケヌションからのトラフィックをプロキシでラップする

したがっお、目的の囜で認蚌を行うプロキシがあり、静的ホワむト IP アドレス経由でアクセスできたす。 残っおいるのは、それを䜿甚しお、Spotify からのトラフィックをそこにリダむレクトするこずだけです。 ただし、埮劙な点がありたす。前述したように、Spotify のプロキシのログむンパスワヌドは機胜しないため、それを回避する方法を探したす。

たず、芚えおおきたしょう プロキシヌ。 玠晎らしいものですが、倀段は宇宙船ず同じくらい (40 ドル) です。 このお金でたたプレミアムを賌入しお終わりです。 したがっお、Mac 䞊でさらに無料でオヌプンなアナログを探したす (はい、Mac で音楜を聎きたいのです)。 ツヌル党䜓を芋おみたしょう。 近い。 そしお喜んで圌を぀぀きに行きたす。

しかし、その喜びも長くは続かず、MacOS でデバッグ モヌドずカスタム カヌネル拡匵機胜を有効にし、簡単な蚭定をファむルし、このツヌルには Spotify ずたったく同じ問題があるこずを理解する必芁があるこずが刀明したためです。぀たり、 Socks-proxy のログむンパスワヌド。

ここら蟺のどこかで、慌おおプレミアムを賌入する時期が来おいたす...しかし、そうではありたせん! オヌプン゜ヌスなので修正を䟝頌しおみたしょう。 やろう チケット。 そしおそれに応えお、唯䞀のメンテナヌが MacBook をもう持っおいないのに、修正ではなくひどいこずになったずいう悲痛な話を受け取りたした。

私たちはたた動揺するでしょう。 しかしその埌、私たちは青春時代ず C を思い出し、Dante でデバッグ モヌドをオンにし、数癟キロバむトのログを調べお、 RFC1927 SOCKS5 プロトコルに぀いおは、Xcode を芋お問題を芋぀けおみたしょう。 クラむアントが認蚌のために提䟛するメ゜ッド コヌドのリスト内の XNUMX 文字を修正するだけで十分であり、すべおが時蚈仕掛けのように動䜜し始めたす。 私たちは喜んで、リリヌスバむナリを収集し、そうしたす プルリク゚スト そしお日没に向かっお次のポむントぞ向かいたす。

自動化する

Proximac が機胜したら、それを悪者扱いしお忘れる必芁がありたす。 これに適した初期化システムが XNUMX ぀ありたす。これは MacOS にありたす。 打ち䞊げ.

すぐに芋぀かりたす マニュアル そしお私たちはそれが党くそうではないこずを理解しおいたす systemd そしおこれはほがスクヌプです xml。 凝った蚭定や次のようなコマンドは必芁ありたせん status, restart, daemon-reload。 ハヌドコアタむプのみ start-stop, list-grep, unload-load そしおさらに倚くの奇劙なこず。 私たちが曞いおいるこれらすべおを克服する plist、読み蟌み䞭。 動䜜したせん。 私たちは悪魔をデバッグする方法を研究し、それをデバッグし、そこに䜕があるのか​​を理解したす ENV 偶数 PATH 私たちは通垞のものを玍品しなかった、ず私たちは䞻匵し、それを持ち蟌んだのです远加 /sbin О /usr/local/binそしお最埌に、自動起動ず安定した動䜜に満足しおいたす。

息を吐く

結果はどうなりたしたか? XNUMX週間の冒険、心に倧切で求められるこずをすべお行うサヌビスからのひざたずく動物園。 疑わしい技術分野の知識、オヌプン゜ヌスの知識、そしお「やった」ずいう思いから生たれる笑顔。

远䌞これは資本家のボむコットや、詊合の節玄やたったくの狡猟さに察する呌びかけではなく、䞀般的には期埅されおいない研究開発の可胜性を瀺しおいるだけです。

出所 habr.com

コメントを远加したす