GithubHelp home page GithubHelp logo

iamzjk / unblock_youku_gateway Goto Github PK

View Code? Open in Web Editor NEW

This project forked from glucee/unblock_youku_gateway

0.0 1.0 0.0 32 KB

Unblock-Youku in Gateway Server 在网关服务器中实现Unblock Youku功能,让所有设备都可以自动分流到国内服务器,方便海外华人观看国内音视频

License: GNU Affero General Public License v3.0

Python 100.00%

unblock_youku_gateway's Introduction

Unblock-Youku Gateway

Implementation of Unblock-Youku function in Gateway Server 在网关服务器中实现unblockyouku功能。

Unblock Gateway 是一个帮助配置 Shadowsocks 回国代理分流的命令行小工具,实现通过网关服务器自动分流,将国内一些网站的访问通过 Shadowsocks 代理回国,用以解除这些网站的海外访问限制,其它流量则会正常直连不走回国代理。本Repo可以搭建在树莓派、任何一台局域网Linux机器,其他机器只需要设置该网关,或者通过路由器设置该网关。

分流规则提取自 Unblock Youku,Unblock Youku 的规则中一般只包含站点用于检测的地址 ,不包含实际音视频流的地址,因此大部分情况下音视频流可以直连不用走代理,这样可以避免音视频变慢,也可以有效节约代理服务器的流量。

来源与修改

本Repo大多数功能来自于unblockchn,感谢原作者。本Repo主要为了解决没有华硕梅林路由器,但仍然想让路由器下的所有设备都可以使用unblock youku的情况。

网关其实含义非常丰富,可以是树莓派,可以是家庭服务器,也可以是一台独立的PC,甚至还可以是PC上虚拟机。由于网关即为路由中的下一跳,所以局域网内所有的数据都会首先被发送到这台网关上,由它再来判断是直接发给目标地址,还是走ss。见参考

网关示意图

准备

当然前提是你需要有一台位于国内的 Shadowsocks 服务器,在国内的路由器上部署 Shadowsocks 服务器端也是可行的。

Unblock Gateway 的功能有:


原理

  1. 从 Unblock Youku 的 urls.js 中提取分流规则。

  2. 根据分流规则生成 ipset 规则,将需要回国代理的 IP 地址加入 chn ipset。

  3. 添加 iptables 规则,将属于 chn ipset 的请求转发到 Shadowsocks 透明代理工具 ss-redir 的端口,通过 Shadowsocks 代理回国。

Unblock Gateway 自动化以上过程,提供了一键配置网关的命令和一些管理命令。

安装

  1. 安装依赖程序:
# Shadowsocks 透明代理工具 ss-redir
$ sudo apt-get install shadowsocks-libev
  1. 安装 Unblock Gateway:
# 安装 Unblock Gateway
$ git clone https://github.com/glucee/unblock_youku_gateway.git

# 进入 Unblock Gateway 目录
$ cd unblock_youku_gateway

# 安装 Unblock Gateway 依赖
$ pip3 install -r requirements.txt

# 修改 Shadowsocks 服务器配置
$ vi default_config.py

# 一键配置
sudo python3 unblockgw.py setup
  1. 配置网关

安装完后需配置网关即可,见配置

使用

$ sudo python3 unblockgw.py --help

usage: sudo python3 unblockgw.py router [-h] {status,on,off,check,renew,setup,create}

Unblock Gateway 网关命令:
  status                  查看代理状态
  on                      开启代理
  off                     关闭代理
  check <URL/IP/域名>     检查 <URL/IP/域名> 是否走代理
  renew                   更新规则
  setup [--no-ss]         一键配置网关 [--no-ss: 跳过配置 ss-redir]
  create                  仅生成 ipset 规则配置文件

positional arguments:
  {status,on,off,check,renew,setup,create}

optional arguments:
  -h, --help            show this help message and exit

一键配置网关

$ sudo python3 unblockgw.py setup

如果想要跳过配置 ss-redir,那么就加上 --no-ss 参数:

$ sudo python3 unblockgw.py setup --no-ss

至此,回国代理和自动分流就配置并开启好了。

可以访问下列地址以验证回国代理是否成功,如果显示 true,就说明回国代理已生效:

http://uku.im/check

查看代理状态

$ sudo python3 unblockgw.py status
已开启

关闭代理

$ sudo python3 unblockgw.py off
关闭成功

开启代理

$ sudo python3 unblockgw.py on
开启成功

检查 <URL/IP/域名> 是否走代理

$ sudo python3 unblockgw.py check http://ipservice.163.com/isFromMainland
59.111.19.7 走代理

$ sudo python3 unblockgw.py check https://google.com
216.58.193.78 不走代理

$ sudo python3 unblockgw.py check www.bilibili.com
148.153.45.166 走代理

$ sudo python3 unblockgw.py check 192.168.2.1
192.168.2.1 不走代理

更新规则

$ sudo python3 unblockgw.py router renew

Unblock Gateway 在网关上默认定时每日 03:00 自动更新分流规则,及时跟进 Unblock Youku 规则的变化。

仅生成ipset规则配置文件

$ sudo python3 unblockgw.py create
生成配置文件成功

此命令让 Unblock Gateway 跳过配置网关,仅提取 Unblock Youku 的规则,在 configs 目录下生成相应的 ipset 规则配置文件。

修改规则模板

除了 Unblock Gateway 自动生成的规则以外,如果你需要自定义一些 ipset 规则,可以通过修改 configs 目录下的规则模板文件 ipset.rules.tpl 来实现。

保留模板文件中的 {rules} 一行,其在生成规则时会被 Unblock Gateway 规则替换,然后在模板文件中添加你需要的规则,例如:

ipset.rules.tpl

{rules}
create blacklist hash:ip family inet hashsize 1024 maxelem 65536
add blacklist 103.31.6.5
add blacklist 208.73.51.100

运行更新规则命令来使自定义的规则生效:

$ python3 unblockgw.py renew

配置网关上网

如果你的网关服务器地址是192.168.1.XX,可以在路由器界面上配置网关为该地址,那么,所有连上该服务器的设备都会经过该网关服务器分流,也就自动使用了Unblock-Youku,注意DNS地址仍然采用之前的地址,或者使用8.8.8.8

其他需要注意的点

如果想保存IPTABLE,用户可以安装iptables-persisent,这个软件可以保存IPTABLE的规则,并在开机启动后也不会丢失。 每次开机启动后,如果想确认服务器没有问题,可以试着使用sudo python3 unblockgw status检查一下。

感谢

感谢Unblockchn和Unblock-Youku作者

unblock_youku_gateway's People

Contributors

glucee avatar neolithera avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.