GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

ab77

netflix-proxy – Netflixを監視するスマートDNSプロキシ

投稿日:

Netflixを監視するスマートDNSプロキシ http://anton.belodedenko.me/tag/netfl…

TL;DR

クリーンな公開IP上にrootでDebianまたはUbuntuの箱を見つけて実行してください:

apt-get update\
  && apt-get -y install vim dnsutils curl sudo\
  && curl -fsSL https://get.docker.com/ | sh\
  && mkdir -p ~/netflix-proxy\
  && cd ~/netflix-proxy\
  && curl -fsSL https://github.com/ab77/netflix-proxy/archive/latest.tar.gz | gunzip - | tar xz --strip-components=1\
  && ./build.sh

一般的なトラブルシューティングのアイデアについては、 Wikiのページを参照してください。

Unzoner VPNサービスを購読してブロックを解除する

netflix-proxyは、 NetflixHulu [n2]HBO Nowなどを地域外に流すためのスマートなDNSプロキシです。 これはDockerコンテナを使用して展開され、 dnsmasqsniproxy [n1]を使用してSmartDNSサービスを提供します。 また、 [n17] The Great Firewallをバイパスするためにも使用でき、 PornHubなどのブロックされたサイトでも動作します。 ドイツに住んでいて、他の世界のようにYouTubeをたい場合は、 googlevideo.comdnsmasq.confファイルに追加し、 googlevideo.com docker restart dnsmasqを実行してdocker restart dnsmasq メーリングリストに登録し、新機能、アップデートなどの通知を受ける

サポートされるサービス

次のものはそのまま利用可能ですが、追加のサービスを追加するのは簡単ではdnsmasq.confファイルを更新してdnsmasq.conf docker restart dnsmasqを実行することでdnsmasq.confます:

  • Netflix
  • Hulu [n2]
  • 今すぐHBO
  • Amazonのインスタントビデオ
  • クラックル
  • パンドラ
  • Vudu
  • blinkbox
  • BBC iPlayer [n5]
  • NBCスポーツと潜在的にもっと多くの

ライセンス

このプロジェクトは無料で、 MITライセンスの対象です。 いかなる保証もなく提供されており、私的および商業目的を含むあらゆる目的に使用することができます。 ただし、商用目的で使用する場合(つまり、お金を稼ぐ場合)、不公平なので、無料のサポートを期待しないでください。 必要に応じて、商用サポートモデルを常に交渉することができます。 これが興味のあるものなら、私に連絡してください。

指示

以下の段落では、私がこれまでに試したいくつかの異なるクラウドプロバイダーを使って、このソリューションを稼働させる方法を示します。 ビデオチュートリアルが好きな方は、 こちらのユーザーの1人がおすすめです。 OpenVZ [n15]では動作しませんので、KVMまたはXenを使用して適切な仮想マシンを取得してください。

(Netflixはブロックされています [n16] )以下はDigitalOceanが提供する標準のUbuntu Dockerイメージに基づいていますが、理論上 DockerがプリインストールされているLinuxディストリビューション動作するはずです。

  1. デジタルオーシャンに向かい、 10ドルのクレジットを獲得
  2. 最新のDockerイメージを使用して、興味のある地理的な場所にドロップレットを作成します( One-click Appsタブの下にあります)。
  3. SSHをサーバーにインストールして実行します。
