如何基于 TINC 实现透明代理

场景

透明代理

  • 在路由上配置 IP 段的下一跳为中继节点
    • 中继节点通过 TINC 进行 IP 段转发
      • 将请求转发到位于外部 TINC 节点
      • 实现局域网内透明代理
  • 例如 上图中,当 手机/电脑 访问 8.8.8.0/24 网段时,网络出口为外网节点出口

使用场景

  • TINC 中继节点作为桥接,打通不同网络
    • 例如 Kubernates 集群中使用 TINC 进行桥接云上云下网络
    • 例如 Docker 使用 TINC 作为基础网络,通过中继实现所有的容器内部服务访问
  • 外部 IP 为 VIP 实现高可用的代理访问
  • 为更智能的动态路由做铺垫

优势

  • 安全 - 不需要暴露任何额外的外部端口,一切都使用 TINC 内部网络
  • 组网灵活 - 任意能加入 TINC 的节点、任意有转发能力的系统
  • 网络便携 - 中继节点可能就是一个树莓派

原理

  • 中继节点是一个 TINC 网络中的节点,与其它节点相当于是有一条直连的网线,通过这条网线进行内部的包转发
  • IP 路由就是逐个找下一跳的地址,这里做的事情就是将部分网段的下一跳地址做了修改
    • macOS route add -host 8.8.8.8 -interface tun0
    • Linux ip ro add 8.8.8.8 via 10.1.1.10
  • 路由器都支持静态路由表,配合路由静态路由表就能实现无侵入的透明代理