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 去訪問目標網站。