#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 去访问目标网站。
一个有关“GRE / IPIP Tunnnel”的想法