mkdir -p ~/netflix-proxy\
  && cd ~/netflix-proxy\
  && curl -fsSL https://github.com/ab77/netflix-proxy/archive/latest.tar.gz | gunzip - | tar xz --strip-components=1\
  && ./build.sh
  1. netflix-proxy管理サイトのURLと認証情報を必ず記録してください。
  2. スクリプトの最後に指定したIPアドレスにDNSサーバーを設定し、 このサイトに移動して同じIPが表示されていることを確認します。
  3. 最後に、 Netflixなどを地域外で楽しんでください。
  4. 何かがうまくいけない場合は、新しい問題をお楽しみください(また、 #netflix-proxy with freenode )。

追加のIPを許可する

あなたのシステムを友人や家族と共有したい場合は、 http://<ipaddr>:8080/にあるnetflix-proxy管理サイトを使って自宅のIPアドレスを許可することができますipaddrはパブリックIPアドレスですあなたのVPSの ビルド時に記録したパスワードでadminアカウントでログインしてください。 管理者の資格情報を忘れた場合は、 リセットしてください。

adminアカウントは、IPの入力または削除を制限しません。 自動的に入力されたドロップダウンを使用してIPのエントリを現在のクライアントIPに制限する場合は、 authディレクトリにあるaccount-creator.shスクリプトを使用して標準のユーザアカウントを作成します。ユーザーアカウント

動的IP

ISPが新しいものを(例えばDHCP経由で)割り当てた場合は、 netflix-proxy管理サイトを使用してIPアドレスを更新することもできます。 IPアドレスが変更された場合、すべてのHTTP / HTTPS要求は自動的にポート8080管理サイトにリダイレクトされます。 すべてのDNS要求は、ポート5353実行されているdnsmasqインスタンスにリダイレクトされます。 この後、ブラウザとシステムのDNSキャッシュをパージする必要があります。 Windowsでは、 ipconfig /flushdnsます。 OS Xでは、次を実行します。

sudo killall -HUP mDNSResponder\
 && sudo dscacheutil -flushcache`

その後、ブラウザを再起動します(例: chrome://restart )。または関連するデバイスを再起動します。 このメカニズムはブラウザでは機能しますが、Apple TVやスマートテレビなどの他のデバイスでエラーが発生する可能性があります。 インターネットが突然動作しなくなったら、ブラウザをnetflix.com行ってnetflix.com

IPのスクリプトによる承認

  • スクリプトを使用してクライアントIPを自動的に認証するには( ipaddrはVPSのパブリックIPアドレス)、管理者の資格情報を入力して実行します。
curl -L http://<ipaddr>:8080/autoadd?username=<admin-username>&password=<admin-password>
  • 特定のIPを手動で許可するには、管理者の資格情報を代用して実行します。
curl -L http://<ipaddr>:8080/autoadd?ip=<your-public-ipaddr>&username=<admin-username>&password=<admin-password>

自動IP許可

警告 :あなたが何をしているのか分からない限りこれを有効にしないでください。

プロキシにヒットするすべてのIPの自動認可を有効にするには、 auth/settings.pyAUTO_AUTH = Trueauth/settings.pyservice netflix-proxy-admin restartを実行しservice netflix-proxy-admin restart この設定は、ボット、ハッカー、スパマーなど、初めてのWebブラウザーでプロキシIPに当たるIPを効果的に認証します。承認が成功すると、ブラウザーはGoogleにリダイレクトされます

DNSサービスは、 デフォルトで再帰がオンに設定されているため、認証が成功すると、誰でもVPSをDNS増幅攻撃で使用することができ、VPSプロバイダとの契約に違反する可能性があります。 あなたは警告されています

セキュリティ

ビルドスクリプトは、 DNS再帰をオンにしてシステムを自動的に設定します。 これにはセキュリティ上の影響があります。これは、潜在的にDNSサーバをDNS増幅攻撃、 つまりDDoS攻撃の一種にするためです。 ただし、ビルドスクリプトによって自動的に設定されたiptablesファイアウォールルールがそのまま残っている限り、これは問題ではありません。 ただし、ファイアウォールを無効にすることを決断した場合は、これに注意してください。

コマンドラインオプション

追加の制御のために、次のコマンドラインオプションをオプションでbuild.shに渡すことができます。

Usage: ./build.sh [-b 0|1] [-c <ip>]
        -b      grab docker images from repository (0) or build locally (1) (default: 0)
        -c      specify client-ip instead of being taken from ssh_connection

更新

既存のデータベーススキーマを更新するには、提供されているupdate.shスクリプトを実行してください。 あるいは、スキーマ更新を手動で実行することもできます(バージョンをスキップした場合など)。

他のクラウドプロバイダー

ロケールの問題

ビルドスクリプトは、UbuntuとDebianで動作するように設計されています。 他のすべてのディストリビューションではほとんど失敗するでしょう。 一部の前提条件では、ロケールを正しく設定する必要があり、一部のプロバイダOSイメージでは追加のヘルプが必要です。 ビルド中にPythonおよび/またはpipによって報告されたlocale問題が発生した場合は、まず次のpip実行してみてください。

export LANGUAGE=en_US.UTF-8\
  && export LANG=en_US.UTF-8\
  && export LC_ALL=en_US.UTF-8\
  && export LC_CTYPE="en_US.UTF-8"\
  && locale-gen en_US.UTF-8\
  && sudo apt-get -y install language-pack-en-base\
  && sudo dpkg-reconfigure locales

(Netflixはブロックされています [n16] )以下はVultrが提供するDebianイメージに基づいていますが、理論上はDebianディストリビューションで動作するはずです。

  1. 限られた時間の間、 Vultrに向かい 、アカウントを作成し、 20ドルのクレジットを獲得してください
  2. DebianまたはUbuntuイメージを使用して、関心のある地理的な場所に計算インスタンスを作成します。
  3. SSHをサーバーにインストールして実行します。
apt-get update\
  && apt-get -y install vim dnsutils curl sudo\
  && curl -fsSL https://get.docker.com/ | sh\
  && mkdir -p ~/netflix-proxy\
  && cd ~/netflix-proxy\
  && curl -fsSL https://github.com/ab77/netflix-proxy/archive/latest.tar.gz | gunzip - | tar xz --strip-components=1\
  && ./build.sh
  1. netflix-proxy管理サイトの資格情報を必ず記録してください。
  2. スクリプトの最後に指定したIPアドレスにDNSサーバーを設定し、 このサイトに移動して同じIPが表示されていることを確認します。
  3. 最後に、 Netflixなどを地域外で楽しんでください。
  4. 何かがうまくいけない場合は、新しい問題をお楽しみください(また、 #netflix-proxy with freenode )。

(Netflixはブロックされています [n16] )以下はKamatera提供する標準のUbuntuイメージに基づいています。

  1. 30日無料トライアルを開始するには、 Kamateraに向かいます。
  2. UbuntuまたはDebianイメージを使用して、関心のある地理的な場所に新しいサーバーを作成します。
  3. SSHをサーバーにインストールして実行します。
apt-get update\ 
  && apt-get -y install vim dnsutils curl sudo\
  && curl -fsSL https://get.docker.com/ | sh\
  && mkdir -p ~/netflix-proxy\
  && cd ~/netflix-proxy\
  && curl -fsSL https://github.com/ab77/netflix-proxy/archive/latest.tar.gz | gunzip - | tar xz --strip-components=1\
  | tar xz --strip-components=1\
  && ./build.sh
  1. netflix-proxy管理サイトのURLと認証情報を必ず記録してください。
  2. スクリプトの最後に指定したIPアドレスにDNSサーバーを設定し、 このサイトに移動して同じIPが表示されていることを確認します。
  3. 最後に、 Netflixなどを地域外で楽しんでください。
  4. 何かがうまくいけない場合は、新しい問題をお楽しみください(また、 #netflix-proxy with freenode )。

(Netflixはブロックされています[n16] )以下はRamNode提供するDebianまたはUbuntuの画像に基づいています。

  1. RamNodeに向かい 、関心のある地理的な場所でアカウントを作成し、 KVM VPSを購入してください(OpenVZは動作しません)。
  2. VPS Control Panelログインし、UbuntuまたはDebianイメージを使用してOSを(再)インストールします。
  3. SSHをサーバーにインストールして実行します。
apt-get update\
  && apt-get -y install vim dnsutils curl sudo\
  && curl -fsSL https://get.docker.com/ | sh\
  && mkdir -p ~/netflix-proxy\
  && cd ~/netflix-proxy\
  && curl -fsSL https://github.com/ab77/netflix-proxy/archive/latest.tar.gz | gunzip - | tar xz --strip-components=1\
  && ./build.sh
  1. netflix-proxy管理サイトの資格情報を必ず記録してください。
  2. スクリプトの最後に指定したIPアドレスにDNSサーバーを設定し、 このサイトに移動して同じIPが表示されていることを確認します。
  3. 最後に、 Netflixなどを地域外で楽しんでください。
  4. 何かがうまくいけない場合は、新しい問題をお楽しみください(また、 #netflix-proxy with freenode )。

(Netflixはブロックされています [n16] )以下はLinodeが提供する標準のUbuntuイメージに基づいていますが、DockerをインストールしていないLinuxディストリビューションでも動作します。

  1. Linodeに向かい 、アカウントにサインアップしてください。
  2. 関心のある地理的な場所に新しいLinodeを作成し、そこにUbuntuイメージを展開します。
  3. SSHをサーバーにインストールして実行します。
apt-get update\
  && apt-get -y install vim dnsutils curl sudo\
  && curl -fsSL https://get.docker.com/ | sh\
  && mkdir -p ~/netflix-proxy\
  && cd ~/netflix-proxy\
  && curl -fsSL https://github.com/ab77/netflix-proxy/archive/latest.tar.gz | gunzip - | tar xz --strip-components=1\
  && ./build.sh
  1. netflix-proxy管理サイトの資格情報を必ず記録してください。
  2. スクリプトの最後に指定したIPアドレスにDNSサーバーを設定し、 このサイトに移動して同じIPが表示されていることを確認します。
  3. 最後に、 Netflixなどを地域外で楽しんでください。
  4. 何かがうまくいけない場合は、新しい問題をお楽しみください(また、 #netflix-proxy with freenode )。

(テストされていない)以下はDreamHostが提供する標準的なUbuntuイメージに基づいていますが、Dockerをインストールせずに root以外のユーザ(例えばAmazon Web Services [n13] )で動作しているLinuxディストリビューションでも動作します。

  1. DreamHostに向かい 、アカウントにサインアップしてください。
  2. DreamComputeまたはPublic Cloud Computingセクションを見つけ、関心のある地理的な場所でUbuntuインスタンスを起動します。
  3. DNSを許可するファイアウォールルールを追加してくださいIngress - IPv4 - UDP - 53 - 0.0.0.0/0 (CIDR)
  4. また、 Floating IPをインスタンスに追加します。
  5. SSHをサーバーにインストールして実行します。
sudo apt-get update\
  && sudo apt-get -y install vim dnsutils curl\
  && curl -fsSL https://get.docker.com/ | sh\
  && sudo usermod -aG docker $(whoami | awk '{print $1}')\
  && mkdir -p ~/netflix-proxy\
  && cd ~/netflix-proxy\
  && curl -fsSL https://github.com/ab77/netflix-proxy/archive/latest.tar.gz | gunzip - | tar xz --strip-components=1\
  && ./build.sh
  1. netflix-proxy管理サイトの資格情報を必ず記録してください。
  2. スクリプトの最後に指定したIPアドレスにDNSサーバーを設定し、 このサイトに移動して同じIPが表示されていることを確認します。
  3. 最後に、 Netflixなどを地域外で楽しんでください。
  4. 何かがうまくいけない場合は、新しい問題をお楽しみください(また、 #netflix-proxy with freenode )。

以下はGandi提供するUbuntuイメージに基づいており、SSHキー(パスワードなし)でrootログインを使用しています。 root以外のadminデフォルトのログインの場合は、ステップ6を調整して、nesessaryのsudoを使用します。

  1. 関心のある地理的な場所に仮想サーバーを作成するには、 Gandiに向かいます。
  2. SSHをサーバーにインストールして実行します。
apt-get update\
  && apt-get -y install vim dnsutils curl sudo\
  && curl -fsSL https://get.docker.com/ | sh\
  && mkdir -p ~/netflix-proxy\
  && cd ~/netflix-proxy\
  && curl -fsSL https://github.com/ab77/netflix-proxy/archive/latest.tar.gz | gunzip - | tar xz --strip-components=1\
  && ./build.sh
  1. netflix-proxy管理サイトの資格情報を必ず記録してください。
  2. スクリプトの最後に指定したIPアドレスにDNSサーバーを設定し、 このサイトに移動して同じIPが表示されていることを確認します。
  3. 最後に、 Netflixなどを地域外で楽しんでください。
  4. 何かがうまくいけない場合は、新しい問題をお楽しみください(また、 #netflix-proxy with freenode )。

Microsoft Azure(アドバンスド)

以下はテストされておらずMicrosoft Azureによって提供されているcloud-harness自動化ツールを使用して標準的なUbuntuイメージに基づいています。 また、Azureはロードバランサを徹底してICMPをブロックし、ネイティブのIPv6サポートを提供しないため、IPv6は動作しません。

  1. Microsoft Azureに移動し、アカウントを登録します。
  2. Pythonを入手してください。
  3. あなたのワークステーションで、 git clone https://github.com/ab77/cloud-harness.git ~/cloud-harness実行してgit clone https://github.com/ab77/cloud-harness.git ~/cloud-harness
  4. cloud-harness インストールと設定のセクションに従って設定してください。
  5. ストレージアカウントを作成します。
  6. 新しいホスト型サービスを作成します
  7. SSH公開鍵認証用のホストされたサービス証明書を追加する
  8. 予約済みのIPアドレスを作成します。
  9. 仮想ネットワークを作成します。
  10. 次のようにしてUbuntu仮想マシンを作成します。
    ./cloud-harness.py azure --action create_virtual_machine_deployment \
    --service <your hosted service name> \
    --deployment <your hosted service name> \
    --name <your virtual machine name> \
    --label 'Netflix proxy' \
    --account <your storage account name> \
    --blob b39f27a8b8c64d52b05eac6a62ebad85__Ubuntu-14_04-LTS-amd64-server-20140414-en-us-30GB \
    --os Linux \
    --network VNet1 \
    --subnet Subnet-1 \
    --ipaddr <your reserved ipaddr name> \
    --size Medium \
    --ssh_auth \
    --disable_pwd_auth \
    --verbose
  1. Azure管理ポータルを使用して、 DNS (UDP)HTTP (TCP)HTTPS (TCP)エンドポイントを追加し、Azure ACL機能を使用して自宅/仕事/どんなIPにでも保護します。
  2. SSHをカスタムパブリックTCPポート( 22ではなく)を使用してazureuserとしてVMにazureuserし、root以外のユーザのUbuntu命令を使用してnetflix-proxyを構築/インストールします。

自動テスト

テストビルド

このプロジェクトはTravis CIと連携して、プロジェクトを自動的に展開してテストします。 Pythonスクリプトtestbuild.pyは、 netflix-proxyデプロイとテストに使用されます。 このスクリプトは、テスト用のDropletをデプロイしてから、深刻なテストを実行して、(a)すべてのDockerコンテナが起動することを確認します。 (b) built.shスクリプトは、最後に正しいメッセージを出力します。 (c)関連するすべてのサービスが再起動しても残っている。 (d)代理人がSSL経由でNetflixとcomunicateすることができます。

testbuild.pyスクリプトを使用して、コマンドラインからtestbuild.pyをプログラム的にデプロイすることもできます。

usage: testbuild.py digitalocean [-h] --api_token API_TOKEN
                                 [--client_ip CLIENT_IP]
                                 [--fingerprint FINGERPRINT [FINGERPRINT ...]]
                                 [--region REGION] [--branch BRANCH]
                                 [--create] [--destroy] [--list_regions]
                                 [--name NAME]

optional arguments:
  -h, --help            show this help message and exit
  --api_token API_TOKEN
                        DigitalOcean API v2 secret token
  --client_ip CLIENT_IP
                        client IP to secure Droplet
  --fingerprint FINGERPRINT [FINGERPRINT ...]
                        SSH key fingerprint
  --region REGION       region to deploy into; use --list_regions for a list
  --branch BRANCH       netflix-proxy branch to deploy (default: master)
  --create              Create droplet
  --destroy             Destroy droplet
  --list_regions        list all available regions
  --name NAME           Droplet name

Python 2.7環境が動作し、モジュールがtests/requirements.txtリストされているtests/requirements.txtpip install -r tests/requirements.txt )。

ビデオ再生のテスト

現在 、プロバイダのブロックによってビデオ再生テストが無効になっています。

Netflix

構築が成功すると、 testvideo.pyが実行され、Netflixのビデオ再生がテストされます。 これは、米国の地域でのみ利用可能であると知られているタイトル(例えば、 1,000回のグッドナイト )を60秒間再生することによって行われます。

usage: testvideo.py netflix [-h] --email EMAIL --password PASSWORD
                            [--seconds SECONDS] [--titleid TITLEID]
                            [--tries TRIES]

optional arguments:
  -h, --help           show this help message and exit
  --email EMAIL        Netflix username
  --password PASSWORD  Netflix password
  --seconds SECONDS    playback time per title in seconds (default: 60)
  --titleid TITLEID    Netflix title_id to play (default: 80001898)
  --tries TRIES        Playback restart attempts (default: 4)

スクリーンショットはテストの最後に保存され、 gh-pagesブランチにアップロードされgh-pages

Hulu

同様に、 testvideo.pyが実行され、無料タイトルの1つを使用してHuluビデオの再生をテストします (例: South Park S01E01:Cartmanが肛門プローブを取得する )。 ビルドは、Huluテストが失敗した場合に失敗しないように設定されています。 これは、HuluがDigital Oceanからほぼ確実にブロックされているためです。

IPv6

このソリューションでは、プロキシのIPv6ダウンストリームを使用して、NetflixなどのIPv6対応プロバイダのブロックを解除します。 これを実行するには、クライアントでIPv6をサポートする必要はありません.VPSだけがパブリックIPv6接続を持つ必要があります。 また、ローカルネットワーク(および/または関連するデバイス)でIPv6をオフにする必要があります。 [n6]

+----------+                  +-----------+                 +-----------------+
|          |                  |           |                 |                 |
|  client  | +--------------> |   proxy   | +-------------> |  Netflix, etc.  |
|          |      (ipv4)      |           |      (ipv6)     |                 |
+----------+                  +-----------+                 +-----------------+

貢献する

あなたは何か考えがあれば、それをフォークして、変更を私に送り返してください。

寄付する

これが便利な場合は、 PayPalまたはBitcoinで小さな寄付をしてください。

Paypal Bitcoin
1GUrKgkaCkdsrCzb4pq3bJwkmjTVv9X7eG

脚注

  1. Dustin Lundquistにdustin@null-ptr.net ; このソリューションは、サーバー名表示(SNI) [n7]をサポートしているデバイスでのみ、名前を解決するためにDNSを使用する場合にのみ使用されます。
  2. Huluは、ほとんどの非居住のIP範囲からかなり制限されており、IPv6をサポートしていません。
  3. あなたは今あなたの家/オフィス/ etcを指定することができます。 IPを手動でbuild.sh -c <ip>オプションを使用します。
  4. serverfault postを参照してください。
  5. これこれを参照してください。 次の4つのホストはすべて、異なるパブリックIPに解決する必要があります。
  6. IPv6スタックが稼働している場合、デバイスはIPv4よりも優先される可能性があります。この問題を参照してください。
  7. 記事を参照してください
  8. ポストを参照してください。
  9. NDPプロキシの使用 」を参照してください。 キャッシングリゾルバとDockerデュアルスタックのサポートは、さまざまなホスティングプロバイダ(RamNode)によって提供されるIPv6設定の違いにより、デフォルトでは無効になっています。
  10. ポストを参照してください。
  11. https://www.facebook.com/GetflixAU/posts/650132888457824、Netflix Geoblocking – 第2部 、および「NetflixがVPNWikiを ブロックする方法 」を参照してください。
  12. Netflix GeoblocksをIPv6でバイパスします
  13. Amazon AWS EC2上のIPv6を参照してください。
  14. Netflixが依然としてあなたが間違った国にいると思っている場合は、別のトンネルサーバーを試してみてください(米国の場所など)。
  15. 記事を参照してください
  16. Netflixは、このサービスプロバイダーのネットワーク範囲を最も確実にブロックしています。したがって、このプロセスに従うことで、ブロックされていないソリューションが得られる可能性は低いです。 互換性のあるデバイスを所有している場合、 black.box unzonerを試すことができます。
  17. GFWはおそらく特定の非常に機密性の高いドメイン(facebook.comなど)に対してDNS応答を書き直している可能性があるので、残念ながらこのような単純なプロキシソリューションは機能しません。 バイパスするには、VPNテクノロジーが必要です。 black.box ボックス black.box ゾンゾを試してください。
-- v3.0

©2016 ab1







-ab77
-, , , , , , , , , , ,

執筆者: