#
BGP 2026-04-02

用Tailscale打IP Tunnel

By lbyxiaolizi 5 Views 6 MIN READ 0 Comments
== exit node 不要用本文的方法

起因

搞了ASN后最近没有怎么折腾BGP了,昨天晚上突然起兴把手上的服务器都拉tailscale组网了,我一想,那顺便给在几台支持BGP Session的机子附近的机子都打个tunnel走自己的IP出吧。

又因为Tailscale是使用WireGuard实现的,而WG又是标准的Tunnel用的协议,所以我尝试直接用Tailscale组好的网播。

受到了亿些些阻力,不过最后也算成功解决了,所以写篇博文记一下。

Go!

预备

  1. 在支持BGP Session的机子上配置好BGP Session。
  2. 在两端机子上装好tailscale并打通
  3. 在服务器上开启转发和UDP GRO
echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
sudo sysctl -p /etc/sysctl.d/99-tailscale.conf

ethtool -K eth0 rx-udp-gro-forwarding on rx-gro-list off

开始

  1. 在子服务器上建虚拟网卡+绑IP
ip link add dev dummy0 type dummy
ip link set dummy0 up
ip -6 addr add 你的IP dev dummy0

因为tailscale自己做了很多安全策略(不允许节点直接宣告::/0)导致直接播很难通,所以最后我们发现要使用全球单播欺骗+策略路由才可以解决问题。

所以我们要在BGP节点上用tailscale宣告2000::/3,再在子节点上正常宣告才可以通。

在BGP节点进行:

tailscale up --reset
tailscale up --advertise-routes=2000::/3 --snat-subnet-routes=false --accept-routes

ip6tables -I FORWARD -i tailscale0 -o eth0 -j ACCEPT
ip6tables -I FORWARD -i eth0 -o tailscale0 -j ACCEPT
ip6tables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

在子节点进行:

tailscale up --reset
tailscale up --advertise-routes=你的IP --accept-routes

# 1. 确保去往 Tailscale 其他机器的内网流量,正常走隧道
ip -6 rule add to fd7a::/16 pref 5210 table 52

# 2. 告诉系统:凡是带着你 Anycast 身份的数据包,走隧道去主节点!
ip -6 rule add from 你的IP pref 5211 table 52

# 3. 【核心魔法】:除上述两类之外的所有普通上网流量,强制查找系统的原生 main 表,直接走物理网卡出海,无视 Tailscale 的劫持!
ip -6 rule add pref 5212 table main

# 最后可以顺便给你原来的ip改一下生命周期
ip -6 addr change 原IP dev eth0 preferred_lft 0

本文由 lbyxiaolizi 原创

采用 CC BY-NC-SA 4.0 协议进行许可

转载请注明出处:https://blog.vh.gs/BGP/tailscale-tunnel.html

TAGS: BGP tailscale

相关推荐

  • 暂无相关推荐,看看别的吧。

0 评论

发表评论