HE ipv6 tunnel + sing-box 去除 YouTube 广告。
背景 #
YouTube 主要根据源 IP 的位置决定是否显示广告,根据 Google 的允许投放广告的区域列表,只要不在其中的区域,基本上 YouTube 就没广告,例如中国大陆。
Hurricane Electric 提供免费的 ipv6 隧道代理,可以在只有 ipv4 的主机上配置 ipv6 地址并访问网络。这里的关键是 HE 提供的 ipv6 地理位置似乎是根据注册时选择的区域确定的,也就是说注册 HE 账号时选择什么区域,YouTube 就认为是什么区域。在 HE 论坛有相关讨论。
明白了其中的原理就可以使用 sing-box 进行分流,将 YouTube 相关连接分流到 HE 隧道出站,从而实现 YouTube 去广告。
HE 隧道注册 #
进入官网注册账号,注意其中的区域:

注册后,点击左侧的Create Regular Tunnel,输入你 VPS 的 ipv4 地址检测,然后下方的Available Tunnel Servers选择离你 VPS 最近的地区接入。注意此时 VPS 需要放行ICMP入站。

创建完成后,进入详情页面,查看隧道关键信息:

- Client/Server ipv4 Address:这是
6in4隧道的 ipv4 地址对,用于承载和封装 ipv6 连接 - Client/Server ipv6 Address:隧道的两端 ipv6 地址对,用于建立 ipv6 连接
- Routed ipv6 Prefixes:HE 额外分配的子网前缀,用于给内网其他设备分配 ipv6 地址。上面的 ipv6 网段只能用于你和 HE 的隧道端点通信,无法给内网其他设备用。
在Example Configurations中有各种系统的配置示例。
VPS 配置 #
首先确保你系统 ipv6 没有被禁用,检查以下配置:
sysctl net.ipv6.conf.all.disable_ipv6
sysctl net.ipv6.conf.default.disable_ipv6
如果你使用networking.service
## /etc/network/interfaces
auto he-ipv6
iface he-ipv6 inet6 v4tunnel
address 2001:470:xx:xx::2
netmask 64
endpoint 216.218.x.x
local 172.24.xx.xx
ttl 255
gateway 2001:470:xx:xx::1
如果你使用systemd-networkd.service
## /etc/systemd/network/20-he-ipv6.netdev
[NetDev]
Name=he-ipv6
Kind=sit
MTUBytes=1480
[Tunnel]
Independent=true
Local=172.24.xx.xx
Remote=216.218.x.x
## /etc/systemd/network/20-he-ipv6.network
[Match]
Name=he-ipv6
Type=sit
[Link]
RequiredForOnline=no-carrier
[Network]
Address=2001:470:xx:xx::2/64
Gateway=2001:470:xx:xx::1
Local是指你 VPS 原本的 ipv4 地址,例如阿里云不会直接给你接口分配公网 ipv4 地址,而是私有IP地址,这里Local也需要填私有ip地址。
重启网络,然后检查 HE 的 ipv6 是否正常工作:
## 检查接口
root@debian:~# ip -6 addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 state UNKNOWN qlen 1000
inet6 ::1/128 scope host proto kernel_lo
valid_lft forever preferred_lft forever
5: he-ipv6@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1480 state UNKNOWN qlen 1000
inet6 2001:470:xx:xx::2/64 scope global
valid_lft forever preferred_lft forever
## 检查路由
root@debian:~# ip -6 route
2001:470:xx:xx::/64 dev he-ipv6 proto kernel metric 256 pref medium
default via 2001:470:xx:xx::1 dev he-ipv6 proto static metric 1024 pref medium
## 检查ping6
root@debian:~# ping6 ipv6.google.com
PING ipv6.google.com (2404:6800:4005:817::200e) 56 data bytes
64 bytes from nchkgb-ab-in-x0e.1e100.net (2404:6800:4005:817::200e): icmp_seq=1 ttl=119 time=3.22 ms
64 bytes from nchkgb-ab-in-x0e.1e100.net (2404:6800:4005:817::200e): icmp_seq=2 ttl=119 time=3.23 ms
64 bytes from nchkgb-ab-in-x0e.1e100.net (2404:6800:4005:817::200e): icmp_seq=3 ttl=119 time=3.24 ms
## 测试本机ipv6地址
root@debian:~# curl -6 ip.sb
2001:470:xx:xx::2
sing-box 配置 #
sing-box 客户端配置,建议 YouTube 相关域名在 DNS 查询时返回fakeip,以便出站时传域名到 VPS。
sing-box 服务端配置示例:
{
"log": {
"disabled": false,
"level": "warn",
"output": "box.log",
"timestamp": true
},
"dns": {
"servers": [
{
"tag": "OUTDNS",
"type": "https",
"server": "8.8.4.4"
}
]
},
"inbounds": [
{
"type": "shadowsocks",
"tag": "ss-in",
"listen": "0.0.0.0",
"listen_port": 666,
"method": "2022-blake3-chacha20-poly1305",
"password": "xxx"
}
],
"outbounds": [
{
"tag": "ipv6-HE",
"type": "direct",
"inet6_bind_address": "2001:470:xx:xx::2",
"domain_resolver": {
"server": "OUTDNS",
"strategy": "ipv6_only"
}
},
{
"tag": "DIRECT",
"type": "direct",
"inet4_bind_address": "172.24.xx.xx",
"domain_resolver": {
"server": "OUTDNS",
"strategy": "ipv4_only"
}
}
],
"route": {
"rules": [
{
"action": "sniff"
},
{
"rule_set": "geosite-youtube",
"domain": "googleads.g.doubleclick.net",
"outbound": "ipv6-HE"
}
],
"rule_set": [
{
"tag": "geosite-youtube",
"type": "remote",
"format": "source",
"url": "https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/refs/heads/sing/geo/geosite/youtube.json",
"download_detour": "DIRECT",
"update_interval": "5d"
}
],
"final": "DIRECT"
}
}