在国外,Netflix/Hulu是非常受欢迎的流媒体服务商,如果说优酷=Youtube的话,那么Hulu则更像是爱奇艺,总之,在上面你可以找到很多正版的剧集资源。然而就像优酷只给俺们国人看一样,Hulu也只限制美国用户。为了突破逼格,本文就要介绍一下如何通过建立流媒体通道来观看Hulu(特别是可以通过各类电视盒子)。具体的原理是:VPS1用来DNS转址(安装Bind9);VPS2用来搭建科学上网通道(安装HAProxy)【当然,用一个VPS貌似也可以】。英文原文在此,微魔只是当了一个快乐的搬运工。
建立自己的Netflix/Hulu通道
目前Hulu大量封杀了非民用ip地址,很多VPS的服务器都被Hulu封杀了,因此大家注意验证自己ip地址的可用性。
1.在VPS1上安装Bind9
编辑/etc/bind/named.conf.local,输入如下内容,
//
//
// Do any local configuration here
//
// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";
include "/etc/bind/rndc.key";
include "/etc/bind/zones.override";
acl "trusted" {
XX.XX.XX.XX; // IP of your VPS
XX.XX.XX.XX; // IP of your own ISP/Home connection
127.0.0.1;
};
logging {
channel bind_log {
file "/var/log/named/named.log" versions 5 size 30m;
severity info;
print-time yes;
print-severity yes;
print-category yes;
};
category default { bind_log; };
category queries { bind_log; };
};
编辑/etc/bind/zones.override,输入如下内容,
zone "hulu.com." {
type master;
file "/etc/bind/db.override";
};
zone "huluim.com." {
type master;
file "/etc/bind/db.override";
};
zone "netflix.com." {
type master;
file "/etc/bind/db.override";
};
编辑/etc/bind/db.override,输入如下内容,
;
; BIND data file for overridden IPs
;
$TTL 86400
@ IN SOA ns1 root (
2012100401 ; serial
604800 ; refresh 1w
86400 ; retry 1d
2419200 ; expiry 4w
86400 ; minimum TTL 1d
)
@ IN NS ns1
ns1 IN A IPOFDNSSERVER
@ IN A HAPROXY
* IN A HAPROXY
编辑/etc/bind/named.conf.options,输入如下内容,
options {
directory "/var/cache/bind";
forwarders {
# these are the DNS servers from the VPS provider (look in /etc/resolv.conf if yours are different)
8.8.8.8;
8.8.4.4;
};
auth-nxdomain no; # conform to RFC1035
listen-on-v6 { any; };
allow-query { trusted; };
allow-recursion { trusted; };
recursion yes;
dnssec-enable yes;
dnssec-validation yes;
};
2.在VPS2上安装HAProxy
编辑/etc/haproxy/haproxy.cfg,输入如下内容,
把下文中的USERNAME:PASSWORD改成网页界面的用户和密码;并把YOURSERVERIPHERE改成你VPS的ip
global
daemon
maxconn 50000
user haproxy
group haproxy
stats socket /var/run/haproxy.sock mode 0600 level admin
log /dev/log local0 debug
pidfile /var/run/haproxy.pid
spread-checks 5
defaults
maxconn 49000
log global
mode http
option httplog
option abortonclose
option http-server-close
option persist
timeout connect 20s
timeout client 120s
timeout server 120s
timeout queue 120s
timeout check 10s
retries 3
listen stats
bind YOURSERVERIPHERE:27199
mode http
stats enable
stats realm Protected\ Area
stats uri /
stats auth USERNAME:PASSWORD
frontend f_catchall_http
bind YOURSERVERIPHERE:80
mode http
option httplog
capture request header Host len 50
capture request header User-Agent len 150
default_backend b_deadend_http
use_backend b_catchall_http if { hdr_dom(host) -i s.hulu.com }
use_backend b_catchall_http if { hdr_dom(host) -i p.hulu.com }
use_backend b_catchall_http if { hdr_dom(host) -i play.hulu.com }
use_backend b_catchall_http if { hdr_dom(host) -i signup.netflix.com }
use_backend b_catchall_http if { hdr_dom(host) -i www.netflix.com }
use_backend b_catchall_http if { hdr_dom(host) -i appboot.netflix.com }
use_backend b_catchall_http if { hdr_dom(host) -i cbp-us.nccp.netflix.com }
use_backend b_catchall_http if { hdr_dom(host) -i api-global.netflix.com }
use_backend b_catchall_http if { hdr_dom(host) -i movies.netflix.com }
use_backend b_catchall_http if { hdr_dom(host) -i movies1.netflix.com }
use_backend b_catchall_http if { hdr_dom(host) -i secure.netflix.com }
use_backend b_catchall_http if { hdr_dom(host) -i moviecontrol.netflix.com }
use_backend b_catchall_http if { hdr_dom(host) -i api.netflix.com }
use_backend b_catchall_http if { hdr_dom(host) -i api-us.netflix.com }
use_backend b_catchall_http if { hdr_dom(host) -i uiboot.netflix.com }
use_backend b_catchall_http if { hdr_dom(host) -i cbp.nccp.netflix.com }
use_backend b_catchall_http if { hdr_dom(host) -i ios.nccp.netflix.com }
use_backend b_catchall_http if { hdr_dom(host) -i xbox.nccp.netflix.com }
use_backend b_catchall_http if { hdr_dom(host) -i nccp-nrdp-31.cloud.netflix.net }
use_backend b_catchall_http if { hdr_dom(host) -i nintendo.nccp.netflix.com }
use_backend b_catchall_http if { hdr_dom(host) -i playstation.nccp.netflix.com }
use_backend b_catchall_http if { hdr_dom(host) -i nrdp.nccp.netflix.com }
use_backend b_catchall_http if { hdr_dom(host) -i android.nccp.netflix.com }
use_backend b_catchall_http if { hdr_dom(host) -i htmltvui-api.netflix.com }
use_backend b_catchall_http if { hdr_dom(host) -i hulu.com }
use_backend b_catchall_http if { hdr_dom(host) -i assets.huluim.com }
use_backend b_catchall_http if { hdr_dom(host) -i static.huluim.com }
use_backend b_catchall_http if { hdr_dom(host) -i ib4.huluim.com }
use_backend b_catchall_http if { hdr_dom(host) -i ib3.huluim.com }
use_backend b_catchall_http if { hdr_dom(host) -i ib2.huluim.com }
use_backend b_catchall_http if { hdr_dom(host) -i ib1.huluim.com }
use_backend b_catchall_http if { hdr_dom(host) -i ib.huluim.com }
use_backend b_catchall_http if { hdr_dom(host) -i www.hulu.com }
use_backend b_catchall_http if { hdr_dom(host) -i secure.hulu.com }
use_backend b_catchall_http if { hdr_dom(host) -i netflix.com }
backend b_catchall_http
mode http
option httplog
option accept-invalid-http-response
use-server s.hulu.com if { hdr_dom(host) -i s.hulu.com }
server s.hulu.com s.hulu.com:80 check inter 10s fastinter 2s downinter 2s fall 1800
use-server p.hulu.com if { hdr_dom(host) -i p.hulu.com }
server p.hulu.com p.hulu.com:80 check inter 10s fastinter 2s downinter 2s fall 1800
use-server play.hulu.com if { hdr_dom(host) -i play.hulu.com }
server play.hulu.com play.hulu.com:80 check inter 10s fastinter 2s downinter 2s fall 1800
use-server signup.netflix.com if { hdr_dom(host) -i signup.netflix.com }
server signup.netflix.com signup.netflix.com:80 check inter 10s fastinter 2s downinter 2s fall 1800
use-server www.netflix.com if { hdr_dom(host) -i www.netflix.com }
server www.netflix.com www.netflix.com:80 check inter 10s fastinter 2s downinter 2s fall 1800
use-server appboot.netflix.com if { hdr_dom(host) -i appboot.netflix.com }
server appboot.netflix.com appboot.netflix.com:80 check inter 10s fastinter 2s downinter 2s fall 1800
use-server cbp-us.nccp.netflix.com if { hdr_dom(host) -i cbp-us.nccp.netflix.com }
server cbp-us.nccp.netflix.com cbp-us.nccp.netflix.com:80 check inter 10s fastinter 2s downinter 2s fall 1800
use-server api-global.netflix.com if { hdr_dom(host) -i api-global.netflix.com }
server api-global.netflix.com api-global.netflix.com:80 check inter 10s fastinter 2s downinter 2s fall 1800
use-server movies.netflix.com if { hdr_dom(host) -i movies.netflix.com }
server movies.netflix.com movies.netflix.com:80 check inter 10s fastinter 2s downinter 2s fall 1800
use-server movies1.netflix.com if { hdr_dom(host) -i movies1.netflix.com }
server movies1.netflix.com movies1.netflix.com:80 check inter 10s fastinter 2s downinter 2s fall 1800
use-server secure.netflix.com if { hdr_dom(host) -i secure.netflix.com }
server secure.netflix.com secure.netflix.com:80 check inter 10s fastinter 2s downinter 2s fall 1800
use-server moviecontrol.netflix.com if { hdr_dom(host) -i moviecontrol.netflix.com }
server moviecontrol.netflix.com moviecontrol.netflix.com:80 check inter 10s fastinter 2s downinter 2s fall 1800
use-server api.netflix.com if { hdr_dom(host) -i api.netflix.com }
server api.netflix.com api.netflix.com:80 check inter 10s fastinter 2s downinter 2s fall 1800
use-server api-us.netflix.com if { hdr_dom(host) -i api-us.netflix.com }
server api-us.netflix.com api-us.netflix.com:80 check inter 10s fastinter 2s downinter 2s fall 1800
use-server uiboot.netflix.com if { hdr_dom(host) -i uiboot.netflix.com }
server uiboot.netflix.com uiboot.netflix.com:80 check inter 10s fastinter 2s downinter 2s fall 1800
use-server cbp.nccp.netflix.com if { hdr_dom(host) -i cbp.nccp.netflix.com }
server cbp.nccp.netflix.com cbp.nccp.netflix.com:80 check inter 10s fastinter 2s downinter 2s fall 1800
use-server ios.nccp.netflix.com if { hdr_dom(host) -i ios.nccp.netflix.com }
server ios.nccp.netflix.com ios.nccp.netflix.com:80 check inter 10s fastinter 2s downinter 2s fall 1800
use-server xbox.nccp.netflix.com if { hdr_dom(host) -i xbox.nccp.netflix.com }
server xbox.nccp.netflix.com xbox.nccp.netflix.com:80 check inter 10s fastinter 2s downinter 2s fall 1800
use-server nccp-nrdp-31.cloud.netflix.net if { hdr_dom(host) -i nccp-nrdp-31.cloud.netflix.net }
server nccp-nrdp-31.cloud.netflix.net nccp-nrdp-31.cloud.netflix.net:80 check inter 10s fastinter 2s downinter 2s fall 1800
use-server nintendo.nccp.netflix.com if { hdr_dom(host) -i nintendo.nccp.netflix.com }
server nintendo.nccp.netflix.com nintendo.nccp.netflix.com:80 check inter 10s fastinter 2s downinter 2s fall 1800
use-server playstation.nccp.netflix.com if { hdr_dom(host) -i playstation.nccp.netflix.com }
server playstation.nccp.netflix.com playstation.nccp.netflix.com:80 check inter 10s fastinter 2s downinter 2s fall 1800
use-server nrdp.nccp.netflix.com if { hdr_dom(host) -i nrdp.nccp.netflix.com }
server nrdp.nccp.netflix.com nrdp.nccp.netflix.com:80 check inter 10s fastinter 2s downinter 2s fall 1800
use-server htmltvui-api.netflix.com if { hdr_dom(host) -i htmltvui-api.netflix.com }
server htmltvui-api.netflix.com htmltvui-api.netflix.com:80 check inter 10s fastinter 2s downinter 2s fall 1800
use-server hulu.com if { hdr_dom(host) -i hulu.com }
server hulu.com hulu.com:80 check inter 10s fastinter 2s downinter 2s fall 1800
use-server www.hulu.com if { hdr_dom(host) -i www.hulu.com }
server www.hulu.com www.hulu.com:80 check inter 10s fastinter 2s downinter 2s fall 1800
use-server secure.hulu.com if { hdr_dom(host) -i secure.hulu.com }
server secure.hulu.com secure.hulu.com:80 check inter 10s fastinter 2s downinter 2s fall 1800
use-server assets.huluim.com if { hdr_dom(host) -i assets.huluim.com }
server assets.huluim.com assets.huluim.com:80 check inter 10s fastinter 2s downinter 2s fall 1800
use-server static.huluim.com if { hdr_dom(host) -i static.huluim.com }
server static.huluim.com static.huluim.com:80 check inter 10s fastinter 2s downinter 2s fall 1800
use-server ib4.huluim.com if { hdr_dom(host) -i ib4.huluim.com }
server ib4.huluim.com ib4.huluim.com:80 check inter 10s fastinter 2s downinter 2s fall 1800
use-server ib3.huluim.com if { hdr_dom(host) -i ib3.huluim.com }
server ib3.huluim.com ib3.huluim.com:80 check inter 10s fastinter 2s downinter 2s fall 1800
use-server ib2.huluim.com if { hdr_dom(host) -i ib2.huluim.com }
server ib2.huluim.com ib2.huluim.com:80 check inter 10s fastinter 2s downinter 2s fall 1800
use-server ib1.huluim.com if { hdr_dom(host) -i ib1.huluim.com }
server ib1.huluim.com ib1.huluim.com:80 check inter 10s fastinter 2s downinter 2s fall 1800
use-server ib.huluim.com if { hdr_dom(host) -i ib.huluim.com }
server ib.huluim.com ib.huluim.com:80 check inter 10s fastinter 2s downinter 2s fall 1800
use-server netflix.com if { hdr_dom(host) -i netflix.com }
server netflix.com netflix.com:80 check inter 10s fastinter 2s downinter 2s fall 1800
frontend f_catchall_https
bind YOURSERVERIPHERE:443
mode tcp
option tcplog
tcp-request inspect-delay 5s
tcp-request content accept if { req_ssl_hello_type 1 }
default_backend b_deadend_https
use_backend b_catchall_https if { req_ssl_sni -i s.hulu.com }
use_backend b_catchall_https if { req_ssl_sni -i p.hulu.com }
use_backend b_catchall_https if { req_ssl_sni -i play.hulu.com }
use_backend b_catchall_https if { req_ssl_sni -i signup.netflix.com }
use_backend b_catchall_https if { req_ssl_sni -i www.netflix.com }
use_backend b_catchall_https if { req_ssl_sni -i appboot.netflix.com }
use_backend b_catchall_https if { req_ssl_sni -i cbp-us.nccp.netflix.com }
use_backend b_catchall_https if { req_ssl_sni -i api-global.netflix.com }
use_backend b_catchall_https if { req_ssl_sni -i movies.netflix.com }
use_backend b_catchall_https if { req_ssl_sni -i movies1.netflix.com }
use_backend b_catchall_https if { req_ssl_sni -i secure.netflix.com }
use_backend b_catchall_https if { req_ssl_sni -i moviecontrol.netflix.com }
use_backend b_catchall_https if { req_ssl_sni -i api.netflix.com }
use_backend b_catchall_https if { req_ssl_sni -i api-us.netflix.com }
use_backend b_catchall_https if { req_ssl_sni -i uiboot.netflix.com }
use_backend b_catchall_https if { req_ssl_sni -i cbp.nccp.netflix.com }
use_backend b_catchall_https if { req_ssl_sni -i ios.nccp.netflix.com }
use_backend b_catchall_https if { req_ssl_sni -i xbox.nccp.netflix.com }
use_backend b_catchall_https if { req_ssl_sni -i nccp-nrdp-31.cloud.netflix.net }
use_backend b_catchall_https if { req_ssl_sni -i nintendo.nccp.netflix.com }
use_backend b_catchall_https if { req_ssl_sni -i playstation.nccp.netflix.com }
use_backend b_catchall_https if { req_ssl_sni -i nrdp.nccp.netflix.com }
use_backend b_catchall_https if { req_ssl_sni -i android.nccp.netflix.com }
use_backend b_catchall_https if { req_ssl_sni -i bivl.netflix.com }
use_backend b_catchall_https if { req_ssl_sni -i htmltvui-api.netflix.com }
use_backend b_catchall_https if { req_ssl_sni -i hulu.com }
use_backend b_catchall_https if { req_ssl_sni -i assets.huluim.com }
use_backend b_catchall_https if { req_ssl_sni -i static.huluim.com }
use_backend b_catchall_https if { req_ssl_sni -i www.hulu.com }
use_backend b_catchall_https if { req_ssl_sni -i secure.hulu.com }
use_backend b_catchall_https if { req_ssl_sni -i netflix.com }
use_backend b_catchall_https if { req_ssl_sni -i pandora.com }
backend b_catchall_https
mode tcp
option tcplog
use-server s.hulu.com if { req_ssl_sni -i s.hulu.com }
server s.hulu.com s.hulu.com:443 check inter 10s fastinter 2s downinter 2s fall 1800
use-server p.hulu.com if { req_ssl_sni -i p.hulu.com }
server p.hulu.com p.hulu.com:443 check inter 10s fastinter 2s downinter 2s fall 1800
use-server play.hulu.com if { req_ssl_sni -i play.hulu.com }
server play.hulu.com play.hulu.com:443 check inter 10s fastinter 2s downinter 2s fall 1800
use-server signup.netflix.com if { req_ssl_sni -i signup.netflix.com }
server signup.netflix.com signup.netflix.com:443 check inter 10s fastinter 2s downinter 2s fall 1800
use-server www.netflix.com if { req_ssl_sni -i www.netflix.com }
server www.netflix.com www.netflix.com:443 check inter 10s fastinter 2s downinter 2s fall 1800
use-server appboot.netflix.com if { req_ssl_sni -i appboot.netflix.com }
server appboot.netflix.com appboot.netflix.com:443 check inter 10s fastinter 2s downinter 2s fall 1800
use-server cbp-us.nccp.netflix.com if { req_ssl_sni -i cbp-us.nccp.netflix.com }
server cbp-us.nccp.netflix.com cbp-us.nccp.netflix.com:443 check inter 10s fastinter 2s downinter 2s fall 1800
use-server a248.e.akamai.net if { req_ssl_sni -i a248.e.akamai.net }
server a248.e.akamai.net a248.e.akamai.net:443 check inter 10s fastinter 2s downinter 2s fall 1800
use-server api-global.netflix.com if { req_ssl_sni -i api-global.netflix.com }
server api-global.netflix.com api-global.netflix.com:443 check inter 10s fastinter 2s downinter 2s fall 1800
use-server movies.netflix.com if { req_ssl_sni -i movies.netflix.com }
server movies.netflix.com movies.netflix.com:443 check inter 10s fastinter 2s downinter 2s fall 1800
use-server movies1.netflix.com if { req_ssl_sni -i movies1.netflix.com }
server movies1.netflix.com movies1.netflix.com:443 check inter 10s fastinter 2s downinter 2s fall 1800
use-server secure.netflix.com if { req_ssl_sni -i secure.netflix.com }
server secure.netflix.com secure.netflix.com:443 check inter 10s fastinter 2s downinter 2s fall 1800
use-server moviecontrol.netflix.com if { req_ssl_sni -i moviecontrol.netflix.com }
server moviecontrol.netflix.com moviecontrol.netflix.com:443 check inter 10s fastinter 2s downinter 2s fall 1800
use-server api.netflix.com if { req_ssl_sni -i api.netflix.com }
server api.netflix.com api.netflix.com:443 check inter 10s fastinter 2s downinter 2s fall 1800
use-server api-us.netflix.com if { req_ssl_sni -i api-us.netflix.com }
server api-us.netflix.com api-us.netflix.com:443 check inter 10s fastinter 2s downinter 2s fall 1800
use-server uiboot.netflix.com if { req_ssl_sni -i uiboot.netflix.com }
server uiboot.netflix.com uiboot.netflix.com:443 check inter 10s fastinter 2s downinter 2s fall 1800
use-server cbp.nccp.netflix.com if { req_ssl_sni -i cbp.nccp.netflix.com }
server cbp.nccp.netflix.com cbp.nccp.netflix.com:443 check inter 10s fastinter 2s downinter 2s fall 1800
use-server ios.nccp.netflix.com if { req_ssl_sni -i ios.nccp.netflix.com }
server ios.nccp.netflix.com ios.nccp.netflix.com:443 check inter 10s fastinter 2s downinter 2s fall 1800
use-server xbox.nccp.netflix.com if { req_ssl_sni -i xbox.nccp.netflix.com }
server xbox.nccp.netflix.com xbox.nccp.netflix.com:443 check inter 10s fastinter 2s downinter 2s fall 1800
use-server nccp-nrdp-31.cloud.netflix.net if { req_ssl_sni -i nccp-nrdp-31.cloud.netflix.net }
server nccp-nrdp-31.cloud.netflix.net nccp-nrdp-31.cloud.netflix.net:443 check inter 10s fastinter 2s downinter 2s fall 1800
use-server nintendo.nccp.netflix.com if { req_ssl_sni -i nintendo.nccp.netflix.com }
server nintendo.nccp.netflix.com nintendo.nccp.netflix.com:443 check inter 10s fastinter 2s downinter 2s fall 1800
use-server playstation.nccp.netflix.com if { req_ssl_sni -i playstation.nccp.netflix.com }
server playstation.nccp.netflix.com playstation.nccp.netflix.com:443 check inter 10s fastinter 2s downinter 2s fall 1800
use-server nrdp.nccp.netflix.com if { req_ssl_sni -i nrdp.nccp.netflix.com }
server nrdp.nccp.netflix.com nrdp.nccp.netflix.com:443 check inter 10s fastinter 2s downinter 2s fall 1800
use-server android.nccp.netflix.com if { req_ssl_sni -i android.nccp.netflix.com }
server android.nccp.netflix.com android.nccp.netflix.com:443 check inter 10s fastinter 2s downinter 2s fall 1800
use-server bivl.netflix.com if { req_ssl_sni -i bivl.netflix.com }
server bivl.netflix.com bivl.netflix.com:443 check inter 10s fastinter 2s downinter 2s fall 1800
use-server htmltvui-api.netflix.com if { req_ssl_sni -i htmltvui-api.netflix.com }
server htmltvui-api.netflix.com htmltvui-api.netflix.com:443 check inter 10s fastinter 2s downinter 2s fall 1800
use-server hulu.com if { req_ssl_sni -i hulu.com }
server hulu.com hulu.com:443 check inter 10s fastinter 2s downinter 2s fall 1800
use-server www.hulu.com if { req_ssl_sni -i www.hulu.com }
server www.hulu.com www.hulu.com:443 check inter 10s fastinter 2s downinter 2s fall 1800
use-server assets.huluim.com if { req_ssl_sni -i assets.huluim.com }
server assets.huluim.com assets.huluim.com:443 check inter 10s fastinter 2s downinter 2s fall 1800
use-server static.huluim.com if { req_ssl_sni -i static.huluim.com }
server static.huluim.com static.huluim.com:443 check inter 10s fastinter 2s downinter 2s fall 1800
use-server secure.hulu.com if { req_ssl_sni -i secure.hulu.com }
server secure.hulu.com secure.hulu.com:443 check inter 10s fastinter 2s downinter 2s fall 1800
use-server netflix.com if { req_ssl_sni -i netflix.com }
server netflix.com netflix.com:443 check inter 10s fastinter 2s downinter 2s fall 1800
backend b_deadend_http
mode http
option httplog
option accept-invalid-http-response
option http-server-close
backend b_deadend_https
mode tcp
option tcplog
重启HAProxy(service haproxy restart)
使用的时候,只需要把你设备的DNS设置成VPS1的ip地址即可
感觉微魔这没啥人哈。。。ps:namecheap有$0.99的.co,用优惠码producthunt