Anemone's BLOG
流媒体解锁进阶篇-1:Youtube位置修正
妈妈再也不用担心我的IP Google定位乱飞了

2021-08-29 Updates:填坑

2021-09-09 Updates:修改了之前错误的部分

前言

准备工作:WARP的安装和使用,可参考此博客之前发的WARP介绍篇

自从2021-08-03 Netflix大规模封杀代理后,WARP的流媒体利用价值似乎大减。但其实WARP IP还是有一定的可利用价值没有被充分挖掘。Anycast的特性可以保证出口IP的位置较近,拉取资源的CDN基本都是就近,不会乱跑。我们可以利用它来解决IP不幸被Google定位至中国而导致无法使用Youtube Premium的问题。

前期预警:此篇因为涉及到修改路由表,在生产环境中请千万小心在确保无问题后再守护运行,否则一瞬断网数据丢失不可免~

打个小广告:有问题可加入本网站的Telegram交流群,博主也会在这个频道分享一些资讯,欢迎各位指正内容~

实战

1.软件内分流

V2Ray/XRay诸如此类的代理软件内建了路由功能,所以使用这些功能即可轻松的完成分流。当然这种方法的限制就是只能用这类软件。通用方法可直接跳过此小节。

因为在此类中我们可以使用socks5这类代理作为上游,所以可以使用Cloudflare自家WARP来放出一个本地代理,然后将分流的流量送入此socks5代理即可。是不是非常简单~

安装请参考官方教程,这边就不重复了。

安装完成后,首先需要注册一下warp-cli register,同意条款后出现success即完成了注册。而后步骤分别为

warp-cli set-proxy-port 10080				#设定本地socks5的监听端口,将10080修改为要监听的端口号,示范使用为10080
warp-cli set-mode proxy					#设定工作模式为proxy,此模式会禁用WARP自动设置路由
warp-cli connect                    #连接到远端Cloudflare WARP服务器
warp-cli status                     #检查状态

出来的为Status update: Connected即完成了第一步,当然可以用warp-cli warp-stats来查看隧道的状态,此处不过多赘述。

而后,我们需要修改代理程序的配置文件,XRay/V2Ray应该是一致的,此处以XRay为例。需要修改的部分为routingoutbounds,这里会贴出一份参考,请参考自己的情况进行修改。

Routing部分

    "routing": {
        "domainStrategy": "AsIs",
        "rules": [
            {
                "type": "field",
                "domain": [
                    "gstatic.com",
                    "googlevideo.com",
                    "youtube.com",
                    "ytimg.com",
                    "youtubei.googleapis.com",
                    "googleapis.com",
                    "yt3.ggpht.com"
                ],
                "outboundTag": "warp-youtube"
            }
        ]
    }

outbounds部分

"outbounds": [
        {
            "protocol": "freedom"
        },
        {
            "protocol": "Socks",
            "settings": {
                "servers": [
                    {
                        "address": "127.0.0.1",
                        "port": 10080
                    }
                ]
            },
            "tag": "warp-youtube"
        }
    ]

此部分10080需要修改为上面warp-cli开放的socks5代理的端口。

在修改完成配置文件后,重启代理服务端即可,enjoy~

2.Location Guard插件拉位置

中场插入非主题相关系列~

在Chrome浏览器上安装此插件并设置好Fixed Location,然后主动让Google定位即可。一般情况下每天坚持提交一两次位置,一周到一个月即可将IP拉到指定地点。但这方法需要的时间非常随缘(Google修正IP库大概是一周刷一次),所以比较吃耐心。

3.Clash TUN分流(通用)

肯定有小伙伴使用的代理软件并没有路由功能,那这里介绍一种同样是非常简单方便的方法。此方法涉及修改路由表,需要一定的基础且请务必谨慎操作

此方法将接管通过VPS的所有流量并通过劫持DNS请求的方式来实现域名的分流。因为TUN的限制,VPS的traceroute将无法正常工作。不过全端口依然可以正常的向外服务。得益于Clash支持的上游代理种类繁多且分流规则极其多样化,我们可以实现非常复杂的分流操作。

Clash配置起来并不算很复杂,主要有的几个坑在于:

  • DHCP需要放行部分内网IP,不然TUN一瞬卡死
  • DNS需要手动放行,不然TUN一瞬卡死
  • 网卡名需要对应设置,不然一瞬断网

下面请参考配置文件并仔细对照说明进行修改,做好随时重启(爆炸)的准备~

Cloudflare-WARP的操作类第一节,请参考完成。

Clash内核需要选择Premium版本,因为只有此版本内建了TUN。因为实在不好找这里给一下下载地址,下载并解压后,首先修改好配置文件

参考配置文件config.yaml

port: 7890
mode: Rule
log-level: info
ipv6: false
external-controller: :9090
secret: 1145141919810

interface-name: ens5
tun:
  enable: true
  stack: system
  dns-hijack:
      - 8.8.8.8:53
      - 1.1.1.1:53
dns:
  enable: true
  listen: 0.0.0.0:53
  ipv6: false
  default-nameserver:
    - 1.1.1.1
    - 8.8.8.8
  enhanced-mode: redir-host
  fake-ip-range: 198.18.0.1/16
  nameserver:
    - 8.8.8.8
    - 1.1.1.1

proxies:
  - name: "WARP-Youtube"
    type: socks5
    server: server
    port: 10080
    
proxy-groups:
  - name: Youtube
    type: select
    proxies:
      - WARP-Youtube
