Monthly Archive for July, 2015

Hulu.jp IP 段

Hulu.jp 只允许日本 IP 观看视频,并且和 hulu 美国一样,封锁了某些 VPN / Proxy / VPS / 数据中心的IP。比如 Linode Tokyo 的 IP 就无法看 hulu.jp 视频,会提示检测到访问 IP 是匿名代理。

于是我在 Linode Tokyo VPS 上将对 hulu.jp 的 IP 段的访问全部通过隧道 (GRE Tunnel)转到另一个未被 hulu.jp 封锁的 VPS (简称 VPS B)上,通过后者的 IP访问 hulu.jp。为什么不直接从本地连接 VPS B 呢,因为本地的网络连接 Linode 很多时候比 VPS B 更稳定。

关键是需要获取 www.hulu.jp 的 IP 列表。在路由器上运行 dnsmasq,打开 log.

log-queries
log-facility=/tmp/dnsmasq.log

这样 dnsmasq 会记录所有查询的域名和查询结果到日志文件里。用 iptables 将所有外发的 53 端口 UDP 的 DNS 查询请求重定向到本机 dnsmasq。然后在 PC 浏览器里访问 hulu.jp 并打开一个视频播放页面。

然后去 dnsmasq 日志里,找到刚才查询的所有域名,将查询结果放到 he.net BGP Toolkit 里搜索,找到这些 IP 所属的 IP 段。

然后在路由表里将这些 IP 段全部通过 与 VPS B 的 GRE tunnel 访问即可。

附:我找到的 hulu.jp 使用的 IP 段

#hulu-japan.jp (use amazon)
52.68.90.80
54.250.244.125

#hulu.jp
208.91.156.0/23
210.155.0.0/17

#Akamai CDN
23.32.0.0/11
96.16.0.0/15
104.64.0.0/10
118.214.0.0/15
184.84.0.0/14
72.246.0.0/15
69.192.0.0/16
61.213.160.0/19

# akamai kddi t2.huluim.com
106.187.61.0/24

GRE / IPIP Tunnnel

#GFW促进学习系列#

假如有多个VPS,那么将这些VPS连接起来的最佳方式是 GRE / IPIP tunnel

Tunnel

VPS A: 假设 IP 1.2.3.4

ip tunnel add tunnelName mode gre remote 2.3.4.5
ip addr add dev tunnelName 192.168.20.1/24
ip link set dev tunnelName up

VPS B: 假设 IP 2.3.4.5

ip tunnel add tunnelName mode gre remote 1.2.3.4
ip addr add dev tunnelName 192.168.20.2/24
ip link set dev tunnelName up
  • 设置完成后,VPS A 上的隧道IP是 192.168.20.1,VPS B 上的隧道IP是 192.168.20.2
  • 只需启动时执行一次,隧道建立后自动在内核运行,无任何用户态守护进程
  • 使用 “ip tunnel del tunnelName” 删除隧道。
  • “gre” 可以换成 “ipip”,理论上 ipip 模式 overhead 更低,性能更好。但我实际测试时发现某些网络环境上 ipip tunnel 性能低下,可能因为网络某些节点的QoS策略。

Routing

在 VPS A 上建立路由表,通过与 VPS B 的 tunnel 访问 Internet:

VPS A

ip route add default dev tunnelName table 100
# 对特定流量走 tunnel
ip rule add iif tun0 table 100 prio 100

VPS B 上需要用 iptables 打开 MASQUERADE (SNAT)。

应用场景:你的本地网络连接 VPS A 更快,但某些设置区域限制的网站只有 VPS B 能够访问(如 hulu / DMM 等日本很多18禁网站)。通过上面这种方式本地首先用 VPN 连接 VPS A,然后在通过 Tunnel 实际由 VPS B 去访问目标网站。