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 防火墙(如ufw
和firewalld
)默认使用此配置来防止路由意外流量。
子网路由器和出口节点的 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代码的目的是创建一个脚本,并将其保存到特定目录,以便在网络状态改变时自动运行。以下是代码的具体解析:
- 生成脚本内容并保存:
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-tailscale
:tee
命令将生成的脚本内容保存到/etc/networkd-dispatcher/routable.d/50-tailscale
文件中,sudo
确保具有写权限。
- 设置脚本权限:
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-ssh
,all
或表示不接受风险的空字符串。--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)用于控制防火墙自动配置程度的高级功能。值为off
、nodivert
或on
。默认为on
,但 Synology 除外,其默认为off
。将此标志设置为off
将禁用所有管理netfilter
。设置为nodivert
将创建和管理 Tailscale 子链,但将这些链的调用留给管理员。设置为on
意味着使用 Tailscale 规则的完全管理。请注意,如果您设置--netfilter-mode
为off
或nodivert
,则您有责任为 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 仍会继续运行。
评论区