rules:
# ----- Youtube ----- #
 - DOMAIN-SUFFIX,gstatic.com,Youtube
 - DOMAIN-SUFFIX,googlevideo.com,Youtube
 - DOMAIN-SUFFIX,youtube.com,Youtube
 - DOMAIN-SUFFIX,ytimg.com,Youtube
 - DOMAIN-SUFFIX,youtubei.googleapis.com,Youtube
 - DOMAIN-SUFFIX,googleapis.com,Youtube
 - DOMAIN,yt3.ggpht.com,Youtube
 
 - MATCH,DIRECT

注释:

  • external-controller后接的为RESTful API监听地址和端口,默认为9090端口,可不修改。后续可通过Clash Dashboard连接管理
  • secret请务必修改,使用RESTful API需要填写此密码
  • interface-name请修改为你的VPS外网网卡名称,可通过ip addr查询,一般为e起始的三位字母加一位数字的组合

其他可根据自己的情况自行修改,也可暂时不修改

启动Clash需要注意,它并不是指定配置文件而是配置文件所在目录,有点迷。具体是clash -d /example/path

以下是必要的路由表操作,再次提醒务必谨慎操作,首先参考此篇,新建一个路由表network,而后

ip rule add from 114.5.1.4/19 lookup network
ip route add table network default via 114.5.1.1 dev ens5
ip route del default via 114.5.1.1 dev ens5
ip route add 1.1.1.1 via 114.5.1.1 dev ens5
ip route add 8.8.8.8 via 114.5.1.1 dev ens5
ip route add 169.254.0.0/16 dev ens5
ip route add default dev utun

注释:

  • 此中所有的ens5均改为你的VPS网卡名
  • 114.5.1.4/19请修改为ip addr中你的VPS的网卡名那小节中的inet后紧接着的一段类似内容
  • 114.5.1.1请改为route -n中Iface为网卡名,Destination为0.0.0.0对应的Gateway IP
  • ip route add 169.254.0.0/16 dev ens5此行如果VPS获取IP方式为非DHCP可不添加
  • ip route add default dev utun在Clash退出后会自动失效,因为对应的utun网卡已经随着Clash退出而虚无了,所以路由自动失效

DNS需要指定向内网,127.0.0.53即可,Clash会自动拦截并处理DNS请求,启动后即可完成Youtube分流解锁。

此方法成功是可以通过流媒体脚本检测出来的。此处推荐lmc999大佬的脚本,非常全面

bash <(curl -L -s https://raw.githubusercontent.com/lmc999/RegionRestrictionCheck/main/check.sh)

4. ipset + ip route + dnsmasq 分流

本篇使用到的软件有ipset dnsmasq,请提前安装好,且请先完成WireGuard安装以及WARP配置文件的生成

整个的工作流程大致为:dnsmasq接管全局的DNS请求,将指定的域名解析出的IP放入指定的ipset中,然后使用iptables给出入向且在ipset表内的IP打上fwmark,最后使用ip rule将打有fwmark的IP路由到指定的路由表中,此路由表中仅存在一条默认走wg的规则即可。此方法因为不涉及到全局接管所以相对来说比较安全。

那么直接进入实战,此次示范的为将Youtube Premium的流量导向名为wg的WireGuard网卡。

在WireGuard配置中仅需要在[Interface]部分加入一行

Table = off

来阻止WireGuard自动生成路由,

而后,新建一个ipset,

ipset create warp hash:ip			#创建一个名为warp的表

然后配置dnsmasq,dnsmasq配置为

server=1.1.1.1
server=8.8.8.8

server=/googlevideo.com/1.1.1.1
server=/youtube.com/1.1.1.1
server=/youtubei.googleapis.com/1.1.1.1
server=/fonts.googleapis.com/1.1.1.1
server=/yt3.ggpht.com/1.1.1.1

ipset=/googlevideo.com/warp
ipset=/youtube.com/warp
ipset=/youtubei.googleapis.com/warp
ipset=/fonts.googleapis.com/warp
ipset=/yt3.ggpht.com/warp

此处为将指定域名解析的结果IP填入warp的ipset中。配置完成后拉起dnsmasq,确认启动后还需要修改本地dns指向dnsmasq默认的127.0.0.1

做到这一步可以使用ping一类将域名解析为IP的操作,使dnsmasq完成解析,后ipset list warp,应该会显示出刚刚解析的IP,证明上述步骤均无问题。

此步过后,在/etc/iproute2/rt_tables新建一张优先级为200的表,表名为warp(不清楚操作的可以翻阅本博客前篇)

最后,使用iptables对IP打上标记,并路由到WireGuard的wg网卡上(请根据自己的情况酌情修改)

iptables -t mangle -N fwmark
iptables -t mangle -A PREROUTING -j fwmark
iptables -t mangle -A OUTPUT -j fwmark
iptables -t mangle -A fwmark -m set --match-set warp dst -j MARK --set-mark 2
ip rule add fwmark 2 table warp
ip route add default dev wg table warp
iptables -t nat -A POSTROUTING -m mark --mark 0x2 -j MASQUERADE
iptables -t mangle -A POSTROUTING -o wg -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

执行完此步,使用mtr检查到以上域名的路由,应该已经切换到了WireGuard网卡了。完成撒花~

结尾

那么,下期再见~

下一期的内容应该是关于各地流媒体解锁需要的域名,方便各位实现单机全球流媒体解锁。但工作量巨大且需要的代理也较多,可能需要非常长的时间才能完善到“能用”的级别。咕咕咕~


Last modified on 2021-08-29