
Spotifyが悪魔、RFC、ネットワーク、およびオープンソースプロモーションの学習にどのように役立つか。 または、支払うことができず、一部のプレミアムパンが本当にしたい場合はどうなりますか。
開始する
3日目に、SpotifyはIPアドレスの国に基づいて広告を公開していることがわかりました。 また、いくつかの国では広告がまったく配信されなかったことにも留意されました。 たとえば、 ベラルーシ 。 そして、プレミアムではないアカウントの広告を無効にする「素晴らしい」計画が成熟しました。
Spotifyについて少し
一般的に、Spotifayには奇妙なポリシーがあります。 私たちの兄弟は、プレミアムを購入するためにかなり倒錯している必要があります:プロファイルの場所を海外の場所に変更し、paypalでのみ支払うことができる適切なGIFカードを探してください。 一般に、冒険でもありますが、順序は異なります。 これのほとんどはモバイル版用ですが、私は興味がありません。 したがって、以下はすべてデスクトップバージョンの場合にのみ役立ちます。 さらに、機能の拡張はありません。 超過分の一部のみを切り取ります。
なぜそんなに複雑なのですか?
そして、Sockifyの設定でsocks-proxyデータを登録することを考えました。 問題は、ログインとパスワードによる靴下での認証が機能しないことでした。 さらに、開発者は定期的にプロキシの周りに何かをひねります。許可または無効化してから、それを破って、オフサイトでディスカッションのパネル全体を作成します。
不安定な機能に依存せず、より信頼性が高く好奇心の強いものを見つけることが決定されました。
ここのどこかで、読者は尋ねるべきです:なぜ-D
ssh
を使い、終わりに対処しませんか? そして、一般的に、彼は正しいでしょう。 しかし、最初に、接続を切断することを考えないために、それはまだ悪魔化され、autosshと友達になる必要があります。 そして第二に、それは単純すぎて退屈です。
順番に
いつものように、左から右、上から下に移動して、「単純な」アイデアを実装するために必要なすべてを説明しましょう。
まず、プロキシが必要です
そして、一度に多くの選択肢:
- 開いたプロキシリストから取得するだけです。 安価な(またはまったくない)が、絶対に信頼性が低く、そのようなプロキシの寿命はゼロになる傾向があります。 したがって、リストのプロキシパーサーを検索/作成し、目的のタイプと国でフィルター処理する必要があります.Spotifyで見つかったプロキシを置換する問題は未解決のままです(
HTTP_PROXY
を介して、残りのトラフィックがすべて送信されないようにバイナリのカスタムラッパーを送信しない限り) ) - 同様のプロキシを購入して、上記の問題のほとんどを回避できます。 しかし、プロキシ価格で、Spotifyですぐにプレミアムを購入できます。これは、最初のタスクの一部としてスポーティではありません。
- あなたを育てます。 おそらくご想像のとおり、これが私たちの選択です。
偶然にも、ベラルーシや他の小さな国にサーバーがある友人がいることが判明する場合があります。 これを使用して、目的のプロキシを展開する必要があります。 特別な愛好家は、 DD-WRTまたは同様のソフトウェアへのルートを持つ友人に満足することができます。 しかし、そこには独自の 素晴らしい世界があり、この世界は明らかにこの物語の枠組みには収まりません。
そのため、私たちのオプション:Squid-刺激的ではなく、HTTPプロキシは必要ありません。このプロトコルにはあまりにも多くのものがあります。 また、SOCKSの分野では、 Dante以外の賢明なものはまだ提供されていません。 したがって、我々はそれを取る。
Danteのインストールおよび設定用のManulaは待ちません。 彼はただグーグルで、ほとんど興味がありません。 最小構成では、あらゆる種類のclient pass
、 socks pass
をスローする必要があり、インターフェイスを正しく登録し、 socksmethod: username
を追加することを忘れないでください。 このフォームでは、認証のために、ロゴパスはシステムのユーザーから取得されます。 そしてセキュリティに関する部分:ローカルホストへのアクセスの禁止、ユーザーの制限など-これは純粋に個人的なもので、個人的な妄想に依存します。
プロキシフェイスをネットワークに展開します
2つの行為でのパフォーマンス。
第1幕
プロキシを見つけたので、今度はグローバルWebからプロキシにアクセスする必要があります。 適切な国に白いIPを持つマシンがある場合は、この項目を安全にスキップできます。 私たちには(上記のように、友人を自宅でホストします)なく、最も近い白いIPがドイツのどこかにあるので、ネットワークを調べます。
そうです、注意深い読者は再び尋ねます: ngrokなどのような既存のサービスを利用してみませんか? そして、彼は再び正しいでしょう。 しかし、これはサービスであり、再び悪魔化される必要があり、お金もかかる可能性があり、一般的にはスポーツではありません。 したがって、私たちは即興の素材から自転車を作ります。
タスク:NAT番目をはるかに超えた場所にプロキシがあります。VPSポートの1つにハングさせる必要があります。VPSポートは白いIPを持ち、世界の端にあります。
これは、ポートを転送する(前述のssh
を介して実装される)か、VPNを介して鉄片を仮想ネットワークに結合することによって解決されると想定するのが論理的です。 ssh
方法は知っていssh
autossh
退屈なので、OpenVPNを使用しましょう。
DigitalOceanはこの問題に関して素晴らしいマヌルネコを持っています。 追加するものは何もありません。 そして、結果の構成は、OpenVPNクライアントとsystemd
と非常に簡単に友達になります。 /etc/openvpn/client/
設定(config)するだけで十分です。拡張子を/etc/openvpn/client/
に変更することを忘れないでください。 その後、サービスopenvpn-client@openvpn-client-config-name.service
ます。サービスをenable
ことを忘れずに、すべてが飛んだことを喜んでください。
もちろん、新たに作成されたVPNへのトラフィックリダイレクションを無効にする必要があります。これは、トラフィックがハーフボールでオーバーランするため、クライアントマシンの速度を下げたくないためです。
はい、クライアントのVPNサーバーに静的IPアドレスを登録する必要があります。 これは物語の中でもう少し必要になります。 これを行うには、 ifconfig-pool-persist
を有効にし、OpenVPNにバンドルされているipp.txt
編集し、client-config-dirを有効にし、さらに正しいマスクと目的のIPアドレスでifconfig-push
を追加して目的のクライアントの構成を編集します。
第2幕
今、私たちは「ネットワーク」にインターネットに直面し、個人的な利益のために使用できるマシンを持っています。 つまり、トラフィックの一部をリダイレクトします。
したがって、新しいタスク:VPSポートの1つに到着するトラフィックを白いIPでラップアップして、このトラフィックが新たに接続された仮想ネットワークに行き、そこから応答が返されるようにする必要があります。
解決策:もちろんiptables
! 彼と一緒に練習する素晴らしい機会はいつですか?
デバッグネットワークは非常に特殊な手順であるため、必要な構成はすぐに、3時間で、100の誓い言葉とほんの一握りの神経を見つけます。
まず、カーネルでトラフィックのリダイレクトを有効にする必要があります。 これは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
およびルーティングの汚い詳細が必要な人は、絶対にthisまたはthatを熟慮する必要があります。
したがって、パッケージは仮想サブネットに移動し、...そこにとどまります。 より正確には、ソックスプロキシからの応答は、Danteマシンのデフォルトゲートウェイを経由して戻ってきます。ネットワークでは、1つのIPにリクエストを送信し、別のIPからレスポンスを受信することは受け入れられないためです。 したがって、さらに想起する必要があります。
そのため、今度はすべてのパケットをプロキシから仮想サブネットにリダイレクトして、ホワイトIPのVPSに向ける必要があります。 ここで状況は少し悪くなります。なぜなら、ルーティングする前に宛先アドレスを修正すると( PREROUTING
)、インターネット上のパケットが飛び去ることがなく、修正しない場合、パケットはdefault gateway
PREROUTING
れるからdefault gateway
。 そのため、次の手順を実行する必要がありますiptables
を介してパケットにタグを付け、パケットを必要な場所に送信するカスタムルーティングテーブルにラップするために、 mangle
チェーンを思い出してください。
すぐに言ってやった:
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
ここでは、255.255.255.000のマスクを持つ10.8.0.0サブネットから到着するすべてのものがsource-NATにラップされ、インターネットに向けられたデフォルトインターフェイスに飛びます。 このことは、ポートを透過的に転送する場合、つまり、VPSの着信ポートがプロキシのポートと一致する場合にのみ機能することに注意することが重要です。 そうでなければ、もう少し苦しむ必要があります。
どこかで、すべてが機能し始めます。 少しだけ残っています。再起動後にすべてのiptables
とroute
configsが継続しないことを忘れないでください。 /etc/iptables/rules.v4
の場合)などのiptables
用の特別なファイルがあり、ルートの場合はすべて少し複雑です。 OpenVPNのup/down
スクリプトにプッシュしましたが、もっときちんとできると思います。
プロキシでアプリケーショントラフィックをラップする
そのため、適切な国に認証を備えたプロキシがあり、静的な白いIPアドレスでアクセスできます。 それを使用し、Spotifyからのトラフィックをそこにリダイレクトすることは残っています。 ただし、前述のとおり、Spotifayaのプロキシのログインパスワードが機能しないという微妙な違いがあるため、回避方法を探します。
まず第一に、 proxifierを覚えておいてください 。 すばらしいことは、それは宇宙船(40ドル)のような費用だけです。 お金のためにプレミアムを再び購入し、終わりに対処することができます。 そのため、ポピーでもっと自由でオープンなアナログを探します(そう、ポピーで音楽を聴きたいです)。 ひとつのツールproximacを見つけます。 そして、喜んで彼をつついて行きましょう。
ただし、MacOSでデバッグモードとカスタムカーネル拡張機能を有効にし、簡単な設定を行い、このツールがSpotifyとまったく同じ問題を抱えていることを理解する必要があることが判明したため、喜びは短命になります:ログインパスワードで認証できませんソックスプロキシ。
ここのどこかでおかしくなり、まだプレミアムを購入する時が来ました...しかし、そうではありません! オープンソースの修正を依頼してみましょう! チケットを作ります。 それに応じて、唯一のメンテナーがMacbookを持っていなくて、あなたと地獄にいるという、悲惨な話を受け取ります。
再び欲求不満。 しかし、私たちは若者とCを思い出し、Danteでデバッグモードをオンにし、100キロバイトのログを掘り下げ、SOCKS5プロトコルに関する情報についてRFC1927に行き、Xcodeでそれを見つけ出し、それでも問題を見つけます。 クライアントが認証用に提供するメソッドコードのリストの1文字を修正すれば十分で、すべてが時計のように機能し始めます。 喜んでリリースバイナリを収集し、 プールリクエストを行い、 日没に行きます 次のポイントに進みます。
自動化する
Proximacを獲得したら、それを悪魔化し、それを忘れる必要があります。 このために、MacOS上にある1つの初期化システム、つまりlaunchdが利用できます。
マニュアルをすぐに見つけて、これはまったくsystemd
れておらず、ここではほとんどスクープとxml
あることを理解しています。 美しい設定はありません。status、 restart
、 daemon-reload
などのコマンドはありません。 start-stop
、 list-grep
、 unload-load
などの奇妙な形式のハードコアのみ。 これをすべて克服して、 plist
、loadを作成します。 動作しません。 デーモンdebazhimのデバッグ方法を研究します.PATHでさえ、通常のものをインポートせず、誓い、インポート( /sbin
および/usr/local/bin
追加)し、最終的に自動起動と安定した動作を喜ぶことがわかります。
吐き出す
結果は何ですか? 1週間の冒険、心から愛され、必要なことをするサービスの膝丈の動物園。 疑わしい技術分野の少しの知識、オープンソースのドロップ、「私はやった!」という考えからの彼の顔の笑顔。
PS:これは、資本家のボイコット、マッチの節約、または完全なtotalさの要求ではなく、一般にあなたが期待しない研究開発の可能性を示しています。