侧边栏壁纸
博主头像
Narutoの博客

行动起来,活在当下

  • 累计撰写 45 篇文章
  • 累计创建 24 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Tailscale 出口节点

Naruto
2024-09-05 / 0 评论 / 0 点赞 / 9 阅读 / 0 字

Tailscale 出口节点

出口节点需要开启转发,以及开启应用
docker版本很难使用

安装tailscale

curl -fsSL https://tailscale.com/install.sh | sh

启用 IP 转发

您必须启用 IP 转发才能将 Linux 设备宣传为出口节点。

if [ -d "/etc/sysctl.d" ]; then
    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
else
    echo "Directory /etc/sysctl.d does not exist."
fi

如果您的 Linux 系统有一个/etc/sysctl.d目录,请使用:

echo 'net.ipv4.ip_forward = 1' | tee -a /etc/sysctl.d/99-tailscale.conf
echo 'net.ipv6.conf.all.forwarding = 1' | tee -a /etc/sysctl.d/99-tailscale.conf
sysctl -p /etc/sysctl.d/99-tailscale.conf

否则,使用:

echo 'net.ipv4.ip_forward = 1' | tee -a /etc/sysctl.conf
echo 'net.ipv6.conf.all.forwarding = 1' | tee -a /etc/sysctl.conf
sysctl -p /etc/sysctl.conf

如果您的 Linux 节点使用firewalld,您可能需要允许伪装,以解决 [已知问题][xt-gh-tailscale-issue-3416] 问题。您可以使用以下命令允许伪装:

firewall-cmd --permanent --add-masquerade

其他 Linux 发行版可能需要不同的步骤。

启用 IP 转发时,请确保防火墙默认拒绝流量转发。许多 Linux 防火墙(如ufwfirewalld)默认使用此配置来防止路由意外流量。

子网路由器和出口节点的 Linux 优化

Tailscale 1.54 或更高版本与 Linux 6.2 或更高版本的内核一起使用,可以使用 传输层卸载 来提高 UDP 吞吐量。如果 Linux 设备充当出口节点或子网路由器,请确保以下网络设备配置到位以获得最佳效果:

NETDEV=$(ip -o route get 8.8.8.8 | cut -f 5 -d " ")
sudo ethtool -K $NETDEV rx-udp-gro-forwarding on rx-gro-list off

ip -o route get 8.8.8.8:这个命令用于获取到达IP地址 8.8.8.8 的路由信息,其中 8.8.8.8 是Google的公共DNS服务器。使用这个IP地址来获取默认的网络接口。

cut -f 5 -d " ":从返回的路由信息中提取第五个字段,它通常是对应的网络接口名称(例如 eth0, wlan0 等)。

结果赋值给变量 NETDEV,因此 NETDEV 现在包含了要配置的网络接口名称。

sudo ethtool -K $NETDEV ...ethtool 是一个用于查询和调整网络接口设置的工具,-K 选项用于更改网络接口的内核驱动特性。

rx-udp-gro-forwarding on:启用接收UDP包的广域网转发合并(GRO,Generic Receive Offload)。GRO可以减少CPU负载,通过合并多个小的数据包为更大的数据包。

rx-gro-list off:禁用接收GRO列表。这一选项通常用于优化特定情况下的网络性能。


默认情况下,使用 所做的更改 ethtool 在重启后不会保留。在使用 的 Linux 发行版上 networkd-dispatcher (您可以使用 进行验证 systemctl is-enabled networkd-dispatcher ),您可以运行以下命令来创建在每次启动时配置这些设置的脚本。

printf '#!/bin/sh\n\nethtool -K %s rx-udp-gro-forwarding on rx-gro-list off \n' "$(ip -o route get 8.8.8.8 | cut -f 5 -d " ")" | sudo tee /etc/networkd-dispatcher/routable.d/50-tailscale
sudo chmod 755 /etc/networkd-dispatcher/routable.d/50-tailscale

这段Shell代码的目的是创建一个脚本,并将其保存到特定目录,以便在网络状态改变时自动运行。以下是代码的具体解析:

  1. 生成脚本内容并保存:
printf '#!/bin/sh\n\nethtool -K %s rx-udp-gro-forwarding on rx-gro-list off \n' "$(ip -o route get 8.8.8.8 | cut -f 5 -d " ")" | sudo tee /etc/networkd-dispatcher/routable.d/50-tailscale
  • printf '#!/bin/sh\n\nethtool -K %s rx-udp-gro-forwarding on rx-gro-list off \n' ...printf 命令用于格式化输出内容。这一行生成一个简单的Shell脚本,内容如下:

    #!/bin/sh
    
    ethtool -K eth0 rx-udp-gro-forwarding on rx-gro-list off
    

    其中,eth0 是系统中默认的网络接口(由 $(ip -o route get 8.8.8.8 | cut -f 5 -d " ") 确定的)。

  • $(ip -o route get 8.8.8.8 | cut -f 5 -d " "):这一部分代码获取系统中默认路由所使用的网络接口名称。

  • sudo tee /etc/networkd-dispatcher/routable.d/50-tailscaletee 命令将生成的脚本内容保存到 /etc/networkd-dispatcher/routable.d/50-tailscale 文件中,sudo 确保具有写权限。

  1. 设置脚本权限:
sudo chmod 755 /etc/networkd-dispatcher/routable.d/50-tailscale
  • sudo chmod 755 ...chmod 755 将文件权限设置为可执行,权限为所有者可读写执行,组用户和其他用户可读执行。

运行以下命令来测试脚本,以确保它在您的设备上成功运行:

sudo /etc/networkd-dispatcher/routable.d/50-tailscale
test $? -eq 0 || echo 'An error occurred.'

tailscale 服务

启动服务

systemctl start tailscaled ; systemctl enable tailscaled ; systemctl status tailscaled
  • 不启用出口节点
tailscale up \
--accept-dns=false \
--accept-routes \
--reset \
--hostname=vps-luxembourg
  • 启用出口节点
tailscale up \
--accept-dns=false \
--accept-routes \
--advertise-exit-node \
--reset \
--hostname=vps-luxembourg
  • set 改名
tailscale set --hostname=us-ovh
  • tailscle 断开连接
tailscale down

命令选项

常用命令选项

  • --accept-dns 从管理控制台接受 DNS 配置。默认接受 DNS 设置。
  • --accept-routes 接受其他节点通告的 子网路由 。Linux 设备默认不接受路由。
  • --advertise-exit-node 提供作为Tailscale 网络出站互联网流量的 出口节点 。默认不提供作为出口节点。
  • --advertise-routes=192.168.1.0/24 向整个 Tailscale 网络公开物理 子网路由。
  • --authkey=<key> 提供一个 身份验证密钥 ,以自动将该节点身份验证为您的用户帐户。
  • --exit-node-allow-lan-access 允许客户端节点在连接到出口节点时访问其自己的 LAN。默认为在连接到出口节点时不允许访问。
  • --hostname=<name> 提供设备要使用的主机名,而不是操作系统提供的主机名。请注意,这将更改 MagicDNS 中使用的机器名称。
  • --qr 为网络登录 URL 生成二维码。默认不显示二维码。
  • --reset 将未指定的设置重置为默认值。

tailscale up command

  • --accept-dns 从管理控制台接受 DNS 配置。默认接受 DNS 设置。
  • --accept-risk=<risk> 接受风险并跳过风险类型的确认。这可以是 或 lose-sshall 或表示不接受风险的空字符串。
  • --accept-routes 接受其他节点通告的 子网路由 。Linux 设备默认不接受路由。
  • --advertise-exit-node 提供作为Tailscale 网络出站互联网流量的 出口节点 。默认不提供作为出口节点。
  • --advertise-routes=<ip> 向整个 Tailscale 网络公开物理 子网路由
  • --advertise-tags=<tags> 授予此设备标记权限。您必须被 列入"TagOwners" 才能应用标记。
  • --authkey=<key> 提供一个 身份验证密钥 ,以自动将该节点身份验证为您的用户帐户。
  • --exit-node=<ip|name> 提供 Tailscale IP机器名称 以用作出口节点。要禁用出口节点的使用,请传递带有空参数的标志:--exit-node=
  • --exit-node-allow-lan-access 允许客户端节点在连接到出口节点时访问其自己的 LAN。默认为在连接到出口节点时不允许访问。
  • --force-reauth 强制重新认证。
  • --hostname=<name> 提供设备要使用的主机名,而不是操作系统提供的主机名。请注意,这将更改 MagicDNS 中使用的机器名称。
  • --login-server=<url> 提供控制服务器的基本 URL,而不是https://controlplane.tailscale.com。如果您使用 Headscale 作为控制服务器,请使用 Headscale 实例的 URL。
  • --netfilter-mode (仅限 Linux)用于控制防火墙自动配置程度的高级功能。值为 offnodiverton 。默认为 on ,但 Synology 除外,其默认为 off 。将此标志设置为 off 将禁用所有管理 netfilter 。设置为 nodivert 将创建和管理 Tailscale 子链,但将这些链的调用留给管理员。设置为 on 意味着使用 Tailscale 规则的完全管理。请注意,如果您设置 --netfilter-modeoffnodivert ,则您有责任为 Tailscale 流量安全地配置防火墙。我们建议使用安装的规则作为 --netfilter-mode=on 起点。
  • --operator=<user> root 提供一个除操作之外的 Unix 用户名tailscaled
  • --qr 为网络登录 URL 生成二维码。默认不显示二维码。
  • --reset 将未指定的设置重置为默认值。
  • --shields-up 阻止来自 Tailscale 网络上其他设备的 传入连接。对于仅进行传出连接的个人设备很有用。
  • --snat-subnet-routes (仅限 Linux)将 NAT 流量源发送到通过 通告的本地路由 --advertise-routes 。默认将 NAT 流量源发送到通告的路由。设置为 false 可禁用子网路由伪装。
  • --stateful-filtering (仅限 Linux)为子网路由器和出口节点启用状态过滤。启用后,带有另一个节点目标 IP 的入站数据包将被丢弃,除非它们是来自该节点的跟踪出站连接的一部分。默认为禁用。
  • --ssh 运行 Tailscale SSH 服务器,允许按照 tailnet 管理员声明的 访问策略 进行访问,如果未定义则使用 默认策略。默认为 false。
  • --timeout=<duration> 等待 Tailscale 服务初始化的最长时间。duration 可以是 可解析的任何值 time.ParseDuration() 。默认为0s,表示永远阻塞。
  • --unattended (仅限 Windows)在 无人值守模式 下运行,即使当前用户注销后,Tailscale 仍会继续运行。

参考

  1. 出口节点(路由所有流量)
  2. Tailscale高级用法,route与exit-node实现局域网穿透与代理出口功能
  3. OpenWrt安装Tailscale设置内网穿透+科学出国+外网互访局域网设备
  4. Tailscale 启用 Exit node 后如何 bypass 国内地址
0

评